【发布时间】:2022-10-21 05:33:00
【问题描述】:
我想在 RDS 复制任务成功完成后触发 Lambda。我有以下 Terraform 代码,它成功创建了所有资产,但我的 Lambda 没有被触发。
resource "aws_dms_event_subscription" "my_event_subscription" {
enabled = true
event_categories = ["state change"]
name = "my-event-subscription"
sns_topic_arn = aws_sns_topic.my_event_subscription_topic.arn
source_ids = ["my-replication-task"]
source_type = "replication-task"
}
resource "aws_sns_topic" "my_event_subscription_topic" {
name = "my-event-subscription-topic"
}
resource "aws_sns_topic_subscription" "my_event_subscription_topic_subscription" {
topic_arn = aws_sns_topic.my_event_subscription_topic.arn
protocol = "lambda"
endpoint = aws_lambda_function.my_lambda_function.arn
}
resource "aws_sns_topic_policy" "allow_publish" {
arn = aws_sns_topic.my_event_subscription_topic.arn
policy = data.aws_iam_policy_document.allow_dms_and_events_document.json
}
resource "aws_lambda_permission" "allow_sns_invoke" {
statement_id = "AllowExecutionFromSNS"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.my_lambda_function.function_name
principal = "sns.amazonaws.com"
source_arn = aws_sns_topic.my_event_subscription_topic.arn
}
data "aws_iam_policy_document" "allow_dms_and_events_document" {
statement {
actions = ["SNS:Publish"]
principals {
identifiers = [
"dms.amazonaws.com",
"events.amazonaws.com"
]
type = "Service"
}
resources = [aws_sns_topic.my_event_subscription_topic.arn]
}
}
我错过了什么吗?
event_categories = ["state change"] 正确吗? (This 建议 state change 是正确的。
我现在不太担心每次状态更改都会触发 Lambda,而不仅仅是 DMS-EVENT-0079。)
是否可以添加一些内容以从事件订阅中获取 CloudWatch 日志,告诉我出了什么问题?
【问题讨论】:
-
有没有这样的事件会导致 Lambda 被触发?
-
是的,@MarkoE,可以确认复制任务每天都在运行
-
您可以在 AWS 控制台中验证是否允许 SNS 主题触发 Lambda 函数?
标签: aws-lambda terraform terraform-provider-aws amazon-sns aws-dms