如何在 terraform 中创建 aws lambda 触发器?

Gav*_*Yap 13 aws-lambda terraform

任何人都可以参考或向我展示如何使用 Terraform 创建 AWS Lambda 触发器的示例吗?

在AWS控制台中,单击函数名称并选择配置选项卡后,您可以创建触发器,例如SNS触发器

Asr*_*lah 15

对于 sns,您需要创建 sns 订阅

\n
resource "aws_sns_topic_subscription" "user_updates_lampda_target" {\n  topic_arn = \xe2\x80\x9csns topic arn\xe2\x80\x9d\n  protocol  = "lambda"\n  endpoint  = \xe2\x80\x9clambda arn here\xe2\x80\x9d\n}\n
Run Code Online (Sandbox Code Playgroud)\n

要允许 Lambda 函数从 Kinesis、DynamoDB 和 SQS 获取事件,您可以使用事件源映射

\n
resource "aws_lambda_event_source_mapping" "example" {\n  event_source_arn  = aws_dynamodb_table.example.stream_arn\n  function_name     = aws_lambda_function.example.arn\n  starting_position = "LATEST"\n}\n
Run Code Online (Sandbox Code Playgroud)\n


ako*_*sky 14

对于 SNS 触发器,还需要为 lambda 添加基于资源的策略,以允许 SNS 订阅执行它。

从 AWS 控制台创建触发器时,这是自动完成的。使用 Terraform 时,需要添加 aws_lambda_permission:

resource "aws_sns_topic_subscription" "my_sns_subscription" {
  topic_arn = aws_sns_topic.my_sns_topic.arn
  protocol  = "lambda"
  endpoint  = aws_lambda_function.my_lambda_function.arn
}

resource "aws_lambda_permission" "with_sns" {
  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_sns_topic.arn
}
Run Code Online (Sandbox Code Playgroud)