当前位置: 首页 > 知识库问答 >
问题:

从Terraform中的模块集合中读取

司空通
2023-03-14

我正在使用lambda_函数模块为每个创建多个lambda。

我得到这个错误在不同的资源时,试图组装一个策略JSON:

╷
│ Error: Invalid function argument
│ 
│   on main.tf line 83, in resource "aws_secretsmanager_secret_policy" "staging_tables_secret":
│   83:         "AWS": "${join(",", module.lambda_function[*].lambda_role_arn)}"
│     ├────────────────
│     │ module.lambda_function is a map of object, known only after apply
│ 
│ Invalid value for "lists" parameter: element 0: string required.
╵

Process finished with exit code 1

我做错了什么,我应该如何列出由lambda模块生成的角色ARNs?

顺便说一下,下面是模块的外观,以及迭代的本地:

module "lambda_function" {
  for_each = { for index, value in local.application_files : index => value }

  source = "terraform-aws-modules/lambda/aws"

  source_path = "${path.module}/functions/${each.value.directory}"

  function_name = each.value.directory

  runtime = "python3.9"
  handler = "${each.value.handler_file}.lambda_handler"

  environment_variables = {
    secrets_manager_arn = aws_secretsmanager_secret.staging_tables_secret.arn
  }
}

locals {
  application_files = [
    {
      directory    = "hello1"
      handler_file = "hello1"
    },
    {
      directory    = "hello2"
      handler_file = "hello2"
    }
  ]
}

编辑:以下是指向我正在使用的外部模块的链接:https://registry.terraform.io/modules/terraform-aws-modules/lambda/aws/latest

共有1个答案

曹渝
2023-03-14

通过阅读文档中关于splat表达式不适用于地图的这一部分,我找到了答案。

基本上,解决方案是使用[对于module.lambda_函数中的v:v.lambda_role_arn]作为子表达式,而不是模块。lambda_函数[*]。lambda\u role\u arn

 类似资料:
  • 我一直在从firestore的子集合中获取数据。我在下面附上我的代码脚本以供参考。 现在我从特定的子集合中获取数据。使用此查询行 其工作正常,并返回数据。 但我想从组文档中获取所有数据。 下面的链接附上了我的数据库图片。 Firestore数据库映像

  • 众所周知,在Ruby中,类方法会被继承: 然而,令我惊讶的是,它不适用于混合物: 我知道#extend方法可以做到这一点: 但我正在编写一个包含实例方法和类方法的mixin(或者更确切地说,我想编写): 现在我想做的是: 我想要A,B从公共模块继承实例和类方法。当然,这是行不通的。那么,难道没有一种秘密的方法可以让这个继承在单个模块上工作吗? 对我来说,把它分成两个不同的模块似乎很不优雅,一个是包

  • 在CQRS ES和DDD中,聚合中的小读模型从其他聚合或有界上下文中获取数据是件好事吗? 例如,在订单验证(订单聚合)中,有一个业务规则,该规则仅在未标记客户时验证订单。标志信息通过同步域事件放入读取模型(特定于聚合)。 你怎么看?

  • 我正在使用Intellij Idea-2021.3.2和Java8。在Intellij中,我无法读取同一模块中另一个包中的文件。该文件位于main而不是资源文件夹下。但在Eclipse中,我可以读取。 例如。下面的代码在 eclipse 和 intellij 中打印不同的输出。 在Intellij中,代码打印“资源为空”,但在eclipse中,代码打印“资源已找到!!”。 在intellij中是否

  • 这是 module-info.java文件 不幸的是,当我构建这个项目时,弹出了几个错误,您可以在这里看到:errors null

  • 问题内容: 这里是问题:我有一个元组列表(也可以根据需要设置)。例如: 我想找到一个清单 因为一旦将所有集合放在一起,交集就不会为空。 举个例子 结果应该是 希望问题解决。那么,如果有的话,在python中最优雅的方法是什么? 干杯 问题答案: 这些是图形的 连接组件 ,可以使用诸如的图形库找到。对于第二个示例: