我正在尝试在 Terraform 模块中动态创建对象列表,因此我不需要对不必要的重复值进行硬编码。我在 Terraform 注册表上找到了一个模块,它是我正在做的事情的基础。该模块位于https://github.com/cloudposse/terraform-aws-sso。在模块“sso_account_assignments”的 Examples/complete/main.tf 中,它们为不同的 AWS 账户复制了 AdministratorAccess 权限集。我的问题是我有近 30 个帐户,我想在其中分配相同的权限集,但我不想在代码中重复条目,只是帐号不同。我对 Python 有丰富的经验,我用 Python 编写它的方式如下所示:
如果我用 Python 编写
account_list = ['11111111111', '22222222222', '33333333333']
account_assignments = []
for acct in account_list:
obj = {
"account": acct,
"permission_set_arn": "Some value......",
"permission_set_name": "AdministratorAccess",
"principal_type": "GROUP",
"principal_name": "Administrators"
}
account_assignments.append(obj)
print(account_assignments)
Run Code Online (Sandbox Code Playgroud)
输出
[
{
"account":"11111111111",
"permission_set_arn":"Some value......",
"permission_set_name":"AdministratorAccess",
"principal_type":"GROUP",
"principal_name":"Administrators"
},
{
"account":"22222222222",
"permission_set_arn":"Some value......",
"permission_set_name":"AdministratorAccess",
"principal_type":"GROUP",
"principal_name":"Administrators"
},
{
"account":"33333333333",
"permission_set_arn":"Some value......",
"permission_set_name":"AdministratorAccess",
"principal_type":"GROUP",
"principal_name":"Administrators"
}
]
Run Code Online (Sandbox Code Playgroud)
基本上,我无法弄清楚如何在 Terraform 中动态构建对象列表。我确信可以使用 for_each 或 for 循环来解决它,但无法弄清楚。希望这是有道理的。
尝试编写代码,但它不起作用并且出错。我查看了 HashiCorp 的文档,但没有运气。
您可以通过一个简单的for循环来完成此操作:
variable "account_list" {
default = ["11111111111", "22222222222", "33333333333"]
}
locals {
account_assignments = [for account_id in var.account_list : {
"account" : account_id,
"permission_set_arn" : "Some value......",
"permission_set_name" : "AdministratorAccess",
"principal_type" : "GROUP",
"principal_name" : "Administrators"
}]
}
output "account_assignments" {
value = local.account_assignments
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3799 次 |
| 最近记录: |