如何在 terraform 中访问 for_each 之后的特定项目

How to access to specific item after for_each in terraform

我有一个变量列表(lambda 函数的名称)。我想在 aws lambda 上生成 lambda 函数。它们中的大多数具有相同的配置,但其中 1 个具有不同的内存大小和环境变量。在我完成块资源(使用 for_each 调用该块)后,我如何调用该引用来更改配置。

这是模块 lambda

中的文件 main.tf
resource "aws_lambda_function" "lambda_function" {
  function_name = <existed var>
  s3_bucket = <existed var>
  s3_key    = <existed var>
  runtime = <existed var>
  handler = <existed var>
  memory_size = 512
  timeout     = 30
  role = <existed var>
  environment {  
    variables = {
      ENV             = "${var.env}"    
      POOL_ID         = "${var.pooid}"
    }

  }

这是 main.tf 根级别的文件

module "aws_lambda_nodejs" {
  source = "../../Modules/Lambda"
  for_each               = var.lambda_nodejs_api_path_part
  env                    = var.env  
  function_name          = each.key
  s3_bucket              = module.aws_s3_bucket.lambda_bucket_id
  s3_key                 = "${each.key}.zip"
  runtime                = var.nodejs_runtime
  handler                = var.nodejs_handler
  role                   = module.bootstrap.lambda_role_arn
  aws_api_gateway_rest_api_id   = module.aws_api_gateway.aws_api_gateway_rest_api_id
  aws_api_gateway_method        = "*/"
  aws_api_gateway_resource_path = each.value
  aws_region                    = var.aws_region
  account_id                    = var.account_id
  pooid                         = var.pooid  
}

我的目标是: var.lambda_nodejs_api_path_part = [“函数A”、“函数B”、“函数C”、..等]

函数 A

{
 memory_size = 1536, 
 environment = {
  ENV=dev, 
  poolId=eyjudb123, 
  configpath="/env/cfg"
 }
} 

其他功能

{
 memory_size = 512, 
 environment = {
  ENV=dev, 
  poolId=eyjudb123,
 }
}

After I finish the block resource (with for_each calling that block) how can I call that reference to change configuration.

这不是 Terraform 的工作方式。在 Terraform 中,您可以为每个资源定义所需的状态,并且只定义一次。然后,Terraform 会为您管理获取处于该状态的资源。没有像 “首先对所有资源执行此操作,然后对其他资源执行此操作”这样的迭代方法

为了实现目标,您可能想做的是

  • 将内存大小作为附加变量添加到您的 lambda 模块。
  • 针对不同的实例将不同的值传递给该变量。

根模块main.tf

module "aws_lambda_nodejs" {
  source = "../../Modules/Lambda"
  for_each               = var.lambda_nodejs_api_path_part
  env                    = var.env  
  function_name          = each.key
  memory_size            = each.key == "function A" ? 1536 : 512
  ...
}

Modules/Lambda/main.tf

resource "aws_lambda_function" "pabx_function" {
  ...
  memory_size = var.memory_size
  ...
} 

Modules/Lambda/variables.tf

variable "memory_size" {
  type = number
}