基于多个s3 bucket事件通知触发的多个lambda



我是地形世界的新手,一直在尝试从s3 bucket上配置的不同事件中触发多个Lambda。每次我尝试创建它时,它基本上都会覆盖上一个事件,并根据地形计划创建最后一个事件。不确定我在这里做错了什么。我看到了一个git问题,我可以找到明确的解决方案。

非常感谢您的帮助!

附件是我编写的示例代码,它可以在环境级别进行配置。

https://github.com/hashicorp/terraform/issues/6934

resource "aws_lambda_function" "lambda-function" {
s3_bucket     = "${var.project}-${var.env}-${var.artifacts-postfix}"
s3_key        = "lambda/${var.project}-${var.env}-${var.lambda-name}/function.zip"
function_name = "${var.project}-${var.env}-${var.lambda-name}"
role          = var.lambda-role
handler       = "handler.lambda_handler"
timeout       = "60"
runtime = "python3.7"
environment {
variables = var.env-variables
}
tags = {
Name    = "${var.project}-${var.env}-${var.lambda-name}"
Project = var.project
Env     = var.env
}
}

resource "aws_lambda_permission" "s3-trigger" {
count         = var.activate-trigger ? 1 : 0 
statement_id  = "${var.project}-${var.env}-${var.lambda-name}-statement-id"
action        = "lambda:InvokeFunction"
function_name = "${var.project}-${var.env}-${var.lambda-name}"
principal     = "s3.amazonaws.com"
source_arn    = "arn:aws:s3:::${var.bucket-name}"
depends_on    = [aws_lambda_function.lambda-function]
}

resource "aws_s3_bucket_notification" "bucket_notification" {
count  = var.activate-trigger ? 1 : 0 
bucket = var.bucket-name
lambda_function {
lambda_function_arn = aws_lambda_function.lambda-function.arn
events              = ["s3:ObjectCreated:*"]
filter_prefix       = var.s3-key-prefix
filter_suffix       = var.s3-key-suffix
id                  = "${var.project}-${var.env}-${var.lambda-name}-event-id"
}
depends_on = [aws_lambda_permission.s3-trigger]
}

一年后,我遇到了同样的困难。ID不是将创建多个通知的唯一标识符,而是一个可选值。AWS分配真正的唯一标识符。

在我的场景中,我通过SES收到了电子邮件,并将其存储在S3中,所以当我使用SES操作将电子邮件存储在S3时,我结束了通过SNS发布。让lambda订阅了SNS,并在收到消息后完成工作。

从aws_s3_bucket_notification切换到aws_sns_topic_subscription

最新更新