Azureには、AzureRM と AzAPI の 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 以降) |
| 計画時のプレフライト・検証 | いいえ | はい- プレフライト検証を有効にする |