如何在 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
}
我有一个变量列表(lambda 函数的名称)。我想在 aws lambda 上生成 lambda 函数。它们中的大多数具有相同的配置,但其中 1 个具有不同的内存大小和环境变量。在我完成块资源(使用 for_each 调用该块)后,我如何调用该引用来更改配置。
这是模块 lambda
中的文件 main.tfresource "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
}