Рубрики
Без рубрики

Начало работы с слоями AWS Lambda

Краткое введение в слои AWS и как их использовать. Tagged с AWS, Python, Serverless.

Как только вы начнете работать с функциями Lambda, неизбежно произойдет время, когда вам придется включить внешнюю библиотеку в свою функцию. Из коробки Lambda функции поддерживают только ограниченное количество библиотек с их временем. Чтобы ваша функция имела доступ к этим внешним зависимостям, вы должны были бы включить их в свой Пакет развертывания Анкет Каждый раз, когда вы развертываете функцию Lambda, которая включает внешние зависимости в пакете развертывания, была частью рабочего процесса. На этом шаге при развертывании функции Lambda я поймал себя, думая: «Должен быть лучший способ». А теперь есть! С введением слоев для AWS Lambda вам больше не нужно связывать свои внешние зависимости с помощью вашего пакета развертывания. Слои позволяют вам управлять и делиться вашим внешними зависимостями по функциям Lambda. В этом посте я собираюсь,

  1. Объясните, что такое слои и их преимущества
  2. Прохождение, как создать и использовать слой в функции Lambda
  3. Предоставьте некоторые передовые практики и советы

Несмотря на то, что этот пост будет в значительной степени сосредоточен на Python, многие из основных уроков расширяются для других языков, поддерживаемых AWS. Прежде чем начать быстрый отказ от ответственности. Функции AWS Lambda имеют кучу встроенных нюансов и ограничений. В то время как слои полезны, они не являются панацеей. Пожалуйста, уделите минуту, чтобы прочитать последний раздел о лучших практиках. Как и в случае с любым инструментом, он становится бесполезным, если вы не используете его должным образом, поэтому займет минуту или две минуты, чтобы понять, какие ограничения могут спасти вас от головной боли и разочарования в дальнейшем.

Представление слоев AWS

Итак, что это за слои и как они полезны? А AWS Lambda Layer Содержит дополнительный код, библиотеки и зависимости, которые загружаются для поддержки функции Lambda во время выполнения. Уровни устраняют необходимость упаковки внешних зависимостей в вашем пакете развертывания для каждой созданной вами функции Lambda. Слой – это пакет всех внешних зависимостей, которые требуется вашей функции Lambda. Во время выполнения зависимости, указанные в слое, загружаются и доступны для вашей функции Lambda. Слои также не специфичны для отдельных функций лямбда. После создания слоя вы можете использовать этот слой для поддержки нескольких различных функций Lambda. Нет необходимости воссоздать слой для каждой функции Lambda. Каждая функция Lambda может поддерживать до 5 различных слоев, обеспечивающих гибкость для смешивания и матча разных слоев.

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

Создание слоя AWS

Теперь, когда у вас есть представление о том, что такое слой и почему вы, возможно, захотите его использовать, давайте создадим его. Для этого первоначального примера мы собираемся создать слой, который делает колба Структура доступна для нашей функции Lambda. Чтобы построить слой, есть три общих шага,

  1. Создайте файл ZIP со всеми зависимостями для слоя
  2. Загрузите zip -файл на слой в AWS
  3. Связывать слой с функцией лямбды

Давайте начнем с создания пакета развертывания для нашего слоя.

Создание кодового пакета

Пакет развертывания для нашего уровня – это zip -файл, содержащий весь код, который мы хотим включить в уровень. Процесс очень похож на то, как вы включите зависимости в свой пакет развертывания Lambda, но разница в слоях, которые вы делаете этот процесс один раз, а не каждый раз, когда вы развертываете. Код здесь может быть пользовательским кодом или любыми другими внешними пакетами Python (Обратите внимание, что я использую Python здесь, но слои поддерживают все разные виды времени). В этом введении мы будем простыми наше развертывание и будем создавать слой, который делает колба Библиотека доступна для нашей лямбды. Что нам нужно сделать, это установить колба в каталог, а затем создайте zip -архив этого каталога. Один Требование При создании кодового пакета для слоя заключается в том, что наш код должен быть вложен в папку, поддерживаемую во время выполнения для вашей лямбды. В нашем случае мы будем использовать Python, поэтому колба Код должен быть в zip-файле, вложенном в подканалиста с именем Python Анкет Мы можем сделать все это из терминала.

Во -первых, в терминале давайте создадим каталог для нашего проекта, который мы позвоним Флэкс-слой с Python Папка как подканалостика.

mkdir -p flask-layer/python

Далее установите колба упаковка в фляп-слой/Python каталог,

pip3 install flask -t flask-layer/python

Наконец, застегивает содержимое Флэкс-слой в архив молнии.

cd flask-layer
zip -r aws-flask-layer.zip python

Создание нашего слоя в AWS

Далее мы можем загрузить наш код в AWS. В рамках консоли AWS перейдите на страницу службы Lambda. В левом меню выберите «слои». На следующей странице нажмите «Создать слой» в правом верхнем углу. Теперь мы определим наш слой. Я назвал слой Флэкс-слой с кратким описанием. Следующая информация, которую нам нужно ввести, – это «тип записи кода». Обратите внимание на предупреждение под выпадением. Для этого примера наш пакет кода намного меньше, чем предел 10 МБ, поэтому мы собираемся выбрать параметр «Загрузить файл .zip», а затем нажмите кнопку «Загрузить» и выберите aws-flask-layer.zip Файл, который вы создали выше. Если ваш файл .zip> 10 МБ, вам нужно будет загрузить файл в S3, а затем предоставить путь к файлу в S3. Наконец, нам нужно связать наш слой со временем выполнения. В этом примере мы используем время выполнения Python 3.7, но вы можете связать один слой с 5 разными временем выполнения. Когда вы закончите, ваша страница должна выглядеть примерно так, Внизу щелкните правой кнопкой мыши «Создайте слой». Теперь, когда мы создали слой, давайте используем его.

Использование нашего слоя в функции лямбды

Вернитесь к приборной панели Lambda и нажмите «Создать функцию» в правом верхнем углу. Наша функция будет названа, TestflaskLayer Анкет Мы собираемся использовать время выполнения Python 3.7, чтобы соответствовать времени выполнения, которое мы выбрали для нашего слоя. Если вы выберете другое время выполнения, чем то, что вы выбрали для своего слоя, то вы не сможете получить доступ к слою из вашей функции. Выберите существующую роль, если у вас есть такая, у которой есть разрешения Lambda, или позвольте AWS создавать его для вас и нажмите «Создать функцию» внизу. На следующей странице нам нужно подключить созданный слой с нашей функцией Lambda. Под коробкой с надписью «Testflasklayer» в середине страницы нажмите поля «слои» внизу. Прокрутите страницу и нажмите кнопку «Добавить слой». В выпадании выбора Флэкс-слой И затем укажите, что мы используем версию 1 слоя, затем нажмите «Добавить». Вернемся в дизайнер Lambda нажмите «Сохранить». Теперь наша функция Lambda имеет доступ к колба упаковка! Чтобы убедиться, что это так, давайте сделаем быстрый тест.

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

import json
import flask

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps(flask.__version__)
    }

Сохраните функцию Lambda. Теперь прокрутите на вершину и запустите тест “Hello World”. Вы должны получить успешный результат с версией фляжка Вы используете в теле выхода. Если бы вы вернулись в свои слои и удалили Флэкс-слой Из вашей лямбды, сохраните функцию и повторите тест, вы получите неудачу. Сняв слой, функция лямбда больше не может получить доступ к колба библиотека. Когда Lambda пытается импортировать колба Библиотека в этом случае будет выброшена ошибка.

Если у вас были другие функции Lambda, которые необходимы для доступа фляжка Все, что вам нужно сделать, это добавить Флэкс-слой к функции Lambda, и вы будете готовы!

Лучшие практики и другие советы

Чтобы получить максимальную отдачу от слоев, сохраняют код, составляющий любой отдельный слой узко определенным. Наличие узко определенных слоев ограничивает ваше воздействие включения неиспользованных зависимостей, когда вы начинаете разделять слои по функциям. Раздувая зависимость в Lambda имеет реальные затраты с точки зрения дополнительных затрат на выполнение, времени и производительности. Неспособное определение ваших слоев может помочь вам избежать этих затрат. Еще одна причина, по которой вы захотите, чтобы меньше слоев, заключается в том, что слои не являются оборудованием для размера пакета развертывания Lambda. Я признаю, что когда я начал использовать слои, был мимолетный момент, когда я думал, что слои могут обойти эти пределы, но это не так. Слои, включенные в лямбду, будут учитываться в размере развертывания функции Lambda, способствующей жесткие ограничения для размера пакета развертывания функций Lambda. Из -за этих ограничений по размеру, сохраняя ваши слои небольшими, позволяет вам максимально использовать свои пакеты развертывания, не теряя места на зависимости, которые вам не нужны.

Чтобы убедиться, что ваша функция лямбды имеет все зависимости, которые необходимы, сложите ваши слои. Функции Lambda позволяют включать до 5 уникальных слоев. Укладывание слоев позволяет смешивать и сопоставить отдельные слои, которые вы создали для создания пользовательского набора зависимостей для вашей функции.

Наконец, еще одна заметка о создании слоев, чтобы знать. Любой код, который вы включаете в свой zip -файл уровня, должен быть совместим с AWS. Как описано в это Выполните некоторые пакеты Python (т.е. numpy ) содержит скомпилированный код, который несовместим с AWS. Обходной путь для этих случаев состоит в том, чтобы создать пакет развертывания с предварительно сгруппированными файлами .whl вместо использования PIP установка Анкет В случае Numpy и Scipy Amazon создал общественный слой Любой, кого вы можете включить в свой код.

Завершая

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

  • Учиты управляют внешними зависимостями для функций лямбды
  • Слои могут быть разделены по функциям лямбда
  • Держите слои маленькими и используйте способность складывать слои в функциях. Меньшие слои облегчают убедиться, что функция имеет только зависимости, необходимые для выполнения своих задач.
  • Слои по -прежнему подвержены ограничениям лямбда на размер развертывания кода. Они не обходной путь для этих жестких ограничений.
  • Зависимости должны быть совместимы с средой AWS, что означает, что вы можете не просто иметь возможность PIP установка определенные пакеты.

Я надеюсь, что вы нашли это введение в слои полезным! Я только начинаю это делать, поэтому, если что -то неясно или у вас есть дополнительные вопросы, пожалуйста, дайте мне знать!

Оригинал: “https://dev.to/matthewvielkind/getting-started-with-aws-lambda-layers-4ipk”