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

Использование внешних пакетов Python с AWS Lambda Layers

Amazon Lambda – это потрясающий сервис, который позволяет запустить код Serverless: вместо того, чтобы сохранить сервер … Помечено Python, AWS, Учебник.

Amazon лямбда Это потрясающий сервис, который позволяет запустить код Serverless: вместо того, чтобы сохранить сервер, запущенный для выполнения вашего кода в любое время, сервер закручен только при необходимости в ответ на некоторое событие. Это событие может быть из HTTP-запроса, сообщение, размещенное в службе очередей, как Amazon SQS или даже когда файл загружен в ведро S3!

Лямбда поставляет отличаться ронстримки В зависимости от того, на каком языке вы хотите написать вашу функцию. Для программирования Python эта среда выполнения включает в себя стандартную библиотеку Python, но что, если вы хотите использовать внешние пакеты из Pypi или где-либо еще? Это то, что вы можете сделать с Lambda Sealers! Слои обеспечивают зависимости (или даже пользовательское время выполнения) для вашей функции, и в этом быстром руководстве мы пройдемся по их использованию!

Что вам нужно,

  • Аккаунт AWS и небольшой опыт использования функций Lambda. Если вы не использовали их раньше, у Amazon есть Великие учебники Действительно
  • Докер Установлен на вашем компьютере, так как мы будем использовать это для установки зависимостей в аналогичной среде для AWS Lambda Python Runtime

Наш демонстрационный проект будет очень простым ламбдами, которые обращаются к Покеапи ‘s /API/V2/Pokemon Конечная точка для возврата информации о покемоне, учитывая имя, передаваемое в случае, когда вызывает функцию.

Настройка нашего проекта локально

Сначала мы создадим Виртуальная среда Для нашего проекта и работать там, чтобы сохранить какие-либо проектные зависимости от других на вашем компьютере:

$ mkdir poke-lambda 
$ cd poke-lambda
$ python -m venv venv
$ source venv/bin/activate

Мы используем Запросы Библиотека, чтобы сделать наши вызовы API, поэтому установите это с PIP Установка запросов Отказ Наш один файл, lambda_function.py Похоже:

import json
import requests

def lambda_handler(event, context):
    # Make sure a Pokemon name (or ID) was passed in the event object:
    pokemon = event.get('pokemon')
    if pokemon is None:
        return {
            'statusCode': 400,
            'body': json.dumps('Missing pokemon attribute in the event object')
        }

    # If we have a pokemon name/ID passed in, try to get info for it:
    r = requests.get(f"https://pokeapi.co/api/v2/pokemon/{pokemon}")

    if r.status_code == 200:
        status_code = 200
        body = json.dumps(r.json())
    else:
        status_code = r.status_code
        body = json.dumps(f"Could not load information for Pokemon {pokemon}")

    # Return what we got from the API:
    return {
        'statusCode': status_code,
        'body': body
    }

Какой этот код проверяется на покемон атрибут в событие Данные лямбда-функции получает, запросы Pokéapi для получения информации о покемонах, и возвращает ответ API (с базовой обработкой ошибок). На данный момент наша структура проекта выглядит так:

poke-lambda
|   lambda_function.py
└───venv

Строительство нашего слоя лямбда

Для того, чтобы поставить этот код на aws lambda, нам нужен способ включить Запросы Библиотека первая! Лоуры лямбда .zip Файлы, содержащие библиотеки (и пользовательское время выполнения, если вам нужно) Ваша функция требует. Для Python Lambda слоев, AWS требует Библиотеки должны быть размещены в либо Python или Python/lib/python-3.x/сайт-пакеты папки.

  1. Хотя виртуальная среда активируется для вашего проекта, сохранить список его зависимостей к требования .txt Файл: PIP Freeze> требования .txt Отказ

  2. Создать Python папка. Это покажет все библиотеки, чтобы пойти в наш слой. На данный момент структура вашей папки должна быть:

  3. Из корня проекта запустите следующую команду для создания ваших зависимостей в контейнере, аналогично среде для выполнения лямбда, Amazon предоставляет (вежливость лямбчи ):

    Давайте сломаемся, что делает эту команду, аргумент-аргумент:

    • --rm : Убедитесь, что после завершения контейнера докера, он удален (держит вещи чистыми)
    • --volume : Привязать крепления Текущий рабочий каталог для /лямбда-сборка Каталог на контейнере (это позволяет контейнеру получить доступ к файлу требований .txt, который мы только что сгенерировали, и добавляют файлы в каталог Python ). Если вы находитесь в Windows, вы также можете вставить полный путь к корню вашего проекта вместо $ (PWD) Отказ
    • -w : Устанавливает рабочий каталог в контейнере (в этом случае к нашему корню проекта)
    • лямбчи/лямбда: build-python3.8 : Image Docker, чтобы запустить этот контейнер – убедитесь, что он соответствует версии Python, с которой вы работаете! Для справки Amazon в настоящее время предоставляет runtimes для Python 2.7, 3.6, 3.7 и 3.8 (я использую 3.8 здесь)
    • PIP Установка -R требования. atxt --target python : Установка зависимостей проекта как обычно, из файла требований .txt к Python папка (больше на этом здесь Несомненно
  4. Вы должны увидеть некоторые вывод из пипс . Это работает в контейнере докера. Если успешно, вы должны иметь зависимости, установленные для Python Папка, которую вы создали ранее! Мой выглядит так:

  5. На данный момент все, что нам нужно сделать, это Zip наш Python Папка: zip -r слой python/ Отказ Это создаст слой .zip файл в корневом каталоге вашего проекта.

  6. Далее загрузите файл .zip в лямбда! Войдите в свою консоль AWS и отправитесь на услуги> Lambda> Слои (Это должно быть под «дополнительными ресурсами»). Нажмите «Создать слой» и дайте свой слой имя! Выберите время выполнения, которое соответствует версии Python, вы пытаетесь использовать в своей функции, и загрузить файл .zip, который вы создали ранее:

Добавление слоя в нашу функцию лямбда

Мы пройдем через это, используя интерфейсную консоль, но вы можете полностью сделать это по всему AWS CLI!

  1. Находясь в вашей консоли AWS Lambda, нажмите «Создать функцию». Установите это, однако вы хотите (выберите время выполнения Python, хотя)

  2. В дизайнере Lambda Fuction Design, нажмите кнопку «Слои»:

  3. Стол, полный слоев, ваша функция использует, должна появиться под конструктором. Там не так далеко, так что давайте добавим нашу! Нажмите «Добавить слой» и выберите «Пользовательские слои». Вы должны увидеть ваш слой, который вы создали ранее в раскрывающемся списке. Выберите и добавьте его!

  4. После добавления вас снова приведет к дизайнеру. Прокрутите вниз и вставьте свой код функции (вы можете альтернативно загрузить файл .zip, содержащий только lambda_function.py Файл, поскольку это все, что нам нужно здесь)

  5. Сохраните и нажмите «Развернуть», чтобы обновить код вашей функции. Давайте отправим наш код тестовым событием! В верхней части страницы нажмите «Настроить тестовые события» в разделе «Выберите тестовое событие». Мы создадим полезную нагрузку на событие для получения подробной информации о Charizard:

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

Это все, что есть к этому! Держите в виду функции могут иметь несколько слоев лямбда (сейчас до 5 прямо сейчас) и функции могут поделиться слоями.

В этом руководстве мы:

  • Написал простую ламбда, которая вызывает внешнюю API и возвращает результаты
  • Создал LAMBDA-слой, содержащий все зависимости для нашего проекта, который мы можем повторно использовать в других проектах позже, используя лямбчи/лямбда картинки а также лямбда графина

Имейте в виду, что все это также может быть достигнуто над AWS CLI (загрузка функции, создавая слой и так далее), если вы предпочитаете этот метод. Есть много AWS Docs Какой документирует это довольно хорошо!

Надеюсь, вам понравилось это руководство! Дайте мне знать, если бы это было полезно в вашем проекте 😄

Оригинал: “https://dev.to/mmascioni/using-external-python-packages-with-aws-lambda-layers-526o”