我尝试了使用名为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。