次の方法で共有


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

次の Terraform と Terraform プロバイダーのバージョンでテストされた記事:

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

この記事では、AzAPI Terraform プロバイダーを使用して、AzureRM プロバイダーで現在サポートされていない Azure サービスを管理する方法について説明します。 azapi_resource は、 Azure Lab Services アカウントとラボを管理するために使用されます。

  • AzureRM プロバイダーと AzAPI プロバイダーを定義して構成します。
  • AzureRM プロバイダーを使用して Azure リソース グループを作成する
  • AzureRM プロバイダーを使用してサブスクリプションに "Microsoft.LabServices" プロバイダーを登録する
  • AzAPI プロバイダーを使用して Azure Lab Services リソースを作成する

Note

この記事のコード例は、Azure Terraform GitHub リポジトリにあります。

前提条件

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

Terraform コードを実装する

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

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

    terraform {
      required_providers {
        azapi = {
          source  = "azure/azapi"
          version = "=0.1.0"
        }
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "=3.0.2"
        }
      }
    }
    
    provider "azapi" {
      default_location = "eastus"
      default_tags = {
        team = "Azure deployments"
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. main.tf という名前のファイルを作成し、次のコードを挿入します。

    resource "azurerm_resource_group" "qs101" {
      name     = "rg-qs101"
      location = "westus2"
    }
    
  4. main-generic.tf という名前のファイルを作成し、次のコードを挿入します。

    # Provision a Lab Service Account and a Lab that are in public preview
    resource "azapi_resource" "qs101-account" {
      type      = "Microsoft.LabServices/labaccounts@2018-10-15"
      name      = "qs101LabAccount"
      parent_id = azurerm_resource_group.qs101.id
    
      body = jsonencode({
        properties = {
          enabledRegionSelection = false
        }
      })
    }
    
    resource "azapi_resource" "qs101-lab" {
      type      = "Microsoft.LabServices/labaccounts/labs@2018-10-15"
      name      = "qs101Lab"
      parent_id = azapi_resource.qs101-account.id
    
      body = jsonencode({
        properties = {
          maxUsersInLab  = 10
          userAccessMode = "Restricted"
        }
      })
    }
    

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. Azure サブスクリプションで、rg-qs101 リソース グループを参照します。
  2. qs101LabAccount という名前の新しい Lab Services アカウントが、リソース グループのメンバーとして表示されます。

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

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 を使用する場合の一般的な問題のトラブルシューティング

次のステップ