【问题标题】:Is there any way I can add triggers to a lambda function in Terraform?有什么方法可以将触发器添加到 Terraform 中的 lambda 函数?
【发布时间】:2021-07-11 10:52:35
【问题描述】:

我正在使用 terraform,我想知道是否有办法将触发器添加到 lambda 函数(例如:- S3 对象时的触发器)。我知道我们可以添加一个事件源映射,但这不是我想要的。基本上我想知道我是否可以在我的代码中包含下图中显示的触发功能 Image shows lambda console with "add trigger" functionality highlighted

【问题讨论】:

标签: amazon-web-services aws-lambda terraform


【解决方案1】:

我知道我们可以添加事件源映射,但这不是我想要的

SQS、DynamoDB 和 Kinesis 的事件源映射正是您所期待的。您在屏幕截图中显示的只是 3 项服务的事件源映射的 AWS 控制台表示。

【讨论】:

  • 我们可以直接从 s3 添加事件源映射吗?
  • @sravya 你不能这样做。 S3 不支持 ESM。相反,S3 有自己的机制,用于使用aws_s3_bucket_notification 与 S3 链接。顺便说一句,如果我的回答有帮助,我们将不胜感激。
【解决方案2】:

您可以直接在您的 terraform 代码中配置对来自大量资源的事件的订阅,并与 AWS 中的多个通知器集成。这是基于来自 SNS 的订阅事件向 lambda 添加触发器的示例。

data "aws_autoscaling_groups" "groups_servers" {
  depends_on = [
    aws_autoscaling_group.servers_cluster_asg_masters,
    aws_autoscaling_group.servers_cluster_asg_slaves
  ]
  filter {
    name   = "auto-scaling-group"
    values = "servers-masters-nodes"
  }
  filter {
    name   = "auto-scaling-group"
    values = "servers-slave-nodes"
  }
}

resource "aws_sns_topic" "sns_servers" {
  name = "sns_servers"
}

resource "aws_autoscaling_notification" "new_instances_notifications_servers" {
  group_names = data.aws_autoscaling_groups.groups_servers.names
  notifications = [
    "autoscaling:EC2_INSTANCE_LAUNCH"
  ]
  topic_arn = aws_sns_topic.sns_servers.arn
}

resource "aws_sns_topic_subscription" "sns_servers_servers_subscription" {
  depends_on = [
    aws_lambda_function.servers-cluster-orchestator
  ]
  topic_arn = aws_sns_topic.sns_servers.arn
  protocol  = "lambda"
  endpoint  = aws_lambda_function.servers-cluster-orchestator.arn
}

resource "aws_lambda_permission" "sns_permission_servers" {
  depends_on = [
    aws_lambda_function.servers-cluster-orchestator,
  ]
  statement_id  = "AllowExecutionFromSNS"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.servers-cluster-orchestator.function_name
  principal     = "sns.amazonaws.com"
  source_arn    = var.sns_servers_topic
}

resource "aws_lambda_function" "servers-cluster-orchestator" {
  s3_bucket     = "my-bucket"
  s3_key        = "my-lambda.zip"
  function_name = "my-lambda"
  role          = aws_iam_role.iam_for_lambda_servers_cluster.arn
  handler       = "lambda_function.lambda_handler"
  runtime       = "python3.7"
  timeout       = "60"
}

【讨论】:

    猜你喜欢
    • 2021-09-15
    • 2021-10-03
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 2019-01-30
    • 2019-09-25
    相关资源
    最近更新 更多