Рубрики
Uncategorized

AWS: Функции Lambda — обзор и интеграция с API API Gateway

AWS: Функции Lambda — обзор и интеграция с AWS API Gateway AWS Lambda … Tagged with AWS, сегодня, учебник, DevOps.

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 — сценарии использования

В общем, 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:

Создание функции «Привет, мир»

Сначала давайте создадим самую простую функцию 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 () это функция по умолчанию, которую можно вызвать, когда вызывается функция. Он принимает два аргумента:

  1. событие : Событие API Gateway, см. Использование AWS Lambda с другими услугами
  2. контекст : Разрешены методы и параметры для запуска функции, см. 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»