如何从使用 Terraform 创建的 APIM 中删除演示产品?
How Can I Remove Demo Products From APIM Created With Terraform?
我创建 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 使用的是 created by the underlying SDK。
无法直接使用 Azure CLI,因为它 doesn't yet support API Management。
但是,REST API 确实支持它。
Azure CLI 中有一个模块可以让您call the 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}
会自动用正确的值代替您(假设您使用正确的帐户登录),您不必自己查找该值。
然后可以使用 local-exec with a null-resource.
将这些命令嵌入到 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
]
}
注意:根据你的变量名修改。
我创建 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 使用的是 created by the underlying SDK。
无法直接使用 Azure CLI,因为它 doesn't yet support API Management。
但是,REST API 确实支持它。
Azure CLI 中有一个模块可以让您call the 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}
会自动用正确的值代替您(假设您使用正确的帐户登录),您不必自己查找该值。
然后可以使用 local-exec with a null-resource.
将这些命令嵌入到 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
]
}
注意:根据你的变量名修改。