Terraform AzAPI プロバイダーの概要

AzAPI プロバイダーは、 Azure ARM REST API の上にある薄いレイヤーです。 AzAPI プロバイダーを使用すると、任意の API バージョンを使用して任意の Azure リソースの種類を管理できます。 このプロバイダーは、新しい Azure リソースとプロパティ (プライベート プレビューを含む) の管理を有効にすることで、AzureRM プロバイダーを補完します。

リソース

更新を必要とせずにすべての Azure リソースと機能を管理できるようにするために、AzAPI プロバイダーには次の汎用リソースが含まれています。

リソース名 説明
azapi_resource 完全な CRUD を使用して Azure (コントロール プレーン) リソース (API) を完全に管理するために使用されます。
   ユース ケースの例:
      新しいプレビュー サービス
      既存のサービスに追加された新機能
      現在対象外の既存の機能とサービス
azapi_update_resource 完全な CRUD を持たないリソースまたはリソースの一部を管理するために使用される
   ユース ケースの例:
      既存のサービスの新しいプロパティを更新する
      DNS SOA レコードなど、事前に作成された子リソースを更新します。

リソースの構成例

次のコード スニペットは、AzureRM プロバイダーに現在存在しないリソースを構成します。

resource "azapi_resource" "publicip" {
  type      = "Microsoft.Network/Customipprefixes@2021-03-01"
  name      = "exfullrange"
  parent_id = azurerm_resource_group.example.id
  location  = "westus2"

  body = jsonencode({
    properties = {
      cidr          = "10.0.0.0/24"
      signedMessage = "Sample Message for WAN"
    }
  })
}

次のコード スニペットでは、AzureRM から既存のリソースのプレビュー プロパティを構成します。

resource "azapi_update_resource" "test" {
  type        = "Microsoft.ContainerRegistry/registries@2020-11-01-preview"
  resource_id = azurerm_container_registry.acr.id

  body = jsonencode({
    properties = {
      anonymousPullEnabled = var.bool_anonymous_pull
    }
  })
}

AzAPI プロバイダーを使用した認証

AzAPI プロバイダーは、AzureRM プロバイダーと同じ認証方法を有効にします。 認証オプションの詳細については、「Azure への Terraform の認証」を参照してください。

AzAPI プロバイダーを使用する利点

AzAPI プロバイダーには、次のような利点があります。

  • すべての Azure サービスをサポートします。
    • プライベート プレビュー サービスと機能
    • パブリック プレビュー サービスと機能
    • すべての API のバージョン
  • 完全な Terraform 状態ファイルの忠実性
    • プロパティと値は状態に保存
  • Swagger への依存関係なし
  • 一般的で一貫性のある Azure 認証

AzAPI プロバイダーのエクスペリエンスとライフサイクル

このセクションでは、AzAPI プロバイダーの使用に役立ついくつかのツールについて説明します。

VS Code 拡張機能と言語サーバー

AzAPI VS Code 拡張機能は、次の利点を備えた豊富なオーサリング エクスペリエンスを提供します。

  • Intellisense
  • コードのオート コンプリート
  • ヒント
  • 構文検証
  • クイック ヒント

AzAPI2AzureRM 移行ツール

AzureRM プロバイダーは、Azure リソースを管理するための最も統合された Terraform エクスペリエンスを提供します。 そのため、AzAPI プロバイダーと AzureRM プロバイダーの推奨される使用方法は次のとおりです。

  1. サービスまたは機能がプレビュー段階にある間は、AzAPI プロバイダーを使用します。
  2. サービスが正式にリリースされたら、AzureRM プロバイダーを使用します。

AzAPI2AzureRM ツールは、AzAPI プロバイダーから AzureRM プロバイダーへの移行に役立つよう設計されています。

AzAPI2AzureRM は、AzAPI リソースを AzureRM リソースに変換するプロセスを自動化するオープンソース ツールです。

AzAPI2AzureRM には、"プラン" と "移行" の 2 つのモードがあります。

  • プランでは、移行できる AzAPI リソースが表示されます。
  • 移行では、HCL ファイルと状態の両方でAzAPI リソースを AzureRM リソースに移行します。

AzAPI2AzureRM は、移行後に Terraform の構成と状態が実際の状態と一致することを保証します。 状態が更新されたことを検証するには、移行を完了した後に terraform plan を実行して、何も変更されていないことを確認できます。

AzAPI プロバイダーの使用

  1. VS Code 拡張機能をインストールする

  2. AzAPI プロバイダーを Terraform 構成に追加します。

    terraform {
      required_providers {
        azapi = {
          source  = "Azure/azapi"
        }
      }
    }
    
    provider "azapi" {
      # More information on the authentication methods supported by
      # the AzureRM Provider can be found here:
      # https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs
    
      # subscription_id = "..."
      # client_id       = "..."
      # client_secret   = "..."
      # tenant_id       = "..."
    }
    
  3. 次のコード例に示すように、1 つ以上の AzAPI リソースを宣言します。

    resource "azapi_resource" "example" {
      name = "example"
      parent_id = data.azurerm_machine_learning_workspace.existing.id
      type = "Microsoft.MachineLearningServices/workspaces/computes@2021-07-01"
    
      location = "eastus"
      body = jsonencode({
        properties = {
          computeType      = "ComputeInstance"
          disableLocalAuth = true
          properties = {
            vmSize = "STANDARD_NC6"
          }
        }
      })
    }
    
    

次のステップ