Esempio n. 1
0
 def _create_scheduled_model(self,
                             config,        # type: Config
                             deployment,    # type: models.DeploymentPackage
                             event_source,  # type: app.ScheduledEventConfig
                             stage_name,    # type: str
                             ):
     # type: (...) -> models.ScheduledEvent
     lambda_function = self._create_lambda_model(
         config=config, deployment=deployment, name=event_source.name,
         handler_name=event_source.handler_string, stage_name=stage_name
     )
     # Resource names must be unique across a chalice app.
     # However, in the original deployer code, the cloudwatch
     # event + lambda function was considered a single resource.
     # Now that they're treated as two separate resources we need
     # a unique name for the event_source that's not the lambda
     # function resource name.  We handle this by just appending
     # '-event' to the name.  Ideally this is handled in app.py
     # but we won't be able to do that until the old deployer
     # is gone.
     resource_name = event_source.name + '-event'
     if isinstance(event_source.schedule_expression,
                   app.ScheduleExpression):
         expression = event_source.schedule_expression.to_string()
     else:
         expression = event_source.schedule_expression
     rule_name = '%s-%s-%s' % (config.app_name, config.chalice_stage,
                               resource_name)
     scheduled_event = models.ScheduledEvent(
         resource_name=resource_name,
         rule_name=rule_name,
         schedule_expression=expression,
         lambda_function=lambda_function,
     )
     return scheduled_event
Esempio n. 2
0
    def test_can_generate_scheduled_event(self):
        function = self.lambda_function()
        event = models.ScheduledEvent(
            resource_name='foo-event',
            rule_name='myrule',
            schedule_expression='rate(5 minutes)',
            lambda_function=function,
        )
        template = self.template_gen.generate([function, event])
        rule = template['resource']['aws_cloudwatch_event_rule'][
            event.resource_name]

        assert rule == {
            'name': event.resource_name,
            'schedule_expression': 'rate(5 minutes)'
        }
Esempio n. 3
0
 def test_can_plan_scheduled_event(self):
     function = create_function_resource('function_name')
     event = models.ScheduledEvent(
         resource_name='bar',
         rule_name='myrulename',
         schedule_expression='rate(5 minutes)',
         lambda_function=function,
     )
     plan = self.determine_plan(event)
     assert len(plan) == 4
     self.assert_apicall_equals(
         plan[0],
         models.APICall(
             method_name='get_or_create_rule_arn',
             params={
                 'rule_name': 'myrulename',
                 'schedule_expression': 'rate(5 minutes)',
             },
             output_var='rule-arn',
         ))
     self.assert_apicall_equals(
         plan[1],
         models.APICall(method_name='connect_rule_to_lambda',
                        params={
                            'rule_name': 'myrulename',
                            'function_arn':
                            Variable('function_name_lambda_arn')
                        }))
     self.assert_apicall_equals(
         plan[2],
         models.APICall(
             method_name='add_permission_for_scheduled_event',
             params={
                 'rule_arn': Variable('rule-arn'),
                 'function_arn': Variable('function_name_lambda_arn'),
             },
         ))
     assert plan[3] == models.RecordResourceValue(
         resource_type='cloudwatch_event',
         resource_name='bar',
         name='rule_name',
         value='myrulename',
     )
Esempio n. 4
0
 def test_can_generate_scheduled_event(self):
     function = self.lambda_function()
     event = models.ScheduledEvent(
         resource_name='foo-event',
         rule_name='myrule',
         schedule_expression='rate(5 minutes)',
         lambda_function=function,
     )
     template = self.template_gen.generate_sam_template([function, event])
     resources = template['Resources']
     assert len(resources) == 1
     cfn_resource = list(resources.values())[0]
     assert cfn_resource['Properties']['Events'] == {
         'FooEvent': {
             'Type': 'Schedule',
             'Properties': {
                 'Schedule': 'rate(5 minutes)'
             },
         },
     }