问题描述
我想在 s3 中创建文件(密钥)。通过下面的代码,我可以在 s3 中成功创建文件 -
locals {
rules = [
{
user = "user-1",roles = "test"
}
}
resource "aws_s3_bucket_object" "this" {
for_each = zipmap(local.rules.*.user,local.rules.*)
bucket = "test-09129"
acl = "private"
source = "/dev/null"
key = "${each.value.roles}/${each.key}"
}
s3 中的文件 - test/user-1 创建
但是角色可以是多个,所以我创建了角色列表。
locals {
rules = [
{
user = "user-1",roles = ["test"]
},{
user = "user-2",roles = ["test","dev","prd"]
}]
}
现在我想根据上面的列表创建文件。如何迭代列表(角色)以根据用户和角色创建文件? 欲望输出-
file in s3 -
test/user-1
test/user-2
dev/user-2
prd/user-2
解决方法
您可以将 rules
压平为 helper_rules
(假设我正确理解您想要的结果):
locals {
rules = [
{
user = "user-1",roles = ["test"]
},{
user = "user-2",roles = ["test","dev","prd"]
}]
helper_rules = merge([
for user,rules in zipmap(local.rules.*.user,local.rules.*.roles):
{ for rule in rules:
"${user}-${rule}" => {user = user,rule = rule}
}
]...)
}
这将导致 helper_rules
:
{
"user-1-test" = {
"rule" = "test"
"user" = "user-1"
}
"user-2-dev" = {
"rule" = "dev"
"user" = "user-2"
}
"user-2-prd" = {
"rule" = "prd"
"user" = "user-2"
}
"user-2-test" = {
"rule" = "test"
"user" = "user-2"
}
}
这样,您的对象可能是:
resource "aws_s3_bucket_object" "this" {
for_each = local.helper_rules
bucket = "test-09129"
acl = "private"
source = "/dev/null"
key = "${each.value.role}/${each.value.user}"
}