jorgebastida / gordon

λ Gordon is a tool to create, wire and deploy AWS Lambdas using CloudFormation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Troposphere error with event rule with multiple lambdas

jakubincloud opened this issue · comments

Building the project with settings.yml

events:
  every_minute:
    schedule_expression: rate(1 minute)
    description: Bug
    state: ENABLED

    targets:
      one:
        lambda: app.helloworld
      two:
        lambda: app.goodbyeworld

results in troposphere error:

Traceback (most recent call last):
  File "/[REDACTED]/.virtualenvs/onebutton-core/bin/gordon", line 11, in <module>
    load_entry_point('gordon==0.2.1', 'console_scripts', 'gordon')()
  File "/[REDACTED]/.virtualenvs/onebutton-core/lib/python2.7/site-packages/gordon/bin.py", line 106, in main
    getattr(obj, options.func)()
  File "/[REDACTED]/.virtualenvs/onebutton-core/lib/python2.7/site-packages/gordon/core.py", line 243, in build
    self._build_resources_template()
  File "/[REDACTED]/.virtualenvs/onebutton-core/lib/python2.7/site-packages/gordon/core.py", line 334, in _build_resources_template
    r.register_resources_template(template)
  File "/[REDACTED]/.virtualenvs/onebutton-core/lib/python2.7/site-packages/gordon/resources/events.py", line 65, in register_resources_template
    rule, 'Arn'
  File "/[REDACTED]/.virtualenvs/onebutton-core/lib/python2.7/site-packages/troposphere/__init__.py", line 452, in add_resource
    return self._update(self.resources, resource)
  File "/[REDACTED]/.virtualenvs/onebutton-core/lib/python2.7/site-packages/troposphere/__init__.py", line 438, in _update
    self.handle_duplicate_key(values.title)
  File "/[REDACTED]/.virtualenvs/onebutton-core/lib/python2.7/site-packages/troposphere/__init__.py", line 428, in handle_duplicate_key
    raise ValueError('duplicate key "%s" detected' % key)
ValueError: duplicate key "EveryMinuteRulePermission" detected

Fix : in gordon/resources/events.py line 55: add lambda_ to utils.valid_cloudformation_name, eg:

 utils.valid_cloudformation_name(
                        self.name,
                        'rule',
                        'permission',
                         lambda_
                    ),