我正在尝试基于此示例从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上传触发器)。
在编写模板时是否有解决方法来指定触发器?
答案 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
您可以在此处指定一个EventSource
,它接受以下可能的值:
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权限。