Источник запланированных событий AWS Lambda через cloudformation
У меня уже есть мои лямбда / роли, определенные в cloudformation, и я хотел бы также использовать его для добавления запланированных источников событий ... есть ли какие-нибудь документы или примеры вокруг ?
5 ответов:
Используйте Aws:: Event:: Rule С 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, а затем вручную настроить запланированные события.
CloudFormation поддерживает тип ресурса
AWS::Lambda::EventSourceMapping
. Однако этот ресурс ограничен настройкой потоков Kinesis или DynamoDB, поэтому это, скорее всего, не поможет ты.
**Обновление - с апреля 2016 года это теперь поддерживается с помощью событий CloudWatch - https://aws.amazon.com/about-aws/whats-new/2016/04/amazon-cloudwatch-events-now-supported-in-aws-cloudformation-templates/
Я решил ту же задачу.
"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"] } } }
На этой неделе (18 апреля 2016 г.) Теперь можно добавить правило запланированных событий CloudWatch, которое будет запускать вашу функцию Lambda.
AWS::Event::Rule имеет поле
ScheduleExpression
для расписания в стиле cron и массивTargets
, который может принимать лямбда-функцию ARN.
AWS поддерживает периодический прогон через sourcedetails .
EventSource: "aws.config" MaximumExecutionFrequency: Twelve_Hours MessageType: "ScheduledNotification"