次の方法で共有


Terraform AzAPI プロバイダーの概要

AzAPI プロバイダーは、 Azure ARM REST API の上にある薄いレイヤーです。 任意の API バージョンを使用して任意の Azure リソース タイプを管理できるため、Azure 内で最新の機能を利用できます。 AzAPI は、単独でも AzureRM プロバイダーとの連携でも使用できるように設計されている、優秀なプロバイダーです。

リソース

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

リソース名 説明
azapi_resource 完全な CRUD を使用して Azure (コントロール プレーン) リソース (API) を完全に管理するために使用されます。
   ユース ケースの例:
      新しいプレビュー サービス
      既存のサービスに追加された新機能
      現在対象外の既存の機能とサービス
azapi_update_resource 完全な CRUD を持たないリソースまたはリソースの一部を管理するために使用される
   ユース ケースの例:
      既存のサービスの新しいプロパティを更新する
      DNS SOA レコードなど、事前に作成された子リソースを更新します。
azapi_resource_action リソースのライフサイクルを管理せずに、リソースに対して単一の操作を実行するために使用されます
   ユース ケースの例:
      仮想マシンをシャットダウンする
      Key Vault にシークレットを追加する
azapi_data_plane_resource Azure データ プレーン リソースの特定のサブセットを管理するために使用されます
   ユース ケースの例:
      KeyVault 証明書の連絡先
      Synapse ワークスペース ライブラリ

使用階層

全体として、使用するには次の手順に従う必要があります。

  1. まず、azapi_resource 内でできる限り多くの操作を実行することをお勧めします。
  2. リソース タイプが azapi_resource 内に存在せず、azapi_data_plane_resource でサポートされているタイプのいずれかに該当する場合は、代わりにそれを使用します。
  3. リソースが既に AzureRM に存在する場合、または azapi_resource 内でアクセスできないプロパティがある場合は、azapi_update_resource を使用してこれらの特定のプロパティにアクセスします。 azapi_resource または azapi_data_plane_resource でサポートされていないリソースは、このリソースを使用して更新することはできません。
  4. Azure CRUD 対応リソースに基づかないアクションを実行する場合、azapi_resource_actionazapi_update_resource ほど簡単ではありませんが、柔軟性は高くなります。

リソースの構成例

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

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

  body = {
    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 = {
    properties = {
      anonymousPullEnabled = var.bool_anonymous_pull
    }
  }
}

次のコード スニペットでは、既存の AzureRM リソースに対するリソース アクションを構成しています。

resource "azapi_resource_action" "vm_shutdown" {
  type = "Microsoft.Compute/virtualMachines@2023-07-01"
  resource_id = azurerm_linux_virtual_machine.example.id
  action = "powerOff”
}

次のコード スニペットは、データ プレーンにプロビジョニングされているため、現在 AzureRM プロバイダーに存在しないリソースを構成しています。

resource "azapi_data_plane_resource" "dataset" {
  type      = "Microsoft.Synapse/workspaces/datasets@2020-12-01"
  parent_id = trimprefix(data.azurerm_synapse_workspace.example.connectivity_endpoints.dev, "https://")
  name      = "example-dataset"
  body = {
    properties = {
      type = "AzureBlob",
      typeProperties = {
        folderPath = {
          value = "@dataset().MyFolderPath"
          type  = "Expression"
        }
        fileName = {
          value = "@dataset().MyFileName"
          type  = "Expression"
        }
        format = {
          type = "TextFormat"
        }
      }
      parameters = {
        MyFolderPath = {
          type = "String"
        }
        MyFileName = {
          type = "String"
        }
      }
    }
  }
}

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

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

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

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

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

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

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

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

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

  • 使用可能なすべてのリソースの種類と API バージョンを一覧表示します。 使用可能なすべてのリソースの種類の一覧表示
  • 任意のリソースで許可されるプロパティと値のオートコンプリート。 許可されるプロパティの一覧表示
  • プロパティの上にマウス ポインターを置くと、ヒントが表示されます。 プロパティの上にマウス ポインターを置くと、ヒントが表示される
  • 構文検証 構文検証
  • コード サンプルを使用したオートコンプリート。 コード サンプルを使用したオートコンプリート

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 = {
        properties = {
          computeType      = "ComputeInstance"
          disableLocalAuth = true
          properties = {
            vmSize = "STANDARD_NC6"
          }
        }
      }
    }
    
    

次のステップ