Обновление зависимостей лямбда-слоя aws - PullRequest
0 голосов
/ 13 декабря 2018

Ситуация такова, что у меня есть множество лямбда-функций aws (с использованием узла js 8.10), которые все делают что-то совершенно другое, и все они развернуты с использованием CloudFormation.

Все они имеют несколько функций, которыеочень сложный.

В настоящий момент, если общий код изменяется, что происходит довольно часто, я копирую общий код между каждым из проектов (включая управление исходным кодом), а затем повторно развертываю каждую из функций.Это всегда было неправильно.

Теперь у нас есть лямбда-слои - ура!или ура?

Отлично, теперь я могу поддерживать код в одном репозитории. Но остальная часть процесса на самом деле не лучше и, возможно, не хуже ...

Если я поставлюслой в шаблоне CloudFormation и экспортируйте ARN для импорта в шаблоны лямбда-функции, тогда экспортируемый ARN предназначен только для версии уровня 1.

Я мог бы сформировать ARN без версии, используя функцию Sub иЗатем добавьте версию функции lamda в шаблоны CloudFormation.Но всякий раз, когда происходит изменение в общем коде, мне все равно нужно обновлять все шаблоны CloudFormation нисходящей лямбда-функции, чтобы добавить последнюю версию.

Я мог бы написать это, но это все еще большая PITA и недействительно сэкономить много усилий.Мне нужно было бы получать последние версии каждого проекта лямбда-функции, обновлять номер версии, фиксировать обратно в репозиторий, PR, объединять, бла-бла-бла.

Нет ли другого способа всегда использовать последнюю версиюслой?

1 Ответ

0 голосов
/ 19 февраля 2019

Использование Serverless для развертывания и выходов CloudFormation может помочь в этой ситуации.

  1. Определите свой слой в своем собственном сервисе.Создайте выходной ресурс (но не создавайте имя экспорта).
resources:
  Outputs:
    MYOUTPUTNAME:
      Value:
        Ref: MYLAYERLambdaLayer # LambdaLayer is a required suffix
Ссылка на вывод в качестве слоя для любой функции, для которой он требуется
functions:
  ...other required function keys in serverless
  layers:
    - ${cf:NAME_OF_STACK.MYOUTPUTNAME}
Каждый раз, когда вы повторно развертываете слой, вы должны принудительно повторно развертывать весь стек функций, которые ссылаются на слой (sls deploy --force).Повторное развертывание только этой функции не приведет к обновлению выходной ссылки.

Примечание: если вы используете выходные имена экспорта, вы столкнетесь с ошибкой повторного развертывания службы слоя, поскольку на нее ссылается текущая версия.Поэтому лучше использовать ссылку на вывод стека, которая не вызывает этой ошибки.

...