我尝试了使用名为AzAPI的工具来管理无法在Terraform中支持的Azure资源

背景和目标

用于基础设施即代码(IaC)的Terraform非常方便。随着使用的深入,有时可能会遇到这样的情况,即“哎呀,Terraform没有支持的资源!”之前我们是通过Azure CLI或Azure REST API来解决这个问题,但从现在开始,似乎可以通过Terraform的AzAPI资源来解决了。因此,这一次我试验了使用Azure CLI和Terraform的常规版本来创建资源组和虚拟网络的例子,最后还尝试了使用Terraform的AzAPI嵌入版本。

前提条件 (Qian ti tiao jian)

执行命令的环境是Mac + Azure CLI。

$ sw_vers
ProductName:    macOS
ProductVersion: 12.3.1
BuildVersion:   21E258

$ az version
{
  "azure-cli": "2.35.0",
  "azure-cli-core": "2.35.0",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {}
}

$ terraform -v
Terraform v1.1.8
on darwin_amd64

以下是使用Azure CLI创建资源组和虚拟网络的示例:

# リソースグループを作成します
az group create \
  --name test-rg \
  --location japaneast

# 仮想ネットワークを作成します
az network vnet create \
  --resource-group test-rg \
  --name test-vnet \
  --address-prefixes 10.0.0.0/16

# 仮想ネットワークを更新します
az network vnet update \
  --resource-group test-rg \
  --name test-vnet \
  --address-prefixes 172.16.0.0/16

# リソースグループを削除します
az group delete \
  --name test-rg

以下是使用 Terraform 创建资源组和虚拟网络的示例。

# Terraform コードを作成します
cat <<EOF > main.tf
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
    }
  }
}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "test-rg" {
  name     = "test-rg"
  location = "japaneast"
}

resource "azurerm_virtual_network" "test-vnet" {
  name                = "test-vnet"
  location            = azurerm_resource_group.test-rg.location
  resource_group_name = azurerm_resource_group.test-rg.name
  address_space       = ["10.0.0.0/16"]
}
EOF

# 初期化します
terraform init

# 実行プランを確認します
terraform plan

# Terraform を実行します
terraform apply -auto-approve

# 仮想ネットワークのアドレス空間を変更します
gsed -i 's/10.0.0.0/172.16.0.0/' main.tf 

# 実行プランを確認します
terraform plan

# Terraform を実行します
terraform apply -auto-approve

# 作成したリソースを削除します
terraform destroy

在使用AzAPI的Terraform中创建资源组和虚拟网络的示例。

# Terraform コードを作成します
cat <<EOF > main.tf
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
    }
    azapi = {
      source  = "azure/azapi"
    }
  }
}

provider "azurerm" {
  features {}
}

provider "azapi" {
}

resource "azurerm_resource_group" "test-rg" {
  name     = "test-rg"
  location = "japaneast"
}

resource "azapi_resource" "test-vnet" {
  type      = "Microsoft.Network/virtualNetworks@2021-05-01"
  name      = "test-vnet"
  parent_id = azurerm_resource_group.test-rg.id
  location  = azurerm_resource_group.test-rg.location

  body = jsonencode({
    properties = {
      "addressSpace": {
        "addressPrefixes": [
          "10.0.0.0/16"
        ]
      }
    }
  })
}
EOF

# 初期化します
terraform init

# 実行プランを確認します
terraform plan

# Terraform を実行します
terraform apply -auto-approve

# 仮想ネットワークのアドレス空間を変更します
gsed -i 's/10.0.0.0/172.16.0.0/' main.tf 

# 実行プランを確認します
terraform plan

# Terraform を実行します
terraform apply -auto-approve

# 作成したリソースを削除します
terraform destroy

请查看

以下是中文版本的简洁翻译:

https://docs.microsoft.com/zh-cn/azure/developer/terraform/overview-azapi-provider

请参考以下链接,以获取有关使用 Azure API 资源进行 Terraform 开发的入门指南。

宣布 Azure Terrafy 和 AzAPI Terraform 提供程序预览,详情请查阅:https://techcommunity.microsoft.com/t5/azure-tools-blog/announcing-azure-terrafy-and-azapi-terraform-provider-previews/ba-p/3270937

创建或更新虚拟网络的API可以在此链接中找到:https://docs.microsoft.com/ja-jp/rest/api/virtualnetwork/virtual-networks/create-or-update。

广告
将在 10 秒后关闭
bannerAds