TF项目分为主分支和发展分支。
在develop分支中,可能有使用依赖于AWS环境的ID指定的资源,例如2c289348-cc9d-41ed-a4ae-fb015b0ec9b1-6
是AWS MSK集群ID:
resource "aws_iam_policy" "msk-admin-policy" {
name = "msk-admin-policy"
description = "Policy for MSK"
policy = jsonencode({
Version = "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
<...actions>
],
"Resource": [
"arn:aws:kafka:${data.aws_region.current.id}:${data.aws_caller_identity.current.account_id}:cluster/integrations/2c289348-cc9d-41ed-a4ae-fb015b0ec9b1-6",
]
}
]
})
}
在主分支中,有不同的AWS MSK ID,代表生产AWS环境中AWS MSK集群的ID。
这导致我们单独管理develop
和main
分支,这意味着我们不能从develop到main执行marge请求。相反,我们从develop创建一个特性分支,然后从特性分支创建一个合并请求到develop
。然后我们从main创建特性分支,从特性分支创建一个合并请求到main
正如您所看到的,我们通过${data.aws_region.current.id}:${data.aws_caller_identity.current.account_id}
在region和account id的分支之间应用了某种统一。
有没有一种方法来处理TF中主分支和开发分支之间的这种差异?
1条答案
按热度按时间h79rfbju1#
你根本不应该硬编码这些值,你应该引用Terraform资源,或者查找数据源。如果你必须硬编码这些值,那么我建议在TerraformMap变量中硬编码它,比如:
然后,您可以将环境名称作为另一个变量传递,或者理想情况下使用Terraform Workspaces来管理不同的环境。
然后,您的IAM策略将如下所示(环境名称在var中):
或(使用Terraform工作区):