Обновление существующей лямбда-функции с помощью непрерывной интеграции / развертывания AWS

У меня есть несколько функций AWS Lambda, созданных с помощью AWS Console, и каждая функция имеет несколько зависимых API. Теперь я хочу интегрировать то же самое с AWS CI / CD, используя CodeBuild, CodePipeline и CloudFormation . Но проблема в том, что я не могу обновить существующие лямбда-функции, которые не созданы с помощью стека CloudFormation
Сообщение об ошибке ABC_Lambda уже существует
< br /> Обратите внимание, что если я создаю новую лямбду, используя поток CI / CD, а затем пытаюсь обновить ее, все работает нормально.

Итак, мои вопросы

  1. Как интегрировать существующие функции Lambda с рабочим процессом AWS CI / CD, не удаляя и не создавая их заново?

  2. Есть ли способ или параметр конфигурации SAM_template, который заставляет CloudFormation обновлять существующую лямбду (созданную с помощью консоли AWS / инструмента командной строки AWS).




Ответы (4)


Как отмечает @omuthu, если вы не создали лямбда-выражения с помощью Cloudformation, вы не можете использовать Cloudformation для их обновления.

Что вы можете сделать, так это использовать на этапе CodeBuild _ 1_ и update-function-configuration API для выполнения необходимых операций. Однако это не позволяет вам интегрироваться с SAM из-за ограничений, упомянутых выше.

person Milan Cermak    schedule 18.02.2019

AWS CloudFormation может обновлять только ресурсы, созданные одним и тем же стеком.

Единственная возможность, о которой я могу думать, - это иметь пользовательский ресурс CloudFormation.

Лямбда настраиваемых ресурсов должна заботиться об обработке любых ресурсов, которые не созданы стеком.

Подробнее об этом можно узнать здесь (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources-lambda.html)

Мотыга это помогает !!!

person omuthu    schedule 18.02.2019
comment
Да, я знаю, что CF может обновлять только ресурсы, созданные одним и тем же стеком. И метод настраиваемого ресурса возможен только с использованием CloudFormation для создания / обновления / удаления настраиваемого ресурса, но как мне реализовать его с помощью шаблона SAM? Я не нашел никакой статьи по этому поводу, хотя я читал AWS :: Serverless :: CustomResource, написанный где-то в документации aws serverless, но до сих пор не знаю, как его использовать. - person Akay Nirala; 18.02.2019

Я бы рассматривал Lambda-функции, которые вы создали в консоли, как прототипы и постепенно создавал бы стек CloudFormation для замены прототипа. Уловка, позволяющая избежать сообщения об ошибке (ABC_Lambda уже существует), заключается в том, чтобы указать только логическое имя в CloudFormation и позволить ему назначить физическое имя. Если вы вызываете функции Lambda по имени или по конечной точке шлюза API, вам нужно будет обновить вызывающий объект, когда вы будете готовы перейти к новому стеку.

person Aaron    schedule 19.02.2019

Если вам действительно нужно сохранить старые лямбда-функции по унаследованным причинам, вы можете создать свои новые функции в Cloudformation и вручную обновить старую функцию до «прокси» и выполнить новый лямбда-код.

Однако вы понесете дополнительные расходы на вторую лямбда-форму и, возможно, превысите лимит одновременных лямбда-запросов.

Со временем вы можете обновить свою старую конфигурацию / код, чтобы вызывать только новую функцию, и в конечном итоге полностью удалить старую.

person Mariusz    schedule 20.02.2019