AWS Lambda Alias: основное руководство

AWS Lambda Alias: основное руководство

12 мая 2022 г.

Содержание


  • Вступление

  • Существующая версия

  • Неизменяемые версии

  • Понимание $ LATEST

  • Понимание лямбда ARN

  • Плюсы и минусы

  • Статическое управление версиями сертифицировано ARN

  • Динамическое управление версиями $LATEST

  • В чем отличие AWS Lambda Alias?

  • Отображение вычислительных решений AWS

  • Пример псевдонима AWS Lambda

  • AWS Lambda Псевдоним IAM Gotcha

  • Расширенные развертывания

  • Переключение трафика

  • Развертывание кода AWS

  • Вывод

Вступление


AWS Lambda Alias ​​— это функция, упрощающая управление версиями лямбда-функций.


Он работает, создавая «контейнер», который указывает на опубликованную версию вашей лямбда-функции.


В этом есть несколько преимуществ:


  • Вы можете иметь более безопасные развертывания в своем жизненном цикле разработки программного обеспечения (SDLC)

  • У вас могут быть версии динамических ссылок лямбда-функции

В этом руководстве мы поговорим о существующих стратегиях управления версиями, используемых AWS Lambda, а затем рассмотрим, почему псевдоним AWS Lambda является лучшим выбором.


Давайте погрузимся прямо в.


Существующая версия


Неизменяемые версии


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


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


Что такое $LATEST


В дополнение к неизменности версий, AWS Lambda автоматически продвигает последнюю версию к псевдониму по умолчанию «$ LATEST».


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


Понимание Lambda ARN


В AWS каждый ресурс можно идентифицировать с помощью уникального идентификатора ресурса (ARN).


С AWS Lambda все то же самое, но есть небольшие отличия.


AWS Lambda разделяет идентификатор ресурса AWS (ARN) на два типа:


  • Квалифицированный ARN - версия

  • Unqualified ARN (по умолчанию) — не включает версию (указывает на псевдоним $LATEST)

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


Когда вы используете "квалифицированный ARN", вы ссылаетесь на конкретную версию лямбда-функции.


В то время как "unqualified ARN" является ссылкой на последнюю версию лямбды (это делается через псевдоним $LATEST).


Разница весьма незначительна, но ее важно различать, потому что вы можете ссылаться на ARN лямбда-выражения AWS, а затем изменять его, когда кто-то другой вносит новое изменение кода.


Каждый из них имеет свои плюсы и минусы, которые мы обсудим в следующем разделе.


Пример (квалифицированный ARN):


arn:aws:лямбда:aws-region:acct-id:function:myFunction:42


Пример (неквалифицированный ARN):


arn:aws:лямбда:aws-region:acct-id:function:myFunction


⚠️ Unqualified Lambda ARN всегда будет указывать на последнюю опубликованную версию через псевдоним $LATEST.


Плюсы и минусы


Статическое управление версиями (квалифицированный ARN)


AWS со статическим управлением версиями (квалифицированный ARN)


Самый большой плюс статического управления версиями также является его самым большим минусом.


При статическом управлении версиями у вас больше контроля над тем, на какую версию лямбда-функции AWS вы будете указывать.


Это обеспечивает более безопасное развертывание, поскольку вы сами решаете, какие версии будут продвигаться в вашей инфраструктуре.


Однако это также блокирует вас и требует, чтобы вы делали последующие обновления для любых ресурсов, ссылающихся на него (например, шлюз API, интеграция источников событий).


Плюсы:


  • Безопасное развертывание

Минусы:


  • Для ресурсов требуются последующие обновления

Динамическое управление версиями — $LATEST (неполный ARN)


AWS с динамическим управлением версиями (неквалифицированный ARN)


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


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


Плюсы:


  • Последующие обновления для ресурсов не требуются

Минусы:


  • Рискованные развертывания (всегда используются последние версии)

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


Итак, есть ли лучший выбор?


Да, конечно! Вот где появляется псевдоним AWS Lambda.


В чем отличие AWS Lambda Alias?


Псевдоним AWS Lambda с именем «dev»


Псевдоним Lambda — это настраиваемый контейнер с именем, который указывает на определенную версию вашей функции Lambda.


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


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


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


Таким образом, с этой настройкой нет необходимости обновлять какой-либо другой ресурс, ссылающийся на ARN!


Плюсы:


  • Для других ресурсов последующие обновления не требуются

  • Безопасное развертывание (вы контролируете ссылку)

С псевдонимом Lambda вы получаете лучшее из обоих миров!


Пример псевдонима AWS Lambda


Вот пример использования лямбда-псевдонима.


В вашем рабочем процессе вы можете иметь отдельные этапы (или псевдонимы), которые могут быть:


  • dev - для целей разработки и тестирования

  • prod - для живого окружения

Пример псевдонима AWS Lambda


Затем, когда вы запускаете свой CI/CD, вы можете соответствующим образом обновить каждый из псевдонимов.


Рабочие процессы будут зависеть от инструмента CI.


Используя интерфейс командной строки AWS, вы можете добиться этого, запустив:


aws lambda update-алиас \


--имя-функции "моя функция" \


--name "продукт" \


--функция-версия "2"


AWS Lambda Псевдоним IAM Gotcha


Есть небольшая проблема с AWS Lambda Alias, и она связана с тем, что вам нужно указать в разрешениях и политиках IAM.


  • Источник события (API-шлюз, триггеры событий и т. д.) — должен ссылаться на ARN лямбда-псевдонима для предоставления разрешений на вызов

  • Разрешения во время выполнения (доступ к S3, БД и т. д.) — следует ссылаться на ARN функции Lambda.

Разница между псевдонимом ARN и функцией ARN


Учитывайте это при использовании AWS Lambda Alias ❗️


Расширенные развертывания


Конфигурация переключения трафика


Перемещение трафика AWS Lambda Alias


Есть и другие преимущества использования лямбда-псевдонима, в том числе расширенные шаблоны развертывания, которые AWS предлагает изначально.


По умолчанию интерфейс командной строки AWS для лямбда поддерживает переключение трафика (или взвешенное развертывание), при котором вы можете разделить трафик между двумя версиями, используя процентное соотношение (%).


Используя интерфейс командной строки AWS, вы можете добиться этого, запустив:


``` ударить


aws lambda update-алиас \


--имя-функции "моя функция" \


--name "продукт" \


--функция-версия "2" \


--routing-config AdditionalVersionWeights={"2"=0.1}


Это означает, что 10% трафика будет переведено на версию 2, а остальные 90% останутся на версии 1.


Развертывание кода AWS


AWS Codedeploy также поддерживает выпуски лямбда-выражений с канареечным развертыванием, где вы можете делегировать развертывание в AWS Codedeploy.


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


AWS Codedeploy также поддерживает автоматический откат на основе метрик AWS Cloudwatch на этапе канареечного развертывания.


Вывод


Напомним, псевдоним AWS Lambda устраняет разрыв между существующими решениями, используя статическое и динамическое управление версиями.


Это обеспечивает гибкость при продвижении версий и, следовательно, безопасность развертываний.


Наконец, любые ссылки на лямбда-функцию ARN не нужно обновлять при использовании псевдонима!


Это делает его гораздо лучшим выбором в целом, когда вы получаете лучшее из обоих миров!


Вот краткий обзор стратегий управления версиями:


Сравнение стратегий управления версиями AWS Lambda (за и против)



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE