如何从使用 Terraform 创建的 APIM 中删除演示产品?



我创建了我的 API 管理实例,并使用 Terraform 导入 Swagger API,如下所示:

#Create the API Management layer
resource "azurerm_api_management" "apim" {
name                = "${var.prefix}-apim"
resource_group_name = var.resource_group_name
location            = var.resource_group_location
sku {
name     = "Developer"
capacity = 1
}
}
resource "azurerm_api_management_api" "swagger" {
name                = "ensurex-transaction-api"
resource_group_name = var.resource_group_name
api_management_name = azurerm_api_management.apim.name
revision            = "1"
display_name        = "My API"
path                = "api"
protocols           = ["https"]
import {
content_format = "swagger-json"
#TODO: Put this in a better place during build/tests
content_value = file("../../web/out/test/swagger.json")
}
}

但是,当我打开开发人员页面时,有一个名为"Echo API"的api和名为"Starter"和"Unlimited"的产品。

是否有可能首先阻止Terraform创建这些?

或者是否可以向 Terraform 脚本添加一些内容以在创建它们后将其删除?

在 terraform 之后,我的下一步是使用 ansible 对资源进行一些配置,所以我可以接受在那里完成的解决方案。

但是,我不想使用Powershell或用ARM模板替换terraform。

似乎不可能首先阻止 terraform 创建这些,因为它们是由 terraform 使用的底层 SDK 创建的。

无法直接使用 Azure CLI,因为它尚不支持 API 管理。

但是,REST API 确实支持它。

  • 删除接口
  • 删除产品

Azure CLI 中有一个模块,可用于以跨平台方式调用 REST API。

例如

az rest -m delete -u "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/my-resource-group-name/providers/Microsoft.ApiManagement/service/my-apim-name/apis/echo-api?api-version=2019-01-01"

与 curl 等解决方案相比,这具有优势,因为它正在为您处理身份验证。

另一个关键点是,{subscriptionId}会自动替换为正确的值(假设您使用正确的帐户登录(,您不必自己查找该值。

然后,可以使用具有空资源的本地可执行文件将这些命令嵌入到terraform中。

# Create a resource group
resource "azurerm_resource_group" "resource-group" {
name     = "${var.prefix}_rg"
location = var.resource_group_location
tags = var.tags
}
resource "azurerm_api_management" "apim" {
name                = "${var.prefix}-apim"
resource_group_name = azurerm_resource_group.resource-group.name
location            = var.resource_group_location
sku {
name     = "Developer"
capacity = 1
}
}
resource "null_resource" "clean-apim-api" {
provisioner "local-exec" {
command = "az rest -m delete -u "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/${azurerm_resource_group.resource-group.name}/providers/Microsoft.ApiManagement/service/${azurerm_api_management.apim.name}/apis/echo-api?api-version=2019-01-01""
}
depends_on = ["azurerm_api_management.apim"]
}
resource "null_resource" "clean-apim-product-starter" {
provisioner "local-exec" {
command = "az rest -m delete -u "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/${azurerm_resource_group.resource-group.name}/providers/Microsoft.ApiManagement/service/${azurerm_api_management.apim.name}/products/Starter?api-version=2019-01-01""
}
depends_on = ["azurerm_api_management.apim"]
}
resource "null_resource" "clean-apim-product-unlimited" {
provisioner "local-exec" {
command = "az rest -m delete -u "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/${azurerm_resource_group.resource-group.name}/providers/Microsoft.ApiManagement/service/${azurerm_api_management.apim.name}/products/Unlimited?api-version=2019-01-01""
}
depends_on = ["azurerm_api_management.apim"]
}

使用 az v2.12 添加以下内容:

resource "null_resource" "clean_api_echo" {
provisioner "local-exec" {
command     = "az apim api delete --api-id echo-api --subscription ${var.subscription_id} -g ${azurerm_resource_group.rg.name} -n ${local.apim_name} -y"
interpreter = ["PowerShell", "-Command"]
}

depends_on = [
module.api_manager_api
]
}
resource "null_resource" "clean_product_starter" {
provisioner "local-exec" {
command     = "az apim product delete --product-id starter --subscription ${var.subscription_id} -g ${azurerm_resource_group.rg.name} -n ${local.apim_name} --delete-subscriptions true -y"
interpreter = ["PowerShell", "-Command"]
}
depends_on = [
module.api_manager_api
]
}
resource "null_resource" "clean_product_unlimited" {
provisioner "local-exec" {
command     = "az apim product delete --product-id unlimited --subscription ${var.subscription_id} -g ${azurerm_resource_group.rg.name} -n ${local.apim_name} --delete-subscriptions true -y"
interpreter = ["PowerShell", "-Command"]
}
depends_on = [
module.api_manager_api
]
}

注意:根据您的变量名称进行修改。

最新更新