クイック スタート: Terraform を使用して Azure CDN プロファイルとエンドポイントを作成する
重要
Azure CDN Standard from Microsoft (クラシック) は、2027 年 9 月 30 日に廃止されます。 サービスの中断を回避するには、2027 年 9 月 30 日までに Azure Front Door の Standard または Premium レベルに Azure CDN Standard from Microsoft (クラシック) プロファイルを移行することが重要です。 詳細については、Azure CDN Standard from Microsoft (クラシック) の廃止に関するページを参照してください。
Azure CDN from Edgio は、2025 年 1 月 15 日に廃止されました。 詳細については、「Azure CDN from Edgio の廃止に関する FAQ」を参照してください。
この記事では、Terraform を使用して Azure CDN プロファイルとエンドポイントを作成する方法について説明します。
Terraform を使用すると、クラウド インフラストラクチャの定義、プレビュー、およびデプロイを行うことができます。 Terraform を使用する際は、HCL 構文を使って構成ファイルを作成します。 HCL 構文では、Azure などのクラウド プロバイダーと、クラウド インフラストラクチャを構成する要素を指定できます。 構成ファイルを作成したら、"実行プラン" を作成します。これにより、インフラストラクチャの変更をデプロイ前にプレビューすることができます。 変更を確認したら、実行プランを適用してインフラストラクチャをデプロイします。
この記事では、次のことについて説明します。
- random_pet を使用して Azure リソース グループ名のランダムなペット名を作成する
- azurerm_resource_group を使用して Azure リソース グループを作成する
- random_string を使用して Azure CDN エンドポイント名のランダムな値を作成する
- azurerm_cdn_profileを使用して Azure CDN プロファイルを作成する
- azurerm_cdn_endpoint を使用して Azure CDN エンドポイントを作成する
前提条件
Terraform コードを実装する
注意
この記事のサンプル コードは、Azure Terraform GitHub リポジトリにあります。 Terraform の現在および以前のバージョンのテスト結果を含むログ ファイルを表示できます。
Terraform を使用して Azure リソースを管理する方法を示すその他の記事とサンプル コードを参照してください
サンプル Terraform コードをテストして実行するディレクトリを作成し、それを現在のディレクトリにします。
main.tf
という名前のファイルを作成し、次のコードを挿入します。resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { name = random_pet.rg_name.id location = var.resource_group_location } resource "random_string" "aazurerm_cdn_profile_name" { length = 13 lower = true numeric = false special = false upper = false } resource "azurerm_cdn_profile" "profile" { name = "profile-${random_string.azurerm_cdn_endpoint_name.result}" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name sku = var.cdn_sku } resource "random_string" "azurerm_cdn_endpoint_name" { length = 13 lower = true numeric = false special = false upper = false } resource "azurerm_cdn_endpoint" "endpoint" { name = "endpoint-${random_string.azurerm_cdn_endpoint_name.result}" profile_name = azurerm_cdn_profile.profile.name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name is_http_allowed = true is_https_allowed = true querystring_caching_behaviour = "IgnoreQueryString" is_compression_enabled = true content_types_to_compress = [ "application/eot", "application/font", "application/font-sfnt", "application/javascript", "application/json", "application/opentype", "application/otf", "application/pkcs7-mime", "application/truetype", "application/ttf", "application/vnd.ms-fontobject", "application/xhtml+xml", "application/xml", "application/xml+rss", "application/x-font-opentype", "application/x-font-truetype", "application/x-font-ttf", "application/x-httpd-cgi", "application/x-javascript", "application/x-mpegurl", "application/x-opentype", "application/x-otf", "application/x-perl", "application/x-ttf", "font/eot", "font/ttf", "font/otf", "font/opentype", "image/svg+xml", "text/css", "text/csv", "text/html", "text/javascript", "text/js", "text/plain", "text/richtext", "text/tab-separated-values", "text/xml", "text/x-script", "text/x-component", "text/x-java-source", ] origin { name = "origin1" host_name = var.origin_url } }
outputs.tf
という名前のファイルを作成し、次のコードを挿入します。output "resource_group_name" { value = azurerm_resource_group.rg.name } output "cdn_profile_name" { value = azurerm_cdn_profile.profile.name } output "cdn_endpoint_endpoint_name" { value = azurerm_cdn_endpoint.endpoint.name } output "cdn_endpoint_fqdn" { value = azurerm_cdn_endpoint.endpoint.fqdn }
providers.tf
という名前のファイルを作成し、次のコードを挿入します。terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
variables.tf
という名前のファイルを作成し、次のコードを挿入します。variable "resource_group_location" { type = string description = "Location for all resources." default = "eastus" } variable "resource_group_name_prefix" { type = string description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." default = "rg" } variable "origin_url" { type = string description = "Url of the origin." default = "www.contoso.com" } variable "cdn_sku" { type = string description = "CDN SKU names." default = "Standard_Microsoft" validation { condition = contains(["Standard_Akamai", "Standard_Microsoft", "Standard_Verizon", "Premium_Verizon"], var.cdn_sku) error_message = "The cdn_sku must be one of the following: Standard_Akamai, Standard_Microsoft, Standard_Verizon, Premium_Verizon." } }
Terraform を初期化する
terraform init を実行して、Terraform のデプロイを初期化します。 このコマンドによって、Azure リソースを管理するために必要な Azure プロバイダーがダウンロードされます。
terraform init -upgrade
重要なポイント:
-
-upgrade
パラメーターは、必要なプロバイダー プラグインを、構成のバージョン制約に準拠する最新バージョンにアップグレードします。
Terraform 実行プランを作成する
terraform plan を実行して、実行プランを作成します。
terraform plan -out main.tfplan
重要なポイント:
-
terraform plan
コマンドは、実行プランを作成しますが、実行はしません。 代わりに、構成ファイルに指定された構成を作成するために必要なアクションを決定します。 このパターンを使用すると、実際のリソースに変更を加える前に、実行プランが自分の想定と一致しているかどうかを確認できます。 - 省略可能な
-out
パラメーターを使用すると、プランの出力ファイルを指定できます。-out
パラメーターを使用すると、レビューしたプランが適用内容とまったく同じであることが確実になります。
Terraform 実行プランを適用する
terraform apply を実行して、クラウド インフラストラクチャに実行プランを適用します。
terraform apply main.tfplan
重要なポイント:
-
terraform apply
コマンドの例は、以前にterraform plan -out main.tfplan
が実行されたことを前提としています。 -
-out
パラメーターに別のファイル名を指定した場合は、terraform apply
の呼び出しで同じファイル名を使用します。 -
-out
パラメーターを使用しなかった場合は、パラメーターを指定せずにterraform apply
を呼び出します。
結果を確認する
Azure CDN プロファイルとエンドポイントが作成された Azure リソース グループ名を取得します。
resource_group_name=$(terraform output -raw resource_group_name)
CDN プロファイル名を取得します。
cdn_profile_name=$(terraform output -raw cdn_profile_name)
CDN エンドポイント名を取得します。
cdn_endpoint_endpoint_name=$(terraform output -raw cdn_endpoint_endpoint_name)
az cdn custom-domain show を実行して、この記事で作成したカスタム ドメインの詳細を表示します。
az cdn endpoint show --resource-group $resource_group_name \ --profile-name $cdn_profile_name \ --name $cdn_endpoint_endpoint_name
リソースをクリーンアップする
Terraform を使用して作成したリソースが不要になった場合は、次の手順を実行します。
terraform plan を実行して、
destroy
フラグを指定します。terraform plan -destroy -out main.destroy.tfplan
重要なポイント:
-
terraform plan
コマンドは、実行プランを作成しますが、実行はしません。 代わりに、構成ファイルに指定された構成を作成するために必要なアクションを決定します。 このパターンを使用すると、実際のリソースに変更を加える前に、実行プランが自分の想定と一致しているかどうかを確認できます。 - 省略可能な
-out
パラメーターを使用すると、プランの出力ファイルを指定できます。-out
パラメーターを使用すると、レビューしたプランが適用内容とまったく同じであることが確実になります。
-
terraform apply を実行して、実行プランを適用します。
terraform apply main.destroy.tfplan
Azure での Terraform のトラブルシューティング
Azure で Terraform を使用する場合の一般的な問題のトラブルシューティング