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

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

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

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

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

Ответы [ 4 ]

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

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

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

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

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

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

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

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

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

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

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

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

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

Узнайте больше об этом здесь (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources-lambda.html)

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

...