如何为使用CloudFormation模板创建的AWS Lambda函数添加触发器?

时间:2017-12-05 15:08:55

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

我正在尝试基于此示例从CloudFormation模板创建lambda函数:

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-lambda.html

从这个链接可以看出:

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html

无法为lambda函数添加触发器(如S3上传触发器)。

在编写模板时是否有解决方法来指定触发器?

5 个答案:

答案 0 :(得分:1)

Lambda 函数可由多种 AWS 资源触发,例如 S3、SNS、SQS、API 等。请在 AWS docs 处查看完整列表

我建议您使用 Altostra Designer,它可以让您快速创建和配置 Lambda 函数,还可以选择触发它的内容。

答案 1 :(得分:0)

您需要在S3存储桶定义中添加NotificationConfiguration。但是,这将导致循环依赖,其中S3存储桶引用Lambda函数,Lambda函数引用S3存储桶。

要避免此循环依赖关系,请创建所有资源(包括S3存储桶和Lambda函数),而不指定通知配置。然后,在创建堆栈后,使用notification configuration更新模板,然后更新堆栈。

答案 2 :(得分:0)

您可以使用cloudwatch规则触发lambda函数:

    AWSTemplateFormatVersion: '2010-09-09'
    Resources:
      MyCloudWatchRule:
        Type: "AWS::Events::Rule"
        Properties:
          Description: "Rule to trigger lambda"
          Name: "MyCloudWatchRule"
          EventPattern: <Provide Valid JSON Event pattern>
          State: "ENABLED"
          Targets:
            - Arn: "arn:aws:lambda:us-west-2:12345678:function:MyLambdaFunction"
              Id: "1234567-acvd-awse-kllpk-123456789"

参考:

答案 3 :(得分:0)

已经有一段时间了,所以我想你已经解决了这个问题,但是我会花2美分帮助别人。

对于此类事情,最好使用SAM(无服务器应用程序模型)。因此,请使用AWS::Serverless::Function代替AWS::Lambda::Function

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html

您可以在此处指定一个EventSource,它接受​​以下可能的值:

  • S3
  • SNS
  • 运动学
  • DynamoDB
  • SQS
  • Api
  • 时间表
  • CloudWatchEvent
  • CloudWatchLogs
  • IoTRule
  • AlexaSkill
  • 认知
  • HttpApi

SAM完成其余工作。遵循本指南的其余详细信息: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-deploying.html

答案 4 :(得分:0)

如今,此问题已由亚马逊解决: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html#aws-resource-events-rule--examples

只需像示例中那样创建Lambda权限。