微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 terraform

如何解决如何在 terraform

我想在 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}"
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。