def create_scheduler(self): variables = self.get_variables() troposphere_events_rule = variables["CloudwatchEventsRule"] aws_lambda_arns = {} # iterate over targets in the event Rule & gather aws_lambda_arns. for target in getattr(troposphere_events_rule, "Targets", []): if target.Arn.startswith("arn:aws:lambda:"): safe_id = cf_safe_name(target.Id) aws_lambda_arns[safe_id] = target.Arn # schedule a Cloudwatch event rule to invoke the Targets. rule = self.template.add_resource(troposphere_events_rule) # allow cloudwatch to invoke on any of the given lambda targets. for event_rule_target_id, aws_lambda_arn in aws_lambda_arns.items(): self.template.add_resource( awslambda.Permission( "PermToInvokeFunctionFor{}".format(event_rule_target_id), Principal="events.amazonaws.com", Action="lambda:InvokeFunction", FunctionName=aws_lambda_arn, SourceArn=rule.GetAtt("Arn") ) )
def test_cf_safe_name(self): tests = ( ("abc-def", "AbcDef"), ("GhI", "GhI"), ("jKlm.noP", "JKlmNoP") ) for t in tests: self.assertEqual(cf_safe_name(t[0]), t[1])
def test_cf_safe_name(self): tests = ( ('abc-def', 'AbcDef'), ('GhI', 'GhI'), ('jKlm.noP', 'JKlmNoP') ) for t in tests: self.assertEqual(cf_safe_name(t[0]), t[1])