次の方法で共有


クイックスタート: AzAPI Terraform プロバイダーを使用して最初の Azure 更新リソースをデプロイする

Terraform を使用すると、クラウド インフラストラクチャの定義、プレビュー、およびデプロイを行うことができます。 Terraform を使用する際は、HCL 構文を使って構成ファイルを作成します。 HCL 構文では、Azure などのクラウド プロバイダーと、クラウド インフラストラクチャを構成する要素を指定できます。 構成ファイルを作成したら、"実行プラン" を作成します。これにより、インフラストラクチャの変更をデプロイ前にプレビューすることができます。 変更を確認したら、実行プランを適用してインフラストラクチャをデプロイします。

この記事では、AzAPI Terraform プロバイダー を使用して、AzureRM プロバイダーが現在サポートしていない Azure サービス 管理する方法について説明します。 コード例では、azapi_resource を使用して、Azure Container Registry リソースを管理します。

  • AzureRM プロバイダーと AzAPI プロバイダーを定義して構成する
  • AzureRM プロバイダーを使用して、一意の名前を持つ Azure リソース グループを作成する
  • AzureRM プロバイダーを使用して、サブスクリプションに "Microsoft.ContainerRegistry" プロバイダーを登録する
  • AzAPI プロバイダーを使用して Azure Container Registry リソースを作成する

前提条件

  • Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

Terraform コードを実装する

Note

この記事のサンプル コードは、Azure Terraform GitHub リポジトリにあります。 Terraform の現在および以前のバージョンからのテスト結果を含むログ ファイルを表示できます。

Terraform を使用して Azure リソースを管理する方法を示す 記事とサンプル コード

  1. サンプルの Terraform コードをテストするディレクトリを作成し、それを現在のディレクトリにします。

  2. providers.tf という名前のファイルを作成し、次のコードを挿入します。

    terraform {
      required_providers {
        azapi = {
          source = "Azure/azapi"
          version = "~>2.0"
        }
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>4.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. variables.tf という名前のファイルを作成し、次のコードを挿入します。

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    
    variable "container_registry_name" {
      type        = string
      default     = ""
      description = "Name of the container registry."
    }
    
  4. main.tf という名前のファイルを作成し、次のコードを挿入します。

    # Create a resource group with a random name.
    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "rg" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    # Create a user assigned identity resource.
    resource "azurerm_user_assigned_identity" "example" {
      name                = "example"
      resource_group_name = azurerm_resource_group.rg.name
      location            = azurerm_resource_group.rg.location
    }
    
    # Create a random name for the container registry.
    resource "random_string" "acr_name" {
      length  = 10
      special = false
      upper   = false
      numeric = false
    }
    
    # Manage a container registry resource.
    resource "azapi_resource" "example" {
      type      = "Microsoft.ContainerRegistry/registries@2020-11-01-preview"
      name      = coalesce(var.container_registry_name, random_string.acr_name.result)
      parent_id = azurerm_resource_group.rg.id
    
      location = azurerm_resource_group.rg.location
      identity {
        type         = "SystemAssigned, UserAssigned"
        identity_ids = [azurerm_user_assigned_identity.example.id]
      }
    
      body = {
        sku = {
          name = "Standard"
        }
        properties = {
          adminUserEnabled = true
        }
      }
    
      tags = {
        "Key" = "Value"
      }
    
      response_export_values = ["properties.loginServer", "properties.policies.quarantinePolicy.status"]
    }
    
  5. outputs.tf という名前のファイルを作成し、次のコードを挿入します。

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "azure_container_registry_name" {
      value = azapi_resource.example.name
    }
    

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 を呼び出します。

結果を確認する

  1. リソース グループ名を取得します。

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. コンテナー レジストリ名を取得します。

    azure_container_registry_name=$(terraform output -raw azure_container_registry_name)
    
  3. az acr show 実行して、コンテナー レジストリを表示します。

    az acr show --name $azure_container_registry_name --resource-group $resource_group_name
    

リソースをクリーンアップする

Terraform を使用して作成したリソースが不要になった場合は、次の手順を実行します。

  1. terraform plan を実行して、destroy フラグを指定します。

    terraform plan -destroy -out main.destroy.tfplan
    

    重要なポイント:

    • terraform plan コマンドは、実行プランを作成しますが、実行はしません。 代わりに、構成ファイルに指定された構成を作成するために必要なアクションを決定します。 このパターンを使用すると、実際のリソースに変更を加える前に、実行プランが自分の想定と一致しているかどうかを確認できます。
    • 省略可能な -out パラメーターを使用すると、プランの出力ファイルを指定できます。 -out パラメーターを使用すると、レビューしたプランが適用内容とまったく同じであることが確実になります。
  2. terraform apply を実行して、実行プランを適用します。

    terraform apply main.destroy.tfplan
    

Azure での Terraform のトラブルシューティング

Azure で Terraform を使用する場合の一般的な問題のトラブルシューティング

次のステップ