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 ワークスペース ライブラリ |
使用階層
全体として、使用するには次の手順に従う必要があります。
- まず、
azapi_resource
内でできる限り多くの操作を実行することをお勧めします。 - リソース タイプが
azapi_resource
内に存在せず、azapi_data_plane_resource
でサポートされているタイプのいずれかに該当する場合は、代わりにそれを使用します。 - リソースが既に AzureRM に存在する場合、または
azapi_resource
内でアクセスできないプロパティがある場合は、azapi_update_resource
を使用してこれらの特定のプロパティにアクセスします。azapi_resource
またはazapi_data_plane_resource
でサポートされていないリソースは、このリソースを使用して更新することはできません。 - Azure CRUD 対応リソースに基づかないアクションを実行する場合、
azapi_resource_action
はazapi_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 プロバイダーの推奨される使用方法は次のとおりです。
- サービスまたは機能がプレビュー段階にある間は、AzAPI プロバイダーを使用します。
- サービスが正式にリリースされたら、AzureRM プロバイダーを使用します。
AzAPI2AzureRM ツールは、AzAPI プロバイダーから AzureRM プロバイダーへの移行に役立つよう設計されています。
AzAPI2AzureRM は、AzAPI リソースを AzureRM リソースに変換するプロセスを自動化するオープンソース ツールです。
AzAPI2AzureRM には、"プラン" と "移行" の 2 つのモードがあります。
- プランでは、移行できる AzAPI リソースが表示されます。
- 移行では、HCL ファイルと状態の両方でAzAPI リソースを AzureRM リソースに移行します。
AzAPI2AzureRM は、移行後に Terraform の構成と状態が実際の状態と一致することを保証します。 移行が完了したら、terraform plan
を実行して状態の更新を検証し、何も変更されていないことを確認できます。
AzAPI プロバイダーの使用
VS Code 拡張機能をインストールする
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 = "..." }
次のコード例に示すように、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" } } } }