J'ai déjà mon lambda/rôles définis dans cloudformation et j'aimerais également l'utiliser pour ajouter des sources d'événements planifiées ... y a-t-il des documents ou des exemples?
Utilisez Aws :: Event :: Rule avec un ScheduleExpression
et un AWS::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"
]
}
}
}
Malheureusement, la configuration des sources d'événements planifiés pour les fonctions lambda n'est actuellement pas prise en charge par CloudFormation. Vous devrez déployer votre lambda à l'aide de CloudFormation, puis configurer manuellement vos événements planifiés.
CloudFormation prend en charge un AWS::Lambda::EventSourceMapping
type de ressource. Cependant, cette ressource est limitée dans la configuration des flux Kinesis ou DynamoDB, donc cela ne vous sera probablement pas utile.
** Mise à jour - depuis avril 2016, elle est désormais prise en charge à l'aide de CloudWatch Events - https://aws.Amazon.com/about-aws/whats-new/2016/04/Amazon-cloudwatch-events-now -supported-in-aws-cloudformation-templates /
J'ai résolu le même problème.
"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"] }
}
}
Depuis cette semaine (18 avril 2016), il est désormais possible d'ajouter une règle d'événement CloudWatch planifiée qui déclenchera votre fonction Lambda.
AWS :: Event :: Rule possède un champ ScheduleExpression
pour la planification de style cron et un tableau Targets
qui peut accepter un ARN de fonction Lambda.
AWS prend en charge l'exécution périodique via les sources .
EventSource: "aws.config"
MaximumExecutionFrequency: Twelve_Hours
MessageType: "ScheduledNotification"