首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在地形for_each后访问特定项

如何在地形for_each后访问特定项
EN

Stack Overflow用户
提问于 2022-04-22 02:38:20
回答 1查看 400关注 0票数 1

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

这是模块lambda中的文件main.tf。

代码语言:javascript
运行
复制
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文件

代码语言:javascript
运行
复制
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 = "functionA","functionB","functionC",..etc

职能A

代码语言:javascript
运行
复制
{
 memory_size = 1536, 
 environment = {
  ENV=dev, 
  poolId=eyjudb123, 
  configpath="/env/cfg"
 }
} 

其他功能

代码语言:javascript
运行
复制
{
 memory_size = 512, 
 environment = {
  ENV=dev, 
  poolId=eyjudb123,
 }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-22 06:56:55

在完成块资源( for_each调用该块)之后,如何调用该引用来更改配置。

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

为了达到你的目标,你可能要做的是

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

根模块main.tf

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
resource "aws_lambda_function" "pabx_function" {
  ...
  memory_size = var.memory_size
  ...
} 

Modules/Lambda/variables.tf

代码语言:javascript
运行
复制
variable "memory_size" {
  type = number
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71962880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档