如何使用Terraform将值列表传递到Lambda环境变量中



我有一个Python脚本,可以向多个收件人发送电子邮件。我想用Terraform设置我的接收者,并将它们作为环境变量传递到我的Lambda函数中。我已经将SES设置为单独的模块。

Lambda函数:

def lambda_handler(event, context):
email_to = os.environ["EMAIL"]
# script that sends an email is here

Lambda模块main.tf:

resource "aws_lambda_function" "test_lambda" {
filename      = var.filename
function_name = "test_name"
role          = "arn:aws:iam::123:role/lambda_role"
handler       = var.handler
source_code_hash = var.source_code_hash
runtime = var.runtime
timeout = var.timeout
kms_key_arn = var.kms_key_arn
memory_size = var.memory
dynamic "environment" {
for_each = var.env_variables != null ? var.env_variables[*] : []
content {
variables = environment.value
}
}
}

SES模块main.tf:

resource "aws_ses_email_identity" "email" {
email = var.email
}

SES模块输出.tf:

output "email" {
description = "Emails."
value       = aws_ses_email_identity.email.email
}

主.tf

module "lambda_zip" {
source                = "../modules/lambda_zip"
handler               = "lambda_function.lambda_handler"
runtime               = "python3.8"
filename              = "setup.zip"
env_variables = {
EMAIL = module.ses[*].email
}
}
module "ses" {
source      = "../modules/ses"
for_each    = toset(["email1@example.com", "email2@example.com"])
email       = each.value
}
output "email" {  
value = module.ses.email 
}

在当前的设置中,我得到了这个错误:

│ Error: Unsupported attribute
│
│   on main.tf line 24, in module "lambda_zip":
│   24:    EMAIL = jsonencode(module.ses[*].email)
│
│ This object does not have an attribute named "email".
╵
╷
│ Error: Unsupported attribute
│
│   on main.tf line 40, in output "email":
│   40:   value = module.ses.email
│     ├────────────────
│     │ module.ses is object with 2 attributes
│
│ This object does not have an attribute named "email".

如何向SES注册新电子邮件,并将其传递到Python函数中?

如果你想一次传递所有电子邮件,它应该是:

env_variables = {
EMAIL = jsonencode(values(module.ses)[*].email)
}

在您的函数中,您必须将EMAIL处理为json数据结构。

相关内容

  • 没有找到相关文章

最新更新