我已经在cloudformation中定义了我的lambda/roles,并且还希望使用它来添加预定的事件源......是否有任何文档或示例?
使用Aws :: Event :: Rule with a ScheduleExpression
和aAWS::Lambda::Permission
// rule to periodically call the lambda "TagWatcherRule": { "Type": "AWS::Events::Rule", "Properties": { "ScheduleExpression": "rate(10 minutes)", "Targets": [ { "Id": "TagWatcherScheduler", "Arn": { "Fn::GetAtt": [ "TagWatcherFunction", "Arn" ] } } ] } }, // role may call the lambda "InvokeLambdaPermission": { "Type": "AWS::Lambda::Permission", "Properties": { "FunctionName": { "Fn::GetAtt": [ "TagWatcherFunction", "Arn" ] }, "Action": "lambda:InvokeFunction", "Principal": "events.amazonaws.com", "SourceArn": { "Fn::GetAtt": [ "TagWatcherRule", "Arn" ] } } }
遗憾的是,CloudFormation目前不支持为lambda函数配置预定事件源.您需要使用CloudFormation部署lambda,然后手动配置计划的事件.
CloudFormation确实支持AWS::Lambda::EventSourceMapping
资源类型.但是,此资源仅限于配置Kinesis或DynamoDB流,因此这可能对您没有帮助.
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html
**更新 - 截至2016年4月,现在使用CloudWatch Events支持此功能 - https://aws.amazon.com/about-aws/whats-new/2016/04/amazon-cloudwatch-events-now-supported-in -aws-cloudformation模板/
我解决了同样的问题.
"RoleForLambdaStopEC2Instances" : { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "Policies": [ { "PolicyName": "LambdaStopEC2InstancesPolicy", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "ec2:StopInstances" ], "Resource": [ "arn:aws:logs:*:*:*", "arn:aws:ec2:*" ] } ] } } ], "Path": "/" } }, "LambdaStopEC2Instances": { "Type": "AWS::Lambda::Function", "Properties": { "Code": { "S3Bucket": "XXXXXXXXXXXXXXXXX", "S3Key": "XXXXXXXXXXXXXXXXXX" }, "Handler": "stopEC2Instances.handler", "Role": { "Fn::GetAtt" : ["RoleForLambdaStopEC2Instances", "Arn"] }, "Runtime": "nodejs4.3", "Timeout": "5" } }, "StopEC2InstancesRule": { "Type" : "AWS::Events::Rule", "Properties" : { "Name" : "StopEC2Instances", "ScheduleExpression" : "cron(0 13 ? * MON-FRI *)", "State": "ENABLED", "Targets": [{ "Arn": { "Fn::GetAtt": ["LambdaStopEC2Instances", "Arn"] }, "Id": "stopEC2Instances" }] } }, "LambdaInvokePermission": { "Type": "AWS::Lambda::Permission", "Properties": { "FunctionName" : { "Fn::GetAtt" : ["LambdaStopEC2Instances", "Arn"] }, "Action": "lambda:InvokeFunction", "Principal": "events.amazonaws.com", "SourceAccount": { "Ref" : "AWS::AccountId" }, "SourceArn": { "Fn::GetAtt": ["StopEC2InstancesRule","Arn"] } } }