我正在通过 git-lab Ci/Cd 使用 Terra-form 部署一些天蓝色的策略分配,当我应用这些策略时,我们的状态文件是 git-lab 管理的,我收到错误 1 资源已存在。
已经存在 - 要通过 Terraform 进行管理,需要将该资源导入到状态中。请参阅“azurerm_subscription_policy_assignment”的资源文档了解更多信息。
我尝试使用 Terraform 进行 Azure 策略分配,并且能够成功配置要求。
您在 Terraform 中遇到的错误消息表明您尝试创建的 Azure 策略分配已存在于 Azure 环境中,但它不存在于您的 Terraform 状态文件中。 Terraform 需要在状态文件中记录所有托管资源才能正确运行。
导入现有策略分配:您需要将现有策略分配导入到您的 Terraform 状态中。您可以使用
terraform import
命令执行此操作,该命令需要 Azure 中现有策略分配的 ID。导入命令将如下所示(将 <POLICY_ASSIGNMENT_ID>
替换为实际 ID):
terraform import azurerm_subscription_policy_assignment.gitlab[<INDEX>] /subscriptions/<SUBSCRIPTION_ID>/providers/Microsoft.Authorization/policyAssignments/<POLICY_ASSIGNMENT_NAME>
<INDEX>
将是定义此特定资源的 for_each
循环的索引。
我的演示配置尝试使用本地预先存在的订阅策略分配信息来检查事件
我的地形配置:
provider "azurerm" {
features {}
}
data "azurerm_subscription" "current" {}
resource "azurerm_policy_definition" "example" {
name = "only-deploy-in-westeurope"
policy_type = "Custom"
mode = "All"
display_name = "Allowed resource types"
policy_rule = <<POLICY_RULE
{
"if": {
"not": {
"field": "location",
"equals": "westeurope"
}
},
"then": {
"effect": "Deny"
}
}
POLICY_RULE
}
resource "azurerm_subscription_policy_assignment" "example" {
name = "testpolicyvk"
policy_definition_id = azurerm_policy_definition.example.id
subscription_id = data.azurerm_subscription.current.id
}
输出:
现在我运行命令将基础设施导入到我的远程状态文件中
terraform import azurerm_policy_definition.example /subscriptions/{subscription-id}/providers/Microsoft.Authorization/policyDefinitions/{policy-definition-name}
现在我运行命令
然后稍后继续使用 terraform 命令。