AWS: Функции Lambda — обзор и интеграция с API API Gateway
AWS Lambda Позволяет запустить код без необходимости создавать и управлять серверами, также известными как Без сервера подход.
AWS Lambda определит, сколько процессора и памяти необходимо для запуска функции, и когда это необходимо, он будет работать автоматически.
Код для запуска организован в Lambda функции и может быть вызвано триггеры . Результаты можно проверить с помощью журналов CloudWatch.
В качестве триггера вы можете использовать практически любую службу AWS, такие как API Gateway, SQS, приложение LoadBalancer, CloudFront, Kinesis или внешнее событие, например, WebHook от GitHub.
В этом посте мы создадим простую функцию AWS Lambda, проверим его панель управления, доступные параметры и функции, а затем создадим API API -шлюз AWS, который будет направлять HTTP -запросы функции AWS Lambda.
Содержимое
- AWS Lambda — сценарии использования
- Компоненты и концепции
- Создание функции «Привет, мир»
- Создать функцию
- Мониторинг
- Конфигурация
- Общая конфигурация
- Триггеры
- Разрешения
- Направления
- Переменные среды
- VPC
- Инструменты мониторинга и эксплуатации
- Параллелизм
- Асинхронное призыв
- Прокси базы данных
- Файловая система
- Псевдонимы
- Версии
- AWS Lambda и AWS API Gateway — пример интеграции
- Создать функцию лямбды
- Создайте API API Gateway
AWS Lambda — сценарии использования
В общем, Lambda в AWS может сделать действительно много вещей. Такая «серебряная пуля», позволяющая делать вещи, которые не реализуются самой консолью AWS.
Пример вариантов использования может быть:
- Веб-сайт: фронт на базе JavaScript в AWS S3 со статическим хостингом, Frontend будет получать запросы через шлюз API API в базу данных через функцию Lambda
- Анализ журнала: хороший пример — AWS WAF Security Automations , когда все входящие HTTP -запросы отправляются в AWS Kinesis, он перешлет бы их в Lambda, он выполнит некоторые проверки, и, если необходимо, заблокируют IP клиента
- Автоматизация резервного копирования: AWS SNS может отправить событие, например, когда в ковше AWS S3 используется слишком много дискового пространства, на функцию Lambda, которая удалит некоторые старые резервные копии
- Обработка данных: например, когда новый файл загружается на AWS S3, он генерирует событие, которое запустит функцию Lambda, которая будет выполнять кодирование видеофайла
- Cronjobs без сервера: с помощью CloudWatch события генерируют событие по расписанию, которое запустит функцию лямбды
Компоненты и концепции
Давайте рассмотрим основные концепции AWS Lambda:
- функция : это код для работы в функции. Может быть как zip -файл или изображение Docker ( Пакет развертывания). Смотрите Настройка функций AWS Lambda Анкет
- Триггер : ресурс AWS, который запустит функцию. Такое событие включает в себя службу AWS и Картирование событий Анкет Смотрите Вызывая функции AWS Lambda и Использование AWS Lambda с другими службами Анкет
- событие : объект JSON, который содержит данные для функции Lambda для обработки
- Среда исполнения : Защищенная среда для выполнения функции. Смотрите AWS LAMBDA EXCUTION ENGREWTION Анкет
- Пакет развертывания : Код функции Lambda для запуска. Может быть как архив Zip или изображение Docker. Видеть Пакеты развертывания Lambda Анкет
- время выполнения : Рабочая среда для запуска функции. Видеть Lambda Runtimes
- слой : Например, архив ZIP с дополнительным кодом для запуска функции — внешняя библиотека. Смотрите Создание и совместное использование слоев лямбды Анкет
- расширения : AWS Lambda позволяет использовать расширения, которые можно использовать для интеграции функции с внешними службами, такими как мониторинг. Смотрите Использование Lambda Extensions Анкет
- параллелизм : ряд экземпляров функции Lambda, которые будут выполняться одновременно для обработки входящих данных. Смотрите Управление параллелизмом для функции лямбды Анкет
- квалификатор : «Указатель» на версию или псевдоним. Смотрите Lambda функциональные версии Анкет
- пункт назначения : ресурс AWS, где функция будет отправлять обработанные данные. Смотрите Настройка направлений для асинхронного вызова Анкет
Создание функции «Привет, мир»
Сначала давайте создадим самую простую функцию Lambda, чтобы увидеть, как она работает и что у нас есть.
Создать функцию
Перейдите в AWS Lambda, нажмите на Создать функцию :
На данный момент давайте использовать существующий шаблон. Выберите Используйте план , найти Hello-World-Python :
Нажмите на Настройка :
Установите имя функции, например, Пример-Hello , оставьте роль IAM по умолчанию — она позволит нашей функции использовать журналы CloudWatch и проверить код, который будет использоваться:
Нажмите на Создать функцию :
Переключиться на Тест Вкладка:
Здесь мы можем передать JSON с данными, которые будут обработаны нашей функцией.
Запустить его:
Теперь давайте посмотрим, что консоль AWS предлагает использовать для управления функциями Lambda.
Мониторинг
Первое, что это мониторинг. Здесь мы можем использовать метрики и журналы AWS CloudWatch, вызовы с помощью рентгеновского излучения AWS, Lambda Insights и AWS Codeguru:
Конфигурация
Общая конфигурация
- Настройки памяти: максимальная оперативная память, которую можно использовать при запуске функции. Кроме того, в зависимости от настроек памяти, Lambda предоставит ограничение процессора: на каждые 1769 МБ будет один VCPU. Смотрите Настройка памяти функций (консоль) Анкет
- Тайм -ауты выполнения: максимум может быть установлен на 900 секунд, после этого выполнение функции будет остановлено. Помните, что это повлияет на затраты. Смотрите Тайм -аут Анкет
- IAM Роль: включает в себя политику IAM с разрешениями на ресурсы AWS
Триггеры
Ну, триггеры, которые запустит нашу функцию.
Может быть почти любая услуга AWS:
Например, мы можем создать триггер из приложения AWS LoadBalancer, который примет соединения с определенным URI и переназначит его на функцию лямбды:
Разрешения
Здесь вы можете просмотреть и настроить роль IAM и политики, которые будут настроить разрешения функции:
Направления
Куда отправить результаты выполнения функции.
Например, может быть тема AWS SNS, которая переназначит ее в OpsGenie, которая отправит сообщение на слабый канал:
Переменные среды
Переменные, которые можно использовать в нашей функции. Конфиденциальные данные могут быть зашифрованы в службу управления ключами AWS (км):
VPC
Функция может быть помещена в выделенное виртуальное частное облако AWS, чтобы ограничить доступ своей сети:
Инструменты мониторинга и эксплуатации
Настройки мониторинга, где вы можете включить или отключить дополнительные услуги, такие как рентгенов AWS, CloudWatch Lambda Insights и Amazon Codeguru Profiler:
В Испытания, Вы можете выбрать из списка уже существующих решений или создать свои собственные:
Параллелизм
Максимальное количество экземпляров функции, которые можно запустить одновременно. Смотрите Управление параллелизмом для функции лямбды Анкет
Может быть одним из двух типов:
- Зарезервированная параллелизм : Зарезервируйте число из общепринятого для всей учетной записи (1000 по умолчанию) и применяется ко всей функции, включая все ее версии и псевдонимы
- Предоставленный параллелизм : подготовит уже инициализированные среды выполнения, чтобы во время масштабирования ваша функция не придется ждать ее, применяется к конкретной версии или псевдоним
Асинхронное призыв
Настройки для очереди событий — срок службы, количество повторных переписей в случае ошибок, уведомлений об ошибках и т. Д.
Смотрите Асинхронное призыв :
Смотрите также Синхронный вызов и Асинхронное призыв Анкет
Прокси базы данных
А Amazon RDS Proxy Конфигурация, которая будет использоваться с вашей функцией. RDS -прокси используется для уменьшения количества подключений к серверу базы данных:
Файловая система
Вы можете установить каталог AWS Elastic File System внутри вашей функции:
Псевдонимы
Псевдоним — это своего рода указатель на определенную версию кода вашей функции, которая может быть использована в его ARN позже.
Кроме того, вы можете иметь пару псевдонимов и распространять между ними запросы. Видеть Lambda функции псевдонимов :
Версии
AWS Lambda позволяет использовать код и часть настроек версии. Может быть полезен при тестировании нового кода в среде DEV, например, путем создания выделенного псевдоним :
AWS Lambda и AWS API Gateway — пример интеграции
Итак, мы проверили, что такое AWS Lambda и что он имеет в своих настройках.
Теперь давайте создадим API API -шлюз AWS, который будет направлять запросы на функцию AWS Lambda.
API Gateway примет запросы на /тест URI и будет использовать свое мероприятие, чтобы отправить их в нашу Lambda.
Создать функцию лямбды
В настоящее время выберите Автор с нуля , в среде выполнения Python :
Оставьте код по умолчанию:
Здесь Lambda_handler ()
это функция по умолчанию, которую можно вызвать, когда вызывается функция. Он принимает два аргумента:
событие
: Событие API Gateway, см. Использование AWS Lambda с другими услугамиконтекст
: Разрешены методы и параметры для запуска функции, см. AWS Lambda Context Object в Python
Создайте API API Gateway
Создайте новый шлюз, установите свой тип на Http api :
Добавьте интеграцию:
Выберите Lambda, регион AWS и функцию, которую нужно называть:
Установите URI как /тест :
Оставьте по умолчанию Стадия :
Менее чем через минуту ваши ворота готовы. Скопируйте его URL:
И попробуй с Curl
:
$ curl [https://fwu399qo70.execute-api.us-east-2.amazonaws.com/test](https://fwu399qo70.execute-api.us-east-2.amazonaws.com/test) "Hello from Lambda!"
Чтобы проверить полное содержание события, распечатайте его с json.dumps ()
:
import json def lambda_handler(event, context): return { 'statusCode': 200, 'body': json.dumps(event) }
После изменения кода нажмите на Развернуть :
Попытайся:
$ curl [https://fwu399qo70.execute-api.us-east-2.amazonaws.com/test](https://fwu399qo70.execute-api.us-east-2.amazonaws.com/test) {"version": "2.0", "routeKey": "ANY /test", "rawPath": "/test", "rawQueryString": "", "headers": {"accept": "*/*", "content-length": "0", "host": "fwu399qo70.execute-api.us-east-2.amazonaws.com", "user-agent": "curl/7.78.0", "x-amzn-trace-id": "Root=1–611bbaa4–3cb7c28e4e3181dd647f1030", "x-forwarded-for": "194. ***.***.29", "x-forwarded-port": "443", "x-forwarded-proto": "https"}, "requestContext": {"accountId": "534 ***385", "apiId": "fwu399qo70", "domainName": "fwu399qo70.execute-api.us-east-2.amazonaws.com", "domainPrefix": "fwu399qo70", "http": {"method": "GET", "path": "/test", "protocol": "HTTP/1.1", "sourceIp": "194.***.***.29", "userAgent": "curl/7.78.0"}, "requestId": "ENoZriIrCYcEPWg=", "routeKey": "ANY /test", "stage": "$default", "time": "17/Aug/2021:13:33:24 +0000", "timeEpoch": 1629207204179}, "isBase64Encoded": false}
Теперь давайте посмотрим, как мы можем использовать переменные среды в функции.
Добавьте новый:
И распечатать его значение с os.getenv ()
:
import os import json def lambda_handler(event, context): return { 'statusCode': 200, 'body': os.getenv('Env') }
Проверь это:
$ curl [https://fwu399qo70.execute-api.us-east-2.amazonaws.com/test](https://fwu399qo70.execute-api.us-east-2.amazonaws.com/test) test
Кроме того, вы можете изменить обработчик по умолчанию.
Переименовать Lambda_handler
к main_handler
:
import os import json def main_handler(event, context): return { 'statusCode': 200, 'body': os.getenv('Env') }
Если вы попытаетесь получить доступ к функции сейчас, вы получите Ошибка внутреннего сервера :
$ curl [https://fwu399qo70.execute-api.us-east-2.amazonaws.com/test](https://fwu399qo70.execute-api.us-east-2.amazonaws.com/test) {"message":"Internal Server Error"}
Прокрутите вниз до Настройки времени выполнения :
И изменить Обработчик :
Запустите снова:
$ curl [https://fwu399qo70.execute-api.us-east-2.amazonaws.com/test](https://fwu399qo70.execute-api.us-east-2.amazonaws.com/test) test
Сделанный.
Первоначально опубликовано в RTFM: Linux, DevOps и системное администрирование Анкет
Оригинал: «https://dev.to/setevoy/aws-lambda-functions-and-overview-and-integration-with-aws-api-gateway-48nj»