【问题标题】:Terraform: Map Set of Complex Objects to List of a specific propertyTerraform:将一组复杂对象映射到特定属性的列表
【发布时间】:2021-05-05 18:25:57
【问题描述】:

我有一组复杂的复杂对象,例如通过数据接收的 DynamoDB 表

data "aws_dynamodb_table" "table" {
  for_each = toset([
    "table-1",
    "table-2",
    "table-3",
  ])
  name     = each.value
}

我想在不同的地方使用一些表格属性,例如创建事件源映射到 lambda 函数,这很容易:

resource "aws_lambda_event_source_mapping" "mapping" {
  for_each          = data.aws_dynamodb_table.table
  batch_size        = 100
  event_source_arn  = each.value.stream_arn
  function_name     = // some function ARN
  starting_position = "LATEST"
}

现在我遇到了困难:它如何获取一些特定字段的列表,例如 ARN 表,以便我可以直接在 IAM 资源策略中使用它? p>

statement {
  actions = [
    "dynamodb:PutItem",
    "dynamodb:UpdateItem",
    "dynamodb:Query",
    "dynamodb:Scan"
  ]
  # that's not how it works
  resources = tolist(data.aws_dynamodb_table.table.*.arn)
  effect = "Allow"
}

我确信 terraform 文档给了我一个答案,但我找不到它。

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

    由于使用for_each,您的data.aws_dynamodb_table.table地图,因此您必须使用values 来获取arn 的所有值:

     resources = values(data.aws_dynamodb_table.table)[*].arn
    

    【讨论】:

    • 非常感谢 :) 成功了
    • @tpschmidt 没问题。很高兴它解决了:-)
    猜你喜欢
    • 2019-03-30
    • 1970-01-01
    • 2012-10-16
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多