AzureRM プロバイダーと AzAPI Terraform プロバイダーを選択する

Azureには、AzureRMAzAPI の 2 つの公式 Terraform プロバイダーがあります。 どちらのプロバイダーも Terraform を使用してAzureリソースを管理しますが、異なる方法を使用します。 これらの違いを理解することは、プロジェクトに適したプロバイダー (またはプロバイダーの組み合わせ) を選択するのに役立ちます。

各プロバイダーの概要

AzureRM は、Terraform を使用してAzureリソースを管理するための標準プロバイダーです。 統合された検証、一貫性のある動作、広範なコミュニティ ドキュメントを備えた、精選された型指定されたリソース ブロックが提供されます。 ただし、AzureRM では、Azureリソースの種類と API バージョンのサブセットのみがサポートされており、新機能は多くの場合、Azureリリースより遅れています。

AzAPI は、Azure Resource Manager (ARM) REST API の上にある薄いレイヤーです。 AzureRM でまだサポートされていないプレビュー機能やサービスなど、任意の API バージョンでAzureリソースの種類をサポートします。 AzAPI を使用すると、プロバイダーの更新を待たずに ARM API に直接アクセスできます。

AzureRM を使用するタイミング

次の場合は、プライマリ プロバイダーとして AzureRM を使用します。

  • 管理しているリソースは、安定した API バージョンの AzureRM で完全にサポートされています。
  • 組み込みの検証と優れた IDE サポートを備えた、精選されたリソース スキーマが必要です。
  • チームは、広範なコミュニティ リソース、例、モジュールの可用性を評価します。
  • プレビュー機能へのアクセスを必要としない、確立されたAzure サービスを管理しています。

AzureRM は、Azure上に構築するほとんどのチームに適した既定値です。 AzureRM から始めて、必要な場合にのみ AzAPI で補完します。

AzAPI を使用する場合

次の場合は、プライマリ プロバイダーとして AzAPI を使用するか、AzureRM を補完します。

  • AzureRM でまだサポートされていないAzureリソースを管理する必要があります。
  • AzureRM で公開されていない特定の API バージョン (プレビュー バージョンを含む) を使用する必要があります。
  • AzureRM では表示されないリソース プロパティにアクセスする必要があります。
  • コンプライアンスまたは再現性の理由から、API バージョンを完全に制御する必要があります。
  • AzureRM がサポートを追加する前に、Azureリリースの直後にリソースを管理しています。

両方のプロバイダーを一緒に使用する場合

AzureRM と AzAPI は、並行して動作するように設計されています。 一般的なパターンは、ほとんどのインフラストラクチャで AzureRM を使用し、必要に応じ Arm API への直接アクセスに AzAPI を使用することです。

  • azapi_update_resourceを使用して、AzureRM で公開されていない AzureRM マネージド リソースのプロパティを設定します。
  • azapi_resourceを使用して新しいサービスまたはプレビュー機能を管理し、スタックの残りの部分では AzureRM を使用します。
  • azapi_resource_actionを使用して、標準の作成/読み取り/更新/削除ライフサイクルに適合しない AzureRM で管理されるリソースに対する操作を実行します。
# Manage the primary resource with AzureRM
resource "azurerm_kubernetes_cluster" "example" {
  name                = "my-aks"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  dns_prefix          = "myaks"
  default_node_pool {
    name       = "default"
    node_count = 1
    vm_size    = "Standard_DS2_v2"
  }
  identity {
    type = "SystemAssigned"
  }
}

# Use AzAPI to set a property not exposed by AzureRM
resource "azapi_update_resource" "aks_preview_feature" {
  type        = "Microsoft.ContainerService/managedClusters@2024-02-01"
  resource_id = azurerm_kubernetes_cluster.example.id

  body = {
    properties = {
      networkProfile = {
        networkDataplane = "cilium"
      }
    }
  }
}

長期的な戦略の選択

AzureRM-primary: AzureRM 内のすべてのリソースを管理し、まだサポートされていない機能の一時的なブリッジとしてのみ AzAPI を使用します。 aztfmigrate ツールを使用して、サポートが利用可能になったときに AzAPI リソースを AzureRM に移行します。

AzAPI-primary: 一貫性のある API バージョン管理と新機能への早期アクセスのために、AzAPI を介してすべてのリソースを管理します。 この方法では、より多くの構成が必要ですが、すべてのリソースの API バージョンを完全に制御できます。

ほとんどのチームは、AzureRM プライマリ戦略から始めて、必要に応じて AzAPI を採用する必要があります。

機能の比較

Feature AzureRM AzAPI
すべてのAzureリソースの種類をサポートします いいえ - キュレーションされたサブセット Yes
プレビュー API バージョンをサポートします いいえ Yes
キュレーションされたリソース スキーマ Yes いいえ
組み込みプロパティの検証 Yes 部分 (プレフライト経由)
IDE のプロパティに対するオートコンプリート Yes はい (VS Code 拡張機能を使用)
応答のエクスポート/JMESPath フィルター処理 いいえ Yes
データプレーン リソース管理 いいえ はい (選択したリソースの種類)
ID 構築のプロバイダー関数 いいえ はい (v2.0 以降)
計画時のプレフライト・検証 いいえ はい- プレフライト検証を有効にする

次のステップ