AWS Lambda — Обзор
AWS Lambda — это сервис, который выполняет бессерверные вычисления, которые включают вычисления без какого-либо сервера. Код выполняется на основе ответов на события в сервисах AWS, таких как добавление / удаление файлов в корзине S3, обновление таблиц динамо Amazon Dynamo, HTTP-запрос от шлюза Amazon API и т. Д.
Чтобы начать работать с AWS Lambda , нам просто нужно отправить код в сервис AWS Lambda. AWS позаботится обо всех других задачах и ресурсах, таких как инфраструктура, операционная система, обслуживание сервера, мониторинг кода, журналы и безопасность.
AWS Lambda поддерживает такие языки, как Java, NodeJS, Python, C # и Go. Обратите внимание, что AWS Lambda будет работать только с сервисами AWS.
Что такое AWS Lambda?
Определение AWS Lambda, приведенное в его официальной документации, следующее:
AWS Lambda — это вычислительный сервис, который позволяет запускать код без подготовки или управления серверами. AWS Lambda выполняет ваш код только при необходимости и автоматически масштабируется от нескольких запросов в день до тысяч в секунду. Вы платите только за то время, которое потратили на вычисления — плата не взимается, если ваш код не запущен.
Как работает AWS Lambda?
Блок-схема, объясняющая работу AWS Lambda в пяти простых шагах, показана ниже —
Шаг 1. Загрузка лямбда-кода AWS на любом из языков, поддерживаемых лямбда-AWS, а именно NodeJS, Java, Python, C # и Go.
Шаг 2. Это несколько сервисов AWS, на которых можно запускать лямбду AWS.
Шаг 3 — AWS Lambda, в котором есть код загрузки и подробности события, при котором произошел триггер. Например, событие от Amazon S3, Amazon API Gateway, Dynamo dB, Amazon SNS, Amazon Kinesis, CloudFront, Amazon SES, CloudTrail, мобильного приложения и т. Д.
Шаг 4. Выполнение лямбда-кода AWS только при запуске службами AWS в таких сценариях, как —
- Пользователь загружает файлы в корзину S3
- http get / post конечная точка URL
- данные добавляются / обновляются / удаляются в динамо-таблицах дБ
- Отправить уведомление
- сбор потоков данных
- хостинг сайта
- отправка электронной почты
- мобильное приложение и т. д.
Шаг 5. Помните, что AWS взимает плату только при выполнении лямбда-кода AWS, а не иначе.
Преимущества использования AWS Lambda
AWS Lambda предлагает несколько преимуществ, когда вы работаете над этим. Этот раздел обсуждает их подробно —
Простота работы с кодом
AWS Lambda предоставляет вам инфраструктуру для загрузки вашего кода. Он заботится о поддержании кода и запускает код всякий раз, когда происходит требуемое событие. Это позволяет вам выбрать память и время ожидания, необходимое для кода.
AWS Lambda также может выполнять параллельные запросы в соответствии с триггерами событий.
Предоставление журнала
AWS Lambda предоставляет подробные сведения о количестве выполнений кода и времени, потраченном на выполнение, потребленной памяти и т. Д. AWS CloudWatch собирает все журналы, что помогает понять ход выполнения и отладку кода.
Биллинг на основе использования
Лямбда-биллинг в AWS выполняется на основе использования памяти, выполненных запросов и выполнения, которые тарифицируются с шагом не менее 100 мс. Таким образом, для выполнения 500 мс, выставление счетов будет после каждых 100 мс. Если вы укажете лямбда-код AWS, который должен быть выполнен за 500 мс, а время, затрачиваемое на его выполнение, составляет всего 200 мс, AWS будет выставлять вам счет только за время, то есть 200 мс выполнения вместо 500 мс. AWS всегда взимает плату за использованное время выполнения. Вам не нужно платить, если функция не выполняется.
Многоязычная поддержка
AWS Lambda поддерживает популярные языки, такие как Node. JS, Python, Java, C # и Go. Это широко используемые языки, и любой разработчик может легко написать код для AWS Lambda.
Простота написания и развертывания кода
Для Lambda доступно множество опций для разработки и развертывания кода. Для написания своего кода вы можете использовать онлайн-редактор AWS, Visual Studio IDE или Eclipse IDE. Он также поддерживает безсерверную инфраструктуру, которая облегчает написание и развертывание лямбда-кода AWS. Помимо консоли AWS у нас есть AWS-cli для создания и развертывания кода.
Другие преимущества
Вы можете бесплатно использовать AWS Lambda, зарегистрировавшись на бесплатном уровне AWS. Это дает вам сервис бесплатно в течение 1 года. Взгляните на бесплатные услуги, предлагаемые на бесплатном уровне AWS.
Недостатки использования AWS Lambda
Несмотря на многие преимущества, AWS Lambda обладает следующими недостатками:
-
Это не подходит для небольших проектов.
-
Вы должны тщательно проанализировать свой код и определить память и время ожидания. Если ваша функция требует больше времени, чем выделено, она будет прервана в соответствии с указанным в ней тайм-аутом, и код не будет полностью выполнен.
-
Поскольку AWS Lambda полностью полагается на AWS для инфраструктуры, вы не можете установить дополнительное программное обеспечение, если этого требует ваш код.
Это не подходит для небольших проектов.
Вы должны тщательно проанализировать свой код и определить память и время ожидания. Если ваша функция требует больше времени, чем выделено, она будет прервана в соответствии с указанным в ней тайм-аутом, и код не будет полностью выполнен.
Поскольку AWS Lambda полностью полагается на AWS для инфраструктуры, вы не можете установить дополнительное программное обеспечение, если этого требует ваш код.
События, которые запускают AWS Lambda
События AWS Lambda могут запускаться следующим образом:
- Вступление в объект S3
- Вставка, обновление и удаление данных в таблице БД Динамо
- Push-уведомления от SNS
- GET / POST вызовы к API Gateway
- Изменение заголовков в средстве просмотра или исходном запросе / ответе в CloudFront
- Записи журнала в потоке данных AWS Kinesis
- Журнал истории в CloudTrail
Примеры использования AWS Lambda
AWS Lambda — это вычислительный сервис, используемый в основном для фоновых процессов. Может запускаться при использовании с другими сервисами AWS. Список сервисов AWS, где мы можем использовать AWS Lambda, приведен ниже —
S3 Object и AWS Lambda
Amazon S3 передает информацию о событии в AWS Lambda при любой загрузке файла в S3. Подробная информация о загрузке или удалении файла или перемещении файла передается в AWS Lambda. Код в AWS Lambda может предпринять необходимые шаги для получения сведений о событии. Например, создание эскиза изображения, вставленного в S3.
DynamoDB и AWS Lambda
DynamoDB может запускать AWS Lambda при добавлении, обновлении и удалении данных в таблице. Событие AWS Lambda содержит все подробности таблицы AWS DynamoDB о вставке / обновлении или удалении.
API-шлюз и AWS Lambda
API Gateway может запускать AWS Lambda с помощью методов GET / POST. Мы можем создать форму и поделиться информацией с конечной точкой API Gateway и использовать ее с AWS Lambda для дальнейшей обработки, например, для внесения данных в таблицу DynamoDB.
SNS и AWS Lambda
SNS используется для push-уведомлений, отправки SMS и т. Д. Мы можем запустить AWS-лямбду, когда в SNS происходит любое push-уведомление. Мы также можем отправлять SMS на номер телефона от AWS Lambda, когда он получает триггер.
Запланированные события и AWS Lambda
Запланированные события могут быть использованы для заданий cron. Он может запустить AWS Lambda для выполнения задачи в обычном режиме.
CloudTrail и AWS Lambda
CloudTrail может быть полезен при мониторинге логов в учетной записи. Мы можем использовать AWS Lambda для дальнейшей обработки журналов CloudTrail.
Kinesis и AWS Lambda
Kinesis используется для сбора / хранения данных отслеживания в реальном времени, поступающих с кликов веб-сайтов, журналов, каналов социальных сетей и триггера AWS Lambda, который может выполнять дополнительную обработку этих журналов.
CloudFront и Lambda @ Edge
CloudFront — это сеть доставки контента, где вы можете разместить свой веб-сайт, а Lambda @ Edge может использоваться для обработки заголовков, поступающих от запроса зрителя, запроса источника, ответа источника и ответа зрителя. Модификация заголовков включает в себя такие задачи, как изменение данных cookie, перезапись URL, использование для тестирования AB для изменения ответа, отправляемого пользователю обратно, добавление дополнительной информации заголовков в целях безопасности и т. Д.
AWS Lambda — настройка среды
Перед началом работы с AWS Lambda необходимо войти в систему с консоли Amazon. AWS Lambda поддерживает две среды разработки: Visual studio и Eclipse . В этой главе мы подробно обсудим поэтапную установку AWS Lambda.
Создать логин в Консоли AWS
Вы можете бесплатно создать свой логин в Консоли AWS, используя бесплатный уровень Amazon. Вы можете выполнить следующие шаги, указанные ниже, чтобы создать логин с помощью Amazon для использования сервисов Amazon.
Шаг 1
Перейдите на https://aws.amazon.com/free/ и нажмите, чтобы создать бесплатный аккаунт. Вы можете увидеть скриншот, как показано ниже —
Шаг 2
Нажмите на кнопку Создать бесплатную учетную запись , и вы будете перенаправлены на экран, как показано ниже —
Теперь заполните данные электронной почты, пароль и имя учетной записи AWS согласно вашему выбору в приведенной выше форме и нажмите « Продолжить» .
Шаг 3
Теперь вы можете найти экран, как показано ниже —
Введите все необходимые данные в этой форме.
Обратите внимание, что минимальная плата взимается в зависимости от выбранной страны. То же самое возвращается после подтверждения введенных данных. Вам нужны данные кредитной или дебетовой карты, чтобы создать бесплатный аккаунт. Для индийских пользователей вычитается 2 рупии и взимается плата в размере 1 доллара США. Эта сумма возвращается соответствующему пользователю карты после подтверждения пользователя.
Обратите внимание, что учетная запись является бесплатной и есть ограничения на использование услуг. Если использование превышает лимит, пользователь будет платить за это.
Когда данные введены в форму, показанную выше, нажмите « Создать учетную запись и продолжить» .
Вы будете перенаправлены на следующий экран, как показано ниже.
Шаг 4
Вам необходимо ввести данные платежа, то есть кредитную или дебетовую карту, а также дату истечения срока действия и имя владельца карты, как показано ниже —
Шаг 5
После того, как все данные введены, нажмите « Безопасная отправка», и она проверит карту в банке и выдаст вам OTP на вашем мобильном телефоне, который связан с картой. Вы можете найти окно, как показано ниже —
Теперь введите данные OTP и нажмите « Выполнить платеж» . Вы платите в зависимости от выбранной страны.
Шаг 6
Как только оплата сделана, следующим шагом будет проверка телефона. Вам нужно ввести свой номер мобильного телефона, как показано ниже —
Как только детали заполнены, нажмите « Перезвоните мне сейчас» . AWS немедленно позвонит, используя автоматизированную систему. При появлении запроса по вызову введите 4-значный номер, который появится на вашем сайте AWS, на телефон с помощью клавиатуры телефона. Это подтвердит ваш номер, и вы получите активацию почты в почтовом идентификаторе, указанном в начале при создании логина.
Шаг 7
Нажмите на ссылку электронной почты и введите имя учетной записи или идентификатор электронной почты, а также пароль и войдите в систему служб AWS, как показано ниже.
Имя учетной записи отображается в верхнем правом углу, как показано выше. Теперь вы можете начать пользоваться сервисом AWS Lambda. Для сервиса AWS Lambda поддерживаются следующие языки: NodeJS, Python, Java, C # и Go.
Установка Visual Studio 2017
Существует два IDE, совместимых с AWS: Visual Studio и Eclipse . В этом разделе мы обсудим установку Visual Studio 2017 на Windows, Linux Mac. Перейдите на официальный сайт Visual Studio: https://www.visualstudio.com/downloads/ . Вы можете найти экран приветствия, как показано на рисунке —
Загрузите версию сообщества, то есть Visual Studio Community 2017, как бесплатную версию для практики. После установки он проведет вас через все этапы установки, где вам нужно будет выбрать пакеты для последующего использования. Вы можете выбрать пакет nodejs, python, c # , чтобы мы могли работать позже.
Поддержка AWS Toolkit для Visual Studio 2017
После установки Visual Studio 2017 вам нужно будет выполнить указанные шаги для установки поддержки AWS Toolkit для Visual Studio 2017 —
Шаг 1
Перейдите на https://aws.amazon.com/visualstudio/ и загрузите инструментарий AWS для Visual Studio. Дисплей показан ниже.
Обратите внимание, что пакет, загруженный для Visual Studio 2017, является пакетом vsix . Если ваша версия Visual Studio находится между 2013-2015, она установит установщик MSI . Нажмите кнопку « Скачать» , как показано ниже.
Шаг 2
Теперь дважды щелкните загруженный пакет vsix, и он проведет вас через этапы установки, как показано ниже —
После успешной установки Visual Studio вы увидите окно, как показано ниже —
Шаг 3
Теперь откройте Visual Studio 2017, и вы увидите страницу приветствия от AWS, как показано ниже —
Обратите внимание, что вам нужно добавить ключ доступа, секретный ключ, номер учетной записи, чтобы начать работу, и использовать сервисы AWS из Visual Studio.
AWS Lambda BoilerPlate для NodeJS
Вы можете использовать его с визуальным студийным кодом, как показано ниже.
Шаг 1
Вы можете бесплатно загрузить код Visual Studio с официального сайта: https://www.visualstudio.com/downloads/. Домашняя страница загрузок Visual Studio выглядит следующим образом —
Шаг 2
Теперь откройте код Visual Studio, как показано ниже —
Шаг 3
Для установки поддержки AWS, поддержка для nodejs доступна внутри расширений. Вы можете искать AWS, и он отобразит следующую опцию:
Шаг 4
Теперь установите шаблон для AWS Lambda в nodejs, как показано на рисунке —
Шаг 5
Щелкните репозиторий и клонируйте его в Visual Studio, чтобы начать писать функцию Lambda в Visual Studio. Он перенаправляет вас в этот репозиторий, который мы можем клонировать в Visual Studio: https://github.com/loganarnett/vscode-lambda-snippets . Теперь откройте командную палитру из опции View в Visual Studio.
Шаг 6
Нажмите на него и выберите git clone, как показано ниже —
Шаг 7
Введите URL-адрес хранилища и сохраните его по вашему выбору локально. Создайте файл index.js, как показано ниже, для работы с лямбда-функцией —
Установка Eclipse IDE
Теперь вам нужно будет установить последнюю версию Eclipse Java EE IDE. Вы можете скачать его с официального сайта Eclipse: https://www.eclipse.org/downloads/
Поддержка AWS Toolkit для Eclipse IDE
После установки Eclipse выполните следующие шаги:
Шаг 1
Перейдите на помощь в меню и нажмите Установить новое программное обеспечение .
Шаг 2
Введите https://aws.amazon.com/eclipse в текстовом поле « Работа с» в верхней части диалогового окна.
Шаг 3
Теперь выберите необходимые инструменты управления ядром AWS и другие дополнительные элементы из списка, показанного ниже.
Шаг 4
Теперь нажмите Next . Eclipse проведет вас через оставшиеся шаги установки, как указано в дальнейших шагах, приведенных ниже.
Шаг 5
Основные модули AWS отображаются в таблице ниже, как показано на приведенном ниже снимке экрана.
Шаг 6
После установки инструмент AWS будет доступен в Eclipse, как показано ниже —
Шаг 7
При нажатии на сервис Amazon вы можете увидеть следующий экран.
Теперь нажмите на AWS Explorer, чтобы увидеть доступные сервисы. Мы обсудим, как работать с установленной IDE в следующих главах.
AWS Lambda — Введение
AWS Lambda — это сервис, который заботится о вычислении вашего кода без какого-либо сервера. Говорят, что это серверный компьютер. Код выполняется на основе ответов на события в сервисах AWS, таких как добавление / удаление файлов в корзине S3, обновление Amazon DynamoDBtables, HTTP-запрос от шлюза Amazon Api и т. Д.
Лямбда-код AWS может быть написан на NodeJS, Java, C #, Python и Go. В этой главе будет подробно рассказано о создании функции AWS Lambda в консоли AWS.
Консоль AWS
Войдите в консоль AWS по ссылке https://aws.amazon.com/console . После входа в систему он перенаправит вас на экран, где отображаются сервисы AWS.
Пример: создание функции
Позвольте нам понять функциональность Консоли AWS с помощью Примера. Нажмите на лямбду (отмечено выше), она будет перенаправлена на создание функции, как показано ниже —
Нажмите кнопку Создать функцию , и на экране появятся следующие детали —
Обратите внимание, что по умолчанию этот параметр установлен с нуля . Эта опция позволяет вам писать лямбда-код с нуля. Он просто будет иметь простую функцию с сообщением привет миру .
Второй вариант Blue print имеет следующие детали.
В нем приведены подробности кода, уже написанного для некоторых сервисов aws на языках, доступных в AWS Lambda. Кроме того, вам нужно написать AWS-лямбда-код для любых услуг, которые вы можете проверить в виде чертежей и начать работу.
Третий вариант — безсерверный репозиторий приложений — настройка безсерверного приложения, которое поможет развернуть лямбда-код AWS.
В дальнейшем обсуждении мы будем работать над первым вариантом, где мы создаем лямбда-функцию AWS, используя Author с нуля .
Прежде чем мы создадим функцию Lambda, нам понадобится роль, т. Е. Разрешение на работу со службами AWS и AWS Lambda. Позже Роль должна быть назначена лямбда-функции aws.
Создание роли в Консоли AWS
Для создания роли в консоли AWS перейдите в службы консоли AWS и нажмите IAM, как показано ниже —
Теперь, если вы нажмете IAM , вы увидите экран, как показано ниже —
Если вы выберите Роли , вы можете увидеть следующие кнопки на экране —
Теперь нажмите « Создать роль» . Вам будет предложено выбрать сервис, в котором вам нужно использовать созданную роль.
Поскольку нам нужно использовать эту роль с AWS Lambda, выберите Lambda и нажмите кнопку « Далее»: кнопка « Разрешения» , как показано выше. На следующем экране отображается имя политики, доступное в соответствии со службами AWS. Вы можете выбрать политику здесь —
Например, если вы хотите, чтобы разрешение AWS Lambda работало с S3 и DynamoDB, вам нужно выбрать политику. В поле поиска введите сервис AWS и установите флажок. Вы можете выбрать несколько политик, а затем нажать Далее: Обзор .
Также возможно создать собственную политику. Например, есть таблица DynamodB, и вам нужно дать разрешение только для этой таблицы, в таких случаях вы можете создать политику.
Нажмите кнопку Создать политику , как показано на экране выше. Ниже приведены подробности, отображаемые на экране.
Выберите Сервис, для которого вы создаете политику. Позже он будет отображать данные для действий, ресурсов и условий запроса .
Теперь мы должны выбрать услугу. Давайте выберем AWS Dynamodb из поиска. Действия имеет следующие детали —
Теперь введите уровень доступа, который вы хотите дать DynamoDB. Затем ресурсы будут отображать следующие детали —
Теперь выберите тип ресурса таблицы. Вы можете увидеть следующий вывод —
Для разрешения на стол, вам нужно добавить ARN . ARN — это детали, уникальные для таблицы, созданной в AWS DynamoDB. Вы получите подробную информацию, когда таблица будет создана в DynamodB.
Если вы нажмете Добавить ARN, и он покажет следующие детали —
Теперь, если вы введете ARN и регион, будет заполнено имя учетной записи и таблицы . Вы должны нажать кнопку Добавить , чтобы добавить политику. Точно так же вы можете создавать политики для других служб.
Здесь мы выбрали две политики AmazonS3FullAccess и AmazonDynamoDBFullACcess . Мы предоставили полный доступ к S3 и DynamoDB в этой роли. Тем не менее, рекомендуется разрешить только необходимые корзины и таблицы.
Вы можете выполнить действия, описанные ранее, для создания политик с использованием ARN .
Шаг 1
Нажмите кнопку Создать роль , чтобы создать роль. Все созданные роли отображаются как показано —
Шаг 2
Обратите внимание, что вы можете выбрать нужную вам роль, если вам понадобятся какие-либо изменения для созданной роли. Если мы выберем « Автор с нуля» , вам нужно будет ввести Имя, Время выполнения и Роль .
Шаг 3
Вы можете наблюдать следующие детали в выпадающем меню Runtime —
Шаг 4
Вы можете выбрать время выполнения по вашему выбору и продолжить, как показано.
В раскрывающемся списке ролей доступны следующие параметры
-
Выберите существующую роль — при этом отобразятся все роли, созданные в ролях IAM.
-
Создать новую роль из шаблона (ов) — это позволит вам создать роль и отобразит разрешение на выбор для этой роли. Посмотрите на скриншот для лучшего понимания.
-
Создать пользовательскую роль — это позволяет пользователю создавать политики, как мы обсуждали ранее.
Выберите существующую роль — при этом отобразятся все роли, созданные в ролях IAM.
Создать новую роль из шаблона (ов) — это позволит вам создать роль и отобразит разрешение на выбор для этой роли. Посмотрите на скриншот для лучшего понимания.
Создать пользовательскую роль — это позволяет пользователю создавать политики, как мы обсуждали ранее.
Шаг 5
Выберите время выполнения, роль и добавьте функцию. Нажмите на кнопку Создать функцию , чтобы создать функцию лямбда. Следующий отображаемый экран выглядит следующим образом —
Части AWS лямбда-функции
Функция AWS Lambda состоит из двух частей: настройка и мониторинг . Давайте обсудим каждый подробно.
конфигурация
Следующие функции включены в конфигурацию.
Добавить триггеры
Триггеры, необходимые для добавления в функцию AWS Lambda, отображаются следующим образом:
Обратите внимание, что когда мы выбираем триггер, нам нужно добавить детали конфигурации для этого триггера. Например, для триггера S3 нам нужно выбрать имя сегмента; для триггера Dynamodb нам нужно выбрать имя таблицы.
пример
Давайте посмотрим пример деталей конфигурации для триггера S3 —
Теперь добавьте детали конфигурации для добавленного триггера S3 —
Здесь вам нужно выбрать имя сегмента, тип события, для которого вы хотите активировать лямбда, префикс и шаблон фильтра, если он есть, и добавить триггер.
Добавление кода в лямбду
Теперь нам следует сосредоточиться на написании лямбда-кода. Чтобы добавить код в AWS лямбда, есть три варианта —
- Использование встроенного редактора
- Использование файла .zip
- Загрузить файл из Amazon S3
Это показано на скриншоте, приведенном ниже —
Давайте обсудим каждый из них подробно.
Использование встроенного редактора
Встроенный редактор кода, в котором вы можете написать свой код, выглядит следующим образом:
Вы можете написать свой код, выбрав нужный язык. Вы можете выбрать время выполнения снова здесь.
Посмотрите на следующий скриншот для лучшего понимания —
Код должен быть написан в index.js.Handler . Детали будут отличаться в зависимости от времени выполнения. Для nodejs это функция filename.export, которая сейчас является обработчиком index.lambda .
Загрузить файл .ZIP
Сначала вы можете написать код, сжать его и загрузить файл ZIP, выбрав Загрузить файл .ZIP .
Загрузить файл из Amazon S3
Вы можете загрузить файл в корзину S3 и выбрать опцию Загрузить файл из Amazon S3 .
Обратите внимание, что для .ZIP и S3 невозможно будет изменить время выполнения.
Переменные среды
Они берут пары ключ-значение и делятся ими с лямбда-кодом AWS. Мы можем использовать переменные окружения в AWS Lambda для хранения сведений о соединении с базой данных, сведений о файлах, как для хранения выходных данных, сведений о файле журнала и т. Д.
Теги
Они представляют собой пары ключ-значение, добавленные в AWS Lambda для лучшей организации функции при использовании в разных регионах. Для простого варианта использования это не требуется. Когда создано много функций Lambda, тегирование помогает в фильтрации и управлении функциями Lambda.
Роль исполнения
Здесь вы можете изменить роль еще раз, если не все сделано правильно в начале создания лямбда-функции. Вы можете обновить или создать новую роль здесь. Он предоставляет те же параметры, которые были показаны в начале создания лямбда-функции.
Базовые настройки
Здесь вам нужно ввести краткое описание того, что делает ваша лямбда-функция. Выберите память и время ожидания, которые требуются для лямбда-функции.
сеть
Это позволяет вам выбрать VPC, который позволит вам получить доступ к функции Lambda из VPC. По умолчанию VPC не выбран.
Отладка и обработка ошибок
Для отладки и обработки ошибок вы можете выбрать сервис AWS для отправки подробностей. Доступны следующие варианты: Нет, SNS и SQS .
совпадение
Это позволяет вам выделить определенный предел одновременных выполнений, разрешенных для этой функции.
Аудит и соответствие
Он содержит журналы, которые управляются с помощью AWS CloudTrail.
После этого вам нужно сохранить изменения, используя кнопку Сохранить, как показано здесь —
Теперь, если вы нажмете кнопку « Тест» , будет запрошено тестовое событие. Вы можете передать пример тестового события следующим образом:
Созданное тестовое событие выглядит так:
Теперь сохраните тестовое событие и нажмите кнопку теста, чтобы увидеть выполнение лямбда-функции AWS —
Код для index.js выглядит следующим образом —
exports.lambdahandler = (event, context, callback) => { // TODO implement console.log(event.key1); console.log(event.key2); console.log(event.key3); callback(null, 'Lambda test'); };
Обратите внимание, что функция обратного вызова вызывается в случае ошибки или успеха. В случае успеха вы можете увидеть, как будет отображаться лямбда-тест .
мониторинг
Выберите вкладку мониторинга, чтобы просмотреть подробности выполнения лямбда-функции. Графики показывают детали времени выполнения, ошибок и т. Д.
Вы также можете просматривать журналы в Cloudwatch. Для этого перейдите в сервисы AWS и выберите cloudwatch, как показано на рисунке —
Теперь выберите логи с левой стороны и введите название вашей функции в фильтре —
Построение лямбда-функции
Функция AWS Lambda выполняет код при вызове. В этой главе подробно рассматриваются все эти этапы жизненного цикла лямбда-функции AWS.
Шаги для построения лямбда-функции
Жизненный цикл лямбда-функции включает в себя четыре необходимых шага —
- авторинг
- Развертывание
- мониторинг
- Поиск проблемы
Авторский лямбда-код
Функциональный код AWS Lambda может быть написан на следующих языках:
- NodeJS
- Джава,
- питон
- C #
- Идти.
Мы можем написать код для AWS Lambda с помощью консоли AWS, интерфейса командной строки AWS, из Eclipse IDE, из Visual Studio IDE, безсерверной инфраструктуры и т. Д.
В следующей таблице приведен список языков и различных инструментов и IDE, которые можно использовать для написания функции Lambda.
язык | IDE для авторизации лямбда-кода |
---|---|
NodeJS |
AWS Lambda Console Visual Studio IDE |
Джава | Eclipse IDE |
питон | AWS Lambda Console |
C # |
Visual Studio IDE .NET core |
Идти | AWS Lambda Console |
AWS Lambda Console
Visual Studio IDE
Visual Studio IDE
.NET core
Развертывание лямбда-кода
Как только вы определите язык, на котором вы хотите написать функцию Lambda, есть два способа развернуть код:
- Напишите прямо код в консоли AWS
- Zip или jar файлы со всеми файлами и зависимостями
Тем не менее, помните, что необходимо дать соответствующее разрешение для zip-файла.
Тестирование лямбда-кода
Лямбда-код можно протестировать на события внутри консоли AWS Lambda. Кроме того, можно протестировать функцию Lambda из клиентских и серверных приложений AWS. Консоль AWS также содержит данные о событиях, которые можно использовать в качестве примеров событий при тестировании лямбда-функции AWS.
Контроль лямбда-функции
Мониторинг функции лямбда может быть выполнен с помощью AWS CloudWatch. Мы можем добавлять необходимые сообщения журнала на выбранных нами языках и видеть то же самое в AWS CloudWatch.
Чтобы начать писать лямбда-функцию, нужно следовать шаблону. Ниже приведены основные основные принципы, которым необходимо следовать при написании лямбда-функции:
укротитель
Обработчик — это имя лямбда-функции AWS, с которой начинается выполнение. Он появляется в консоли AWS, как показано ниже —
Обратите внимание, что здесь мы изменили обработчик по умолчанию на другое имя и обновили его в обработчике —
Обратите внимание, что способ вызова обработчика отличается от языков, выбранных в качестве среды выполнения.
Параметры передаются обработчику
Если вы наблюдаете функцию-обработчик, переданные параметры — это событие, контекст и функция обратного вызова, как показано ниже —
Параметр события содержит все детали для используемого триггера.
Параметр context в основном заботится о деталях времени выполнения для выполнения функции Lambda. Мы можем взаимодействовать с лямбда-функцией, используя контекстный параметр. Он содержит такие данные, как время, оставшееся до завершения функции AWS Lambda, т. Е. Время ожидания, указанное при создании функции Lambda, имя функции Lambda, имя группы cloudwatch, сведения о arn и т. Д.
пример
Давайте разберемся в деталях, полученных из объекта контекста AWS Lambda, с помощью примера —
exports.lambdahandler = (event, context, callback) => { // TODO implement console.log("context object details"); console.log(JSON.stringify(context)); callback(null, 'Lambda test'); };
Когда вы выполните лямбда-функцию, показанную выше, вы увидите следующий вывод:
Выход
Подробности контекста приведены ниже:
{ "callbackWaitsForEmptyEventLoop":true,"logGroupName":"/aws/lambda/myfirstlambdafunction", "logStreamName":"2018/05/20/[$LATEST]04f17ee4ff7048d5bb1fedffaa807c71","functionName": "myfirstlambdafunction","memoryLimitInMB":"128","functionVersion":"$LATEST","invokeid": "c931e21c-5bf3-11e8-acfe-47fdbb39eee9","awsRequestId":"c931e21c-5bf3-11e8-acfe-47fdbb39eee9", "invokedFunctionArn":"arn:aws:lambda:us-east-1:625297745038:function:myfirstlambdafunction" }
Обратите внимание, что в нем есть такие детали, как functionName, memorylimit, requestId и т. Д.
логирование
Журналы, добавленные в функцию Lambda, отображаются в AWS CloudWatch при выполнении функции AWS. Синтаксис журналов зависит от выбранного языка. Например, в nodejs это console.log.
Это вывод, который вы можете увидеть в AWSCloudWatch —
Обработка ошибок
Лямбда-функция AWS предоставляет функцию обратного вызова, которая используется для уведомления лямбда-функции о том, что произошла ошибка или произошел успех. Обратите внимание, что здесь мы использовали nodejs в качестве среды выполнения. Обработка ошибок будет отличаться в зависимости от выбранного языка.
Обратите внимание на приведенный здесь пример для лучшего понимания —
exports.lambdahandler = (event, context, callback) => { // TODO implement var error = new Error("There is error in code"); callback(error); };
Выход
Когда вы тестируете лямбда-код, вы можете найти вывод, как показано ниже —
Журнал детали следующим образом —
AWS Lambda — функция в NODEJS
Nodejs — это один из языков, которые поддерживает лямбда-функция AWS. Версия, поддерживаемая с помощью nodejs: v6.10 и v8.10. В этой главе мы подробно узнаем о различных функциях лямбда-функции AWS в NODEJS.
Обработчик в NodeJS
Чтобы написать AWS лямбда-функцию в nodejs, мы должны сначала объявить обработчик. Обработчик в nodejs — это имя файла и имя функции экспорта. Например, имя файла — index.js, а имя функции экспорта — лямбда-обработчик , поэтому соответствующий ему обработчик — index.lambdahandler.
Обратите внимание на пример обработчика, показанный здесь —
exports.lambdahandler = function(event, context, callback) { //code goes here}
Params to Handler
Обработчик является основным ядром для построения лямбда-функции. Обработчик принимает три параметра: событие, контекст и обратный вызов .
Параметр события
В нем есть все подробности сработавшего события. Например, если мы используем лямбда-функцию для запуска на S3, событие будет иметь подробную информацию об объекте S3.
Параметр контекста
Он содержит детали контекста, такие как свойства и детали конфигурации функции Lambda.
Функция обратного вызова
Это помогает в предоставлении деталей обратно звонящему. Структура обратного вызова выглядит следующим образом —
callback(error, result);
Параметры функции обратного вызова описаны ниже:
Ошибка — это будет иметь подробную информацию, если какая-либо ошибка произошла во время выполнения лямбда-функции. Если лямбда-функция завершается успешно, в качестве первого параметра функции обратного вызова можно передать значение null .
Результат — это даст подробную информацию об успешном выполнении лямбда-функции. Если возникает ошибка, результат param игнорируется.
Примечание. В AWS Lambda не обязательно использовать функцию обратного вызова. Incase, если нет функции обратного вызова, обработчик вернет ее как ноль.
Действительные подписи обратного вызова приведены ниже —
callback(); // It will return success, but no indication to the caller callback(null); // It will return success, but no indication to the caller callback(null, "success"); // It will return the success indication to the caller callback(error); // It will return the error indication to the caller
Всякий раз, когда выполняется AWS Lambda, детали обратного вызова, такие как ошибка или успех, регистрируются в AWS CloudWatch вместе с консольными сообщениями, если таковые имеются.
Работа с AWS Lambda в Nodejs8.10
Давайте разберемся, как работать с AWS Lambda в nodejs8.10, и вызвать функцию синхронно и асинхронно.
Вызов лямбда-функции в режиме синхронизации
Следующий пример дает вам представление о том, как вызывать лямбда-функцию синхронно.
exports.handler = function(event, context, callback) { let arrItems = [4,5,6,8,9,10,35,70,80,31]; function countevennumbers (items) { return new Promise(resolve => { setTimeout(() => { let a = 0; for (var i in items) { if (items[i] % 2 == 0) { a++; } } resolve(a); },2000); }); } let evennumber = countevennumbers(arrItems); callback(null,'even numbers equals ='+evennumber); };
После тестирования этого кода в консоли AWS вы можете наблюдать следующий вывод:
Обратите внимание, что вывод из приведенного выше кода является объектом обещания. Он не дает счетчик, поскольку счетчик увеличивается внутри setTimeout, а вызов функции не ожидает выполнения внутри setTimeout и возвращает объект обещания.
Если бы у нас была функция async / await в функции-обработчике, мы получим точный результат от лямбда-функции
Вызов обработчика в асинхронном режиме
Следующий пример дает вам представление о том, как вызывать лямбда-функцию асинхронным способом.
exports.handler = async function(event, context, callback) { let arrItems = [4,5,6,8,9,10,35,70,80,31]; function countevennumbers (items) { return new Promise(resolve => { setTimeout(() => { let a = 0; for (var i in items) { if (items[i] % 2 == 0) { a++; } } resolve(a); }, 2000); }); } let evennumber = await countevennumbers(arrItems); callback(null,'even numbers equals ='+evennumber); };
Мы добавили async и ожидаем в приведенном выше коде. Когда мы используем await рядом с вызовом функции, выполнение приостанавливается, пока не будет выполнено обещание внутри функции. Обратите внимание, что ожидание действительно только для асинхронных функций.
После тестирования этого кода в консоли AWS вы можете наблюдать следующий вывод:
ContextDetails в NodeJS
Объект контекста предоставляет такие детали, как имя лямбда-функции, оставшееся время в миллисекундах, идентификатор запроса, имя группы в облачном хранилище, сведения о тайм-ауте и т. Д.
В следующих таблицах показан список методов и атрибутов, доступных с контекстным объектом —
Метод доступен для объекта контекста
Sr.No | Название и описание метода |
---|---|
1 |
getRemainingTimeInMillis () Этот метод дает оставшееся время в миллисекундах, пока функция Lambda не завершит функцию. |
getRemainingTimeInMillis ()
Этот метод дает оставшееся время в миллисекундах, пока функция Lambda не завершит функцию.
Атрибуты, доступные для объекта контекста
Sr.No | Название атрибута и описание |
---|---|
1 |
FunctionName Это дает имя лямбда-функции AWS |
2 |
functionVersion Это дает версию AWS Lambda, выполняющую функцию |
3 |
nvokedFunctionArn Это даст ARN детали. |
4 |
memoryLimitInMB Это показывает ограничение памяти, добавленное при создании лямбда-функции |
5 |
awsRequestId Это дает идентификатор запроса AWS. |
6 |
logGroupName Это даст название имени группы CloudWatch |
7 |
logStreamName Это даст имя имени потока журнала cloudwatch, в котором записываются журналы. |
8 |
идентичность Это даст подробную информацию о Amazon Cognito провайдера идентификации при использовании с AWS Mobile SDK. Подробности приведены ниже:
|
9 |
clientContext Это будет подробная информация о клиентском приложении при использовании с AWS Mobile SDK. Детали приведены ниже:
|
FunctionName
Это дает имя лямбда-функции AWS
functionVersion
Это дает версию AWS Lambda, выполняющую функцию
nvokedFunctionArn
Это даст ARN детали.
memoryLimitInMB
Это показывает ограничение памяти, добавленное при создании лямбда-функции
awsRequestId
Это дает идентификатор запроса AWS.
logGroupName
Это даст название имени группы CloudWatch
logStreamName
Это даст имя имени потока журнала cloudwatch, в котором записываются журналы.
идентичность
Это даст подробную информацию о Amazon Cognito провайдера идентификации при использовании с AWS Mobile SDK.
Подробности приведены ниже:
clientContext
Это будет подробная информация о клиентском приложении при использовании с AWS Mobile SDK. Детали приведены ниже:
Посмотрите на следующий пример, чтобы получить лучшее представление об объекте контекста —
exports.handler = (event, context, callback) => { // TODO implement console.log('Remaining time =>', context.getRemainingTimeInMillis()); console.log('functionName =>', context.functionName); console.log('AWSrequestID =>', context.awsRequestId); console.log('logGroupName =>', context.log_group_name); console.log('logStreamName =>', context.log_stream_name); console.log('clientContext =>', context.clientContext); callback(null, 'Name of aws Lambda is=>'+context.functionName); };
После тестирования этого кода в консоли AWS вы можете наблюдать следующий вывод:
После тестирования этого кода в консоли AWS вы можете наблюдать следующий вывод журнала:
Вход в NodeJS
Мы можем использовать console.log для входа в NodeJS. Детали журнала можно получить из сервиса CloudWatch для функции Lambda.
Обратите внимание на следующий пример для лучшего понимания —
exports.handler = (event, context, callback) => { // TODO implement console.log('Logging for AWS Lamnda in NodeJS'); callback(null, 'Name of aws Lambda is=>'+context.functionName); };
После тестирования этого кода в консоли AWS вы можете наблюдать следующий вывод:
Вы можете увидеть следующий скриншот из CloudWatch —
Обработка ошибок в NodeJS
Давайте разберемся, как делается уведомление об ошибке в NodeJS. Соблюдайте следующий код —
exports.handler = function(event, context, callback) { // This Source code only throws error. var error = new Error("something is wrong"); callback(error); };
Вы можете наблюдать следующее в выводе журнала:
Детали ошибки приведены в обратном вызове следующим образом:
{ "errorMessage": "something is wrong", "errorType": "Error", "stackTrace": [ "exports.handler (/var/task/index.js:2:17)" ] }
AWS Lambda — функция в Java
В этой главе мы подробно разберемся, как подробно создать простую лямбда-функцию AWS в Java.
Создание JAR-файла в Eclipse
Прежде чем приступить к созданию лямбда-функции в AWS, нам потребуется поддержка инструментария AWS для Eclipse. Любое руководство по его установке вы можете найти в главе « Настройка среды» данного руководства.
Как только вы закончите установку, следуйте инструкциям, приведенным здесь —
Шаг 1
Откройте Eclipse IDE и создайте новый проект с помощью AWS Lambda Java Project . Посмотрите на скриншот, приведенный ниже для лучшего понимания —
Шаг 2
Как только вы выберете Next , он перенаправит вас на экран, показанный ниже —
Шаг 3
Теперь код по умолчанию создается для пользовательского типа ввода. Как только вы нажмете кнопку Готово , проект будет создан, как показано ниже —
Шаг 4
Теперь щелкните правой кнопкой мыши свой проект и экспортируйте его. Выберите файл Java / JAR в мастере экспорта и нажмите « Далее» .
Шаг 5
Теперь, если вы нажмете « Далее» , вам будет предложено сохранить файл в папке назначения, который будет запрошен при нажатии «Далее».
После сохранения файла вернитесь в консоль AWS и создайте функцию AWS Lambda для Java.
Шаг 6
Теперь загрузите файл .jar, который мы создали с помощью кнопки « Загрузить» , как показано на скриншоте ниже.
Детали обработчика для Java
Обработчик — это имя пакета и имя класса . Посмотрите на следующий пример, чтобы понять обработчик в деталях —
пример
package com.amazonaws.lambda.demo; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class LambdaFunctionHandler implements RequestHandler
Обратите внимание, что из приведенного выше кода обработчик будет com.amazonaws.lambda.demo.LambdaFunctionHandler
Теперь давайте проверим изменения и посмотрим на результат —
Контекстный объект в Java
Взаимодействие с AWS Lambda выполняется с использованием контекста. Он предоставляет следующие методы для использования внутри Java —
Sr.No | Контекстные методы и описание |
---|---|
1 |
getMemoryLimitInMB () это даст предел памяти, который вы указали при создании лямбда-функции. |
2 |
getFunctionName () это даст имя лямбда-функции. |
3 |
getFunctionVersion () это даст версию работающей лямбда-функции. |
4 |
getInvokedFunctionArn () это даст ARN, используемый для вызова функции. |
5 |
getAwsRequestId () это даст идентификатор запроса aws. Этот идентификатор создается для лямбда-функции и является уникальным. Идентификатор можно использовать с поддержкой aws, если у вас возникнут какие-либо проблемы. |
6 |
getLogGroupName () это даст имя группы aws cloudwatch, связанной с созданной лямбда-функцией aws. Будет нулевым, если у пользователя iam нет прав на ведение журнала в облаке. |
7 |
getClientContext () это даст подробную информацию о приложении и устройстве при использовании с AWS Mobile SDK. Он предоставит такие данные, как имя и код версии, идентификатор клиента, заголовок, имя пакета приложения. Это может быть ноль. |
8 |
getIdentity () это даст подробную информацию о личности Amazon Cognito при использовании с AWS Mobile SDK. Это может быть ноль. |
9 |
getRemainingTimeInMillis () это даст оставшееся время выполнения в миллисекундах, когда функция будет завершена после указанного времени ожидания. |
10 |
getLogger () это даст лямбда-логгер, связанный с объектом контекста. |
getMemoryLimitInMB ()
это даст предел памяти, который вы указали при создании лямбда-функции.
getFunctionName ()
это даст имя лямбда-функции.
getFunctionVersion ()
это даст версию работающей лямбда-функции.
getInvokedFunctionArn ()
это даст ARN, используемый для вызова функции.
getAwsRequestId ()
это даст идентификатор запроса aws. Этот идентификатор создается для лямбда-функции и является уникальным. Идентификатор можно использовать с поддержкой aws, если у вас возникнут какие-либо проблемы.
getLogGroupName ()
это даст имя группы aws cloudwatch, связанной с созданной лямбда-функцией aws. Будет нулевым, если у пользователя iam нет прав на ведение журнала в облаке.
getClientContext ()
это даст подробную информацию о приложении и устройстве при использовании с AWS Mobile SDK. Он предоставит такие данные, как имя и код версии, идентификатор клиента, заголовок, имя пакета приложения. Это может быть ноль.
getIdentity ()
это даст подробную информацию о личности Amazon Cognito при использовании с AWS Mobile SDK. Это может быть ноль.
getRemainingTimeInMillis ()
это даст оставшееся время выполнения в миллисекундах, когда функция будет завершена после указанного времени ожидания.
getLogger ()
это даст лямбда-логгер, связанный с объектом контекста.
Теперь давайте обновим приведенный выше код и проследим за выводом некоторых методов, перечисленных выше. Обратите внимание на пример кода, приведенный ниже для лучшего понимания —
package com.amazonaws.lambda.demo; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class LambdaFunctionHandler implements RequestHandler<Object, String> { @Override public String handleRequest(Object input, Context context) { context.getLogger().log("Input: " + input); System.out.println("AWS Lambda function name: " + context.getFunctionName()); System.out.println("Memory Allocated: " + context.getMemoryLimitInMB()); System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()); System.out.println("Cloudwatch group name " + context.getLogGroupName()); System.out.println("AWS Lambda Request Id " + context.getAwsRequestId()); // TODO: implement your handler return "Hello from Lambda!"; } }
Как только вы запустите приведенный выше код, вы можете найти вывод, как показано ниже —
Журналы для контекста
Вы можете наблюдать следующий вывод, когда просматриваете вывод журнала:
Объем памяти, выделенный для функции Lambda, составляет 512 МБ. Выделенное время составляет 25 секунд. Оставшееся время, как показано выше, составляет 24961, что составляет миллисекунды. Таким образом, 25000 — 24961, что равно 39 миллисекундам, используется для выполнения лямбда-функции. Обратите внимание, что имя группы Cloudwatch и идентификатор запроса также отображаются, как показано выше.
Обратите внимание, что мы использовали следующую команду для печати журналов в Java —
System.out.println (“log message”)
То же самое доступно в CloudWatch. Для этого перейдите в сервисы AWS, выберите CloudWatchservices и нажмите Журналы .
Теперь, если вы выберете лямбда-функцию, она отобразит дату логов, как показано ниже —
Вход в Java
Вы также можете использовать Lambdalogger в Java для регистрации данных. Обратите внимание на следующий пример, который показывает то же самое —
пример
package com.amazonaws.lambda.demo; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.LambdaLogger; public class LambdaFunctionHandler implements RequestHandler<Object, String> { @Override public String handleRequest(Object input, Context context) { LambdaLogger logger = context.getLogger(); logger.log("Input: " + input); logger.log("AWS Lambda function name: " + context.getFunctionName()+"\n"); logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n"); logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n"); logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n"); logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n"); // TODO: implement your handler return "Hello from Lambda!"; } }
Приведенный выше код даст вам следующий вывод —
Вывод в CloudWatch будет таким, как показано ниже —
Обработка ошибок в Java для лямбда-функции
В этом разделе объясняется, как обрабатывать ошибки в Java для лямбда-функции. Обратите внимание на следующий код, который показывает то же самое —
package com.amazonaws.lambda.errorhandling; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class LambdaFunctionHandler implements RequestHandler<Object, String> { @Override public String handleRequest(Object input, Context context) { throw new RuntimeException("Error from aws lambda"); } }
Обратите внимание, что сведения об ошибке отображаются в формате json с ошибкой ErrorMessage от AWS Lambda . Кроме того, ErrorType и stackTrace дают более подробную информацию об ошибке.
Вывод и соответствующий вывод лога кода, приведенного выше, будут такими, как показано на следующих скриншотах, приведенных ниже —
AWS Lambda — функция в Python
В этой главе мы создадим простую лямбда-функцию AWS в Python и разберемся с ее рабочими концепциями, следуя подробностям.
Прежде чем приступить к работе по созданию функции Lambda в AWS, нам потребуется поддержка инструментария AWS для Python. Для этого выполните шаги, приведенные ниже, и просмотрите соответствующие скриншоты, которые прилагаются —
Шаг 1
Войдите в консоль AWS, создайте функцию Lambda и выберите язык Python.
Шаг 2
Теперь нажмите кнопку Создать функцию и введите сведения для создания простой лямбда-AWS в Python. Этот код возвращает сообщение Hello от Lambda с использованием Python и выглядит так, как показано здесь —
Шаг 3
Теперь сохраните изменения и протестируйте код, чтобы увидеть результат. При тестировании в консоли AWS с помощью кнопки тестирования в пользовательском интерфейсе вы должны увидеть следующие выходные данные и журналы.
Шаг 4
Теперь вы можете написать код внутри любого редактора или IDE для Python. Здесь мы используем визуальный студийный код для написания кода. Позже вам следует заархивировать файл и загрузить его в консоль AWS.
Здесь мы заархивировали код и используем его консоль AWS.
Шаг 5
Теперь выберите вариант « Загрузить файл .ZIP», как показано ниже —
Детали обработчика для Python
Обратите внимание, что обработчик должен быть именем файла, за которым следует имя функции. В приведенном выше случае имя нашего файла — hellopython.py, а имя функции — my_handler; поэтому обработчик будет hellopython.my_handler .
После завершения загрузки и сохранения изменений на самом деле отображаются подробные сведения о zip-файле в онлайн-редакторе в консоли AWS Lambda. Теперь давайте проверим код, чтобы увидеть вывод и логи.
Теперь давайте разберемся в деталях функции Lambda, используя следующий пример кода:
def my_handler(event, context): return "aws lambda in python using zip file"
В приведенном выше коде имя функции my_handler имеет 2 параметра: событие и контекст.
Контекстный объект в Python
Объект контекста предоставляет такие детали, как имя лямбда-функции, оставшееся время в миллисекундах, идентификатор запроса, имя группы наблюдения за облаком, сведения о тайм-ауте и т. Д.
Методы и атрибуты, доступные для объекта контекста, показаны в таблицах, приведенных ниже —
Sr.No | Название и описание метода |
---|---|
1 |
get_remaining_time_in_millis () Этот метод дает оставшееся время в миллисекундах, пока лямбда-функция не завершит функцию |
get_remaining_time_in_millis ()
Этот метод дает оставшееся время в миллисекундах, пока лямбда-функция не завершит функцию
Sr.No | Атрибут и описание |
---|---|
1 |
function_name Это дает имя лямбда-функции aws |
2 |
function_version Это дает версию выполнения лямбда-функции aws |
3 |
invoked_function_arn Это даст ARN детали. |
4 |
memory_limit_in_mb Это показывает ограничение памяти, добавленное при создании лямбда-функции |
5 |
aws_request_id Это дает идентификатор запроса aws. |
6 |
og_group_name Это даст название имени группы CloudWatch |
7 |
log_stream_name Это даст имя имени потока журнала cloudwatch, в котором записываются журналы. |
8 |
идентичность Это даст подробную информацию о Amazon Cognito провайдера идентификации при использовании с AWS Mobile SDK. Подробности приведены ниже:
|
9 |
client_context Это будет подробная информация о клиентском приложении при использовании с AWS Mobile SDK. Детали приведены ниже:
|
function_name
Это дает имя лямбда-функции aws
function_version
Это дает версию выполнения лямбда-функции aws
invoked_function_arn
Это даст ARN детали.
memory_limit_in_mb
Это показывает ограничение памяти, добавленное при создании лямбда-функции
aws_request_id
Это дает идентификатор запроса aws.
og_group_name
Это даст название имени группы CloudWatch
log_stream_name
Это даст имя имени потока журнала cloudwatch, в котором записываются журналы.
идентичность
Это даст подробную информацию о Amazon Cognito провайдера идентификации при использовании с AWS Mobile SDK. Подробности приведены ниже:
client_context
Это будет подробная информация о клиентском приложении при использовании с AWS Mobile SDK. Детали приведены ниже:
Давайте посмотрим на рабочий пример в Python, который выводит детали контекста. Соблюдайте код, указанный ниже —
def my_handler(event, context): print("Log stream name:", context.log_stream_name) print("Log group name:", context.log_group_name) print("Request ID:",context.aws_request_id) print("Mem. limits(MB):", context.memory_limit_in_mb) print("Time remaining (MS):", context.get_remaining_time_in_millis()) return "aws lambda in python using zip file"
Соответствующий вывод кода, показанного выше, приведен ниже —
Ведение журнала с использованием Python
Для регистрации информации с помощью Python мы можем использовать функцию печати или регистрации. Давайте используем приведенный выше пример контекста и проверим inCloudWatch, чтобы увидеть, распечатаны ли журналы. Соблюдайте следующий код —
def my_handler(event, context): print("Log stream name:", context.log_stream_name) print("Log group name:", context.log_group_name) print("Request ID:",context.aws_request_id) print("Mem. limits(MB):", context.memory_limit_in_mb) print("Time remaining (MS):", context.get_remaining_time_in_millis()) return "aws lambda in python using zip file"
Вывод этого кода в CloudWatch, как показано ниже —
Обратите внимание на следующий пример, чтобы понять, как использовать регистратор для печати журналов в CloudWatch.
import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def my_handler(event, context): logger.info('Using logger to print messages to cloudwatch logs') return "aws lambda in python using zip file"
Вывод для этого будет таким, как показано на скриншоте ниже:
Обработка ошибок в Python для лямбда-функции
В этом разделе давайте рассмотрим рабочий пример, который показывает, как обрабатывать ошибки в Python. Обратите внимание на фрагмент кода, приведенный здесь —
def error_handler(event, context): raise Exception('Error Occured!')
Отображение журнала, как показано на рисунке здесь —
AWS Lambda — функция в движении
Поддержка Go Language является недавним дополнением к AWS. Для работы с Go необходимо выбрать язык из консоли AWS при создании функции AWS Lambda. В этой главе мы подробно узнаем о лямбда-функции AWS на языке Go.
Установка Go
Для начала нам нужна поддержка Go Language. В этом разделе мы рассмотрим следующие детали, чтобы начать работу с AWS Lambda в Go. Это официальный сайт для загрузки Go: https://golang.org/dl/
Теперь загрузите пакет в соответствии с операционной системой. Следуйте приведенной здесь процедуре, чтобы установить Go в соответствующей операционной системе.
Установка на Windows
Обратите внимание, что для Windows доступна 32-разрядная и 64-разрядная загрузка. Скачайте zip-файл, распакуйте его и сохраните в каталоге по вашему выбору.
Добавьте переменные среды, доступные в ControlPanel —> System —> Advanced system settings.
Теперь нажмите кнопку Переменные среды и добавьте путь к каталогу, как показано здесь —
Вы также можете редактировать системную переменную, как показано здесь —
Как только эти шаги будут выполнены, вы сможете начать работать с Go. Откройте командную строку и проверьте команду Go для версии. Посмотрите на следующий скриншот для того же.
Установка для Linux и Mac OS
Для установки пакетов в Linux и Mac OS следуйте инструкциям, приведенным ниже —
Распакуйте пакеты и сохраните их в каталоге / usr / local / go . Теперь добавьте / usr / local / go / bin в переменную окружения PATH. Это можно сделать с помощью / etc / profile или $ HOME / .profile .
Для этого вы можете использовать следующую команду
export PATH=$PATH:/usr/local/go/bin
Чтобы добавить поддержку AWS для Windows, Linux и Mac, используйте в командной строке git следующее:
go.exe get -u github.com/aws/aws-lambda-go/lambda go.exe get -u github.com/aws/aws-lambda-go/lambdacontext go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
Чтобы скомпилировать код Windows / Linux / Mac, используйте следующие команды —
GOOS=linux GOARCH=amd64 go build -o main main.go %GOPATH%\bin\build-lambda-zip.exe -o main.zip main
AWS лямбда-функция с использованием GO
Программа, возвращаемая в Go, когда build дает исполняемый файл. Ниже приведена простая программа на Go с поддержкой AWS Lambda. Нам нужно импортировать github.com/aws/aws-lambda-go/lambda , так как он обладает функциональностью программирования Lambda. Еще одна важная потребность в AWS Lambda — это обработчик.
Main.go
// main.go package main import ( "github.com/aws/aws-lambda-go/lambda" ) func hello() (string, error) { return "Hello Lambda", nil } func main() { // Make the handler available for Remote Procedure Call by AWS Lambda lambda.Start(hello) }
Обратите внимание, что выполнение программы Go начинается с главного, где находится лямбда. start вызывается с помощью функции-обработчика. Соблюдайте код, показанный ниже —
func main() { // Make the handler available for Remote Procedure Call by AWS Lambda lambda.Start(hello) }
Теперь давайте выполним вышеуказанный файл с помощью команды Go, а затем заархивируем исполняемый файл.
Структура файла, который мы использовали, показана ниже —
С помощью go build он создает исполняемый файл с именем main.exe. Чтобы заархивировать файл и загрузить его в AWS Lambda, вы можете использовать следующую процедуру:
Чтобы скомпилировать код Windows / Linux / Mac, используйте следующие команды —
GOOS=linux GOARCH=amd64 go build -o main main.go %GOPATH%\bin\build-lambda-zip.exe -o main.zip main
Затем войдите в консоль AWS и создайте функцию Lambda, используя Go в качестве среды выполнения —
Как только функция будет создана, загрузите исполняемый zip-файл, созданный выше.
Лямбда-функция обработчик с Go
Обработчик — это то, с чего начинается выполнение программы Go. От основного вызова до lambda.start выполнение вызывается с помощью функции-обработчика. Обратите внимание, что добавляемый обработчик будет основным .
Соблюдайте код здесь для понимания —
func main() { // Make the handler available for Remote Procedure Call by AWS Lambda lambda.Start(hello) }
Следуйте согласно скриншотам, приведенным ниже —
Теперь сохраните функцию и протестируйте ее. Вы можете увидеть результат выполнения, как показано здесь.
Соответствующий вывод журнала будет таким, как показано здесь —
Контекстный объект с Go
AWS Lambda в Go предоставляет следующие глобальные переменные и свойства для контекста.
-
MemoryLimitInMB — ограничение памяти в мегабайтах, настроенное в лямбда-выражении aws.
-
FunctionName — имя лямбда-функции aws.
-
FunctionVersion — версия выполнения лямбда-функции aws.
-
LogStreamName — имя потока журнала облака.
-
LogGroupName — имя группы в облачном хранилище.
MemoryLimitInMB — ограничение памяти в мегабайтах, настроенное в лямбда-выражении aws.
FunctionName — имя лямбда-функции aws.
FunctionVersion — версия выполнения лямбда-функции aws.
LogStreamName — имя потока журнала облака.
LogGroupName — имя группы в облачном хранилище.
Свойства, доступные в контексте, указаны как —
AwsRequestID
Это идентификатор запроса AWS, который вы получаете, когда вызывается лямбда-функция AWS.
ClientContext
Он содержит подробную информацию о клиентском приложении и устройстве при вызове через AWS Mobile SDK. Это может быть ноль. Контекст клиента предоставляет такие данные, как идентификатор клиента, название приложения, имя версии, код версии и имя пакета приложения.
InvokedFunctionArn
ARN вызванной функции. Неквалифицированный ARN выполняет версию $ LATEST, а псевдонимы выполняют версию функции, на которую она указывает.
тождественность
В нем подробно описывается поставщик удостоверений Amazon Cognito при использовании с мобильным SDK AWS.
Изменения, добавленные в main.go для печати деталей контекста —
// main.go package main import ( "context" "log" "github.com/aws/aws-lambda-go/lambda" "github.com/aws/aws-lambda-go/lambdacontext" ) func hello(ctx context.Context) (string, error) { lc, _ := lambdacontext.FromContext(ctx); log.Print(lc); log.Print(lc.AwsRequestID); log.Print(lc.InvokedFunctionArn); return "Hello Lambda", nil } func main() { // Make the handler available for Remote Procedure Call by AWS Lambda lambda.Start(hello) }
Нам нужно импортировать лог и контекст лямбды, чтобы использовать его с Go. Подробности контекста следующие:
func hello(ctx context.Context) (string, error) { lc, _ := lambdacontext.FromContext(ctx); log.Print(lc); log.Print(lc.AwsRequestID); log.Print(lc.InvokedFunctionArn); return "Hello Lambda", nil }
Вы можете наблюдать следующий вывод при тестировании вышеуказанного кода —
Регистрация данных
С Go вы можете регистрировать данные, используя модуль log или fmt, как показано ниже —
// main.go package main import ( "log" "fmt" "github.com/aws/aws-lambda-go/lambda" ) func hello() (string, error) { log.Print("Hello from Lambda Go using log"); fmt.Print("Hello from Lambda Go using fmt"); return "Hello Lambda", nil } func main() { // Make the handler available for Remote Procedure Call by AWS Lambda lambda.Start(hello) }
Выход для того же как показано ниже —
Проверка логов в CloudWatch
Вы также можете увидеть логи в CloudWatch. Для этого перейдите в сервис AWS, выберите cloudwatch и нажмите Журналы с левой стороны. Теперь ищите лямбда-функцию в списке, чтобы увидеть логи —
Ошибки функции
Вы можете создать собственную обработку ошибок в AWS Lambda, используя модуль ошибок, как показано в коде ниже —
// main.go package main import ( "errors" "github.com/aws/aws-lambda-go/lambda" ) func hello() error { return errors.New("There is an error in the code!") } func main() { // Make the handler available for Remote Procedure Call by AWS Lambda lambda.Start(hello) }
Вывод кода, показанного выше, приведен ниже.
AWS Lambda — функция в C #
В этой главе подробно объясняется, как работать с лямбда-функцией AWS в C #. Здесь мы собираемся использовать Visual Studio для написания и развертывания кода в AWS Lambda. Для получения любой информации и помощи относительно установки Visual studio и добавления инструментария AWS в Visual Studio, пожалуйста, обратитесь к главе Введение в этом руководстве. После завершения установки Visual Studio, пожалуйста, следуйте инструкциям ниже. Обратитесь к соответствующим скриншотам для лучшего понимания —
Шаг 1
Откройте Visual Studio и следуйте инструкциям по созданию нового проекта. Нажмите Файл -> Новый -> Проект .
Шаг 2
Теперь отображается следующий экран, в котором вы выбираете AWS Lambda для Visual C # . Выберите AWS Lambda Project (.NET Core) .
При необходимости вы можете изменить имя, оставив здесь имя по умолчанию. Нажмите OK, чтобы продолжить.
На следующем шаге вас попросят выбрать план .
Выберите пустую функцию для этого примера и нажмите Готово . Это создаст новую структуру проекта, как показано ниже —
Теперь выберите Function.cs, который является основным файлом, в котором для AWS Lambda создается обработчик с событием и контекстом.
Отображение файла Functions.cs выглядит следующим образом —
Вы можете использовать приведенную ниже команду для сериализации входных и выходных параметров в функцию AWS Lambda.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
Детали обработчика для C #
Обработчик отображается следующим образом —
public string FunctionHandler(string input, ILambdaContext context) { return input?.ToUpper(); }
Различные компоненты приведенного выше кода объяснены ниже —
FunctionHandler — это отправная точка лямбда-функции C # AWS.
String input — параметры для ввода строки обработчика содержат все данные события, такие как объект S3, сведения о шлюзе API и т. Д.
Контекст ILambdaContext — ILamdaContext — это интерфейс, в котором есть детали контекста. Он содержит такие детали, как имя лямбда-функции, детали памяти, тайм-аут и т. Д.
Лямбда-обработчик может быть вызван синхронно и асинхронно. Если вызывается синхронно, как показано выше, вы можете иметь тип возвращаемого значения. Если async, то возвращаемый тип должен быть void.
Теперь давайте развернем AWS Lambda C # и протестируем то же самое. Щелкните правой кнопкой мыши проект и выберите « Опубликовать в AWS Lambda», как показано ниже.
Введите имя функции и нажмите « Далее» . Следующий отображаемый экран — это подробные сведения о расширенной функции, как показано на рисунке —
Введите имя роли, память и время ожидания . детали Обратите внимание, что здесь мы выбрали существующую роль, созданную и использовавшую память как 128 МБ, а тайм-аут как 10 секунд. После этого нажмите « Загрузить», чтобы опубликовать его на консоли AWS Lambda.
Вы можете увидеть следующий экран после загрузки функции AWS Lambda. Нажмите Invoke, чтобы выполнить созданную функцию AWS Lambda. В настоящее время он показывает ошибку, поскольку требует некоторого ввода в соответствии с написанным кодом.
Теперь давайте введем пример ввода и снова вызовем его. Обратите внимание, что здесь мы ввели некоторый текст в поле ввода, и то же самое при нажатии вызывать отображается в верхнем регистре в разделе ответа. Вывод журнала отображается ниже —
Теперь давайте также проверим консоль AWS, чтобы увидеть, создана ли функция, так как мы развернули функцию из Visual Studio.
Лямбда-функция, созданная выше, — это AWS-лямбда, использующая csharp, и она отображается в консоли AWS, как показано на скриншотах, приведенных ниже.
Подпись обработчика
Обработчик является начальной точкой для выполнения AWS. Имя обработчика должно быть определено как —
ASSEMBLY::TYPE::METHOD
Детали подписи объяснены как ниже —
СБОРКА — это имя сборки .NET для созданного приложения. В основном это имя папки, из которой создается проект.
ТИП — это имя обработчика. Это в основном namespace.classname.
МЕТОД — это имя обработчика функции.
Код для подписи обработчика показан ниже:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Amazon.Lambda.Core; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] namespace AWSLambda3 { public class Function { /// <summary> /// A simple function that takes a string and does a ToUpper /// </summary> /// <param name="input"></param> /// <param name="context"></param> /// <returns></returns> public string FunctionHandler(string input, ILambdaContext context) { return input?.ToUpper(); } } }
Обратите внимание, что здесь сборкой является AWSLamda3 , типом является namespace.classname, которое является AWSLambda3.Function, а Method является FunctionHandler . Таким образом, подпись обработчика является AWSLamda3 :: AWSLambda3.Function :: FunctionHandler
Контекстный объект в C #
Context Object предоставляет полезную информацию о среде выполнения в среде AWS. Свойства, доступные в объекте контекста, показаны в следующей таблице:
Sr.No | Свойства и описание |
---|---|
1 |
MemoryLimitInMB Это даст подробную информацию о памяти, настроенной для функции AWS Lambda. |
2 |
FunctionName Название лямбда-функции AWS |
3 |
FunctionVersion Версия функции AWS Lambda |
4 |
InvokedFunctionArn ARN раньше вызывал эту функцию. |
5 |
AwsRequestId Идентификатор запроса AWS для созданной функции AWS |
6 |
LogStreamName Имя потока журнала Cloudwatch |
7 |
LogGroupName Название группы Cloudwatch |
8 |
ClientContext Информация о клиентском приложении и устройстве при использовании с AWS mobile SDK |
9 |
тождественность Информация об идентичности Amazon cogbnito при использовании с мобильным SDK AWS |
10 |
Оставшееся время Оставшееся время выполнения до завершения функции |
11 |
лесоруб Регистратор, связанный с контекстом |
MemoryLimitInMB
Это даст подробную информацию о памяти, настроенной для функции AWS Lambda.
FunctionName
Название лямбда-функции AWS
FunctionVersion
Версия функции AWS Lambda
InvokedFunctionArn
ARN раньше вызывал эту функцию.
AwsRequestId
Идентификатор запроса AWS для созданной функции AWS
LogStreamName
Имя потока журнала Cloudwatch
LogGroupName
Название группы Cloudwatch
ClientContext
Информация о клиентском приложении и устройстве при использовании с AWS mobile SDK
тождественность
Информация об идентичности Amazon cogbnito при использовании с мобильным SDK AWS
Оставшееся время
Оставшееся время выполнения до завершения функции
лесоруб
Регистратор, связанный с контекстом
пример
В этом разделе мы протестируем некоторые из вышеуказанных свойств в AWS Lambda в C #. Соблюдайте пример кода, приведенный ниже —
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Amazon.Lambda.Core; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] namespace AWSLambda6 { public class Function { /// <summary> /// </summary> /// <param name="input"></param> /// <param name="context"></param> /// <returns></returns> public void FunctionHandler(ILambdaContext context) { LambdaLogger.Log("Function name: " + context.FunctionName+"\n"); context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n"); LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n"); } } }
Соответствующий вывод, который вы можете наблюдать, когда вызываете приведенный выше код на C #, показан ниже:
Соответствующий вывод, который вы можете наблюдать при вызове вышеуказанного кода в Консоли AWS, показан ниже:
Ведение журнала с использованием C #
Для регистрации вы можете использовать две функции —
-
context.Logger.Log
-
LambdaLogger.Log
context.Logger.Log
LambdaLogger.Log
Обратите внимание на следующий пример, показанный здесь —
public void FunctionHandler(ILambdaContext context) { LambdaLogger.Log("Function name: " + context.FunctionName+"\n"); context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n"); LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n"); }
Соответствующий вывод для приведенного выше кода показан здесь —
Вы можете получить журналы из CloudWatch, как показано ниже —
Обработка ошибок в C # для лямбда-функции
В этом разделе обсуждается обработка ошибок в C #. Для обработки ошибок класс Exception должен быть расширен, как показано в примере, показанном ниже:
пример
namespace example { public class AccountAlreadyExistsException : Exception { public AccountAlreadyExistsException(String message) : base(message) { } } } namespace example { public class Handler { public static void CreateAccount() { throw new AccountAlreadyExistsException("Error in AWS Lambda!"); } } }
Соответствующий вывод для кода, приведенного выше, приведен ниже:
{ "errorType": "LambdaException", "errorMessage": "Error in AWS Lambda!" }
AWS Lambda — Настройка лямбда-функции
В предыдущих главах мы узнали, как создать функцию AWS Lambda в консоли AWS. Однако есть и другие параметры для создания лямбда-функции. К ним относятся распределение памяти, время ожидания и т. Д.
В этой главе давайте подробно разберемся со следующими свойствами конфигурации для AWS Lambda.
Выделение памяти
Войдите в консоль AWS и создайте или выберите существующую лямбда-функцию. Нажмите вкладку Конфигурация, чтобы получить подробную информацию о выделенной памяти. Посмотрите на скриншот, показанный ниже —
Обратите внимание, что по умолчанию выделенная память составляет 128 МБ . Если вы хотите увеличить память, вы можете нажать на ползунок.
Память будет увеличена до 64 МБ при перемещении ползунка. Обратите внимание, что максимальный объем доступной памяти составляет 3008 МБ . Посмотрите на скриншот, показанный ниже —
Вы также можете использовать aws cli из командной строки для увеличения лимита памяти. Вам придется отдавать память с шагом 64 МБ.
Теперь давайте увеличим лимит памяти AWS Lambda с именем myfirstlambdafunction .
Детали памяти функции показаны на скриншоте ниже:
Команда, используемая для изменения памяти с помощью aws cli, выглядит следующим образом:
aws lambda update-function-configuration --function-name your function name -- region region where your function resides --memory-size memory amount -- profile admin user
Соответствующий вывод AWS Lambda-функции myfirstlambdafunction в консоли AWS показан здесь. Обратите внимание, что память изменяется с 128 МБ до 256 МБ.
Максимальное время выполнения
Тайм-аут — это время, выделенное лямбда-функции AWS для завершения в случае тайм-аута. Функция AWS Lambda будет работать в течение выделенного времени или завершится, если она превысит заданное время ожидания. Вам необходимо оценить время, необходимое для выполнения функции, и соответственно выбрать время на вкладке Конфигурация в консоли AWS, как показано ниже —
Роль IAM
При создании лямбда-функции AWS необходимо назначить роль или разрешение. Если вам нужна AWS Lambda для S3 или DynamoDB, необходимо назначить разрешение в отношении сервисов Lambda. На основании назначенной роли AWS Lambda определит, какие шаги необходимо предпринять. Например, если вы предоставляете полный доступ к DynamodB, вы можете добавлять, обновлять и удалять строки из таблицы DynamodB.
Имя обработчика
Это начало выполнения функции AWS Lambda. Функция-обработчик имеет подробную информацию о сработавшем событии, объекте контекста и обратном вызове, который должен отправить обратно в случае успеха или ошибки AWS Lambda.
Формат функции-обработчика в nodejs показан здесь —
exports.handler = (event, context, callback) => { callback(null, "hello from lambda"); };
Лямбда-функция с использованием переменных среды
В этом разделе мы создадим простую лямбда-функцию с использованием переменных среды, добавленных в раздел конфигурации. Для этого выполните шаги, указанные ниже, и обратитесь к соответствующим скриншотам —
Шаг 1
Перейдите в консоль AWS и создайте функцию в Lambda, как показано на рисунке.
Шаг 2
Теперь добавьте переменные окружения, как показано на рисунке —
Шаг 3
Теперь давайте возьмем то же самое в лямбда-коде следующим образом:
exports.handler = (event, context, callback) => { var hostName = process.env.host; var userName = process.env.username; callback(null, "Environment Variables =>"+hostName+" and "+userName); };
Шаг 4
Чтобы получить подробности из переменных среды, нам нужно использовать process.env, как показано. Обратите внимание, что этот синтаксис предназначен для среды выполнения NodeJS .
var hostName = process.env.host; var userName = process.env.username;
Шаг 5
Вывод для лямбда-функции при выполнении будет таким, как показано —
Создание и развертывание с помощью консоли AWS
Мы можем создать функцию Lambda и протестировать ее в консоли AWS. Эта глава обсуждает это подробно. Для этого вам нужно будет выполнить шаги, указанные здесь, и посмотреть соответствующие скриншоты, приведенные ниже.
Шаг 1
Войдите в консоль AWS https://aws.amazon.com/console/ . Теперь вы будете перенаправлены на экран, где отображаются сервисы AWS.
Шаг 2
Теперь нажмите на сервис Lambda, как указано выше. Это перенаправит на создание функции, как показано ниже —
Шаг 3
Теперь нажмите « Создать функцию» и введите сведения о функции. Затем вы можете увидеть экран, как показано ниже —
Шаг 4
Вы можете написать свой код, выбрав нужный язык. Код должен быть написан в редакторе, если выбрана опция редактирования кода в строке. Другие доступные варианты следующие:
Шаг 5
После этого вам нужно сохранить изменения, для которых кнопка дается в правом верхнем углу, как показано ниже —
Шаг 6
Теперь нажмите кнопку « Тест» . Это дает все детали выполнения лямбда-функции, как показано ниже —
Шаг 7
Код для index.js выглядит следующим образом —
exports.handler = (event, context, callback) => { // TODO implement callback(null, 'Lambda test'); };
Это вызовет функцию обратного вызова, и результатом может быть ошибка или успех. В случае успеха вы увидите лямбда-тестовое сообщение; если ошибка, то она будет равна нулю.
Шаг 8
Сведения о роли для лямбда-функции являются частью конфигурации и отображаются, как показано ниже:
Шаг 9
Теперь вы можете обновить роль, если требуется, и сохранить функцию Lambda. Затем данные памяти и тайм-аута для лямбда-функции отображаются, как показано ниже —
Шаг 10
Теперь нам нужно добавить триггер к функции Lambda, чтобы она выполнялась при возникновении события. Детали триггера отображаются в начале экрана функции AWS Lambda, как показано ниже —
Из этого вы можете выбрать триггер, который должен запускаться вашей лямбда-функцией. Когда вы выбираете триггер, необходимо добавить детали конфигурации для триггера.
Например, для триггера на S3 необходимо добавить следующие подробности конфигурации:
Шаг 11
Теперь выберите ведро, на которое вы хотите включить курок. Тип события имеет следующие детали —
Шаг 12
Для триггера вы также можете указать префикс типа файлов или шаблон файла, лямбда должна быть триггером. Детали как показано —
Шаг 13
Теперь заполните необходимые данные для триггера и нажмите кнопку « Добавить». Сохраните лямбда-функцию для триггера, который будет добавлен. Сохраняя функцию, развертывает детали, и с этого момента в любое время файлы добавляются в корзину S3, лямбда получит срабатывает.
Посмотрите на следующий снимок экрана, на котором показан триггер S3, добавленный в AWS Lambda.
Шаг 14
Теперь давайте воспользуемся примером события S3 для проверки функции Lambda. Код для того же самого показан здесь —
Amazon S3 Put Пример события
{ "Records": [{ "eventVersion": "2.0", "eventTime": "1970-01-01T00:00:00.000Z", "requestParameters": { "ExampleIPAddress": "127.0.0.1" }, "s3": { "configurationId": "testConfigRule", "object": { "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901", "key": "HappyFace.jpg", "size": 1024 }, "bucket": { "arn": bucketarn, "name": "Examplebucket", "ownerIdentity": { "principalId": "Example" } }, "s3SchemaVersion": "1.0" }, "responseElements": { "x-amz-id-2": "Example123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH", "x-amz-request-id": "Example123456789" }, "awsRegion": "us-east-1", "eventName": "ObjectCreated:Put", "userIdentity": { "principalId": "Example" }, "eventSource": "aws:s3" }] }
Вам нужно будет использовать следующую команду, чтобы получить информацию о файле, загруженном из события S3 put —
event.Records[0].s3.object.key //will display the name of the file
Вы должны будете использовать следующую команду, чтобы получить имя сегмента —
event.Records[0].s3.bucket.name //will give the name of the bucket.
Вам нужно будет использовать следующую команду, чтобы получить EventName —
event.Records[0].eventName // will display the event name
Шаг 15
Теперь давайте обновим лямбда-код AWS, чтобы распечатать детали S3, как показано ниже.
exports.lambdahandler = (event, context, callback) => { callback(null, "Bucket name: "+event.Records[0].s3.bucket.name+" File name:"+event.Records[0].s3.object.key ); };
Шаг 16
Сохраните изменения. Нажмите Test и введите пример события S3 —
Шаг 17
Теперь нажмите Test, и вы увидите результат, как показано на рисунке —
Шаг 18
Чтобы протестировать триггер на S3 с помощью сервиса S3 AWS, загрузите файл в корзину S3: триггер тестовой корзины . Обновите роль, используемую с Lambda для получения политики S3 и SES (для отправки почты) для разрешений. Это обновит лямбда-код AWS для отправки почты, чтобы увидеть работу триггера —
Обновленный лямбда-код AWS выглядит так:
var aws = require('aws-sdk'); var ses = new aws.SES({ region: 'us-east-1' }); exports.lambdahandler = function(event, context, callback) { var eParams = { Destination: { ToAddresses: ["[email protected]"] }, Message: { Body: { Text: { Data: "Bucket name: "+event.Records[0].s3.bucket.name+" File name:"+event.Records[0].s3.object.key } }, Subject: { Data: "S3 and AWS Lambda" } }, Example: "[email protected]" }; console.log('===SENDING EMAIL==='); var email = ses.sendEmail(eParams, function(err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); console.log("EMAIL CODE END"); console.log('EMAIL: ', email); context.succeed(event); callback(null, "email is send"); } }); };
Соответствующий скриншот, как показано здесь —
Шаг 19
Теперь загрузите файл и проверьте почтовый идентификатор, указанный в лямбда-коде AWS.
Создание и развертывание с помощью AWS CLI
AWS CLI — это инструмент командной строки, который помогает работать с сервисами AWS. Мы можем использовать его для создания, обновления, удаления, вызова лямбда-функции aws. В этой главе вы подробно обсудите установку и использование интерфейса командной строки AWS.
Установка AWS CLI
В этом разделе описана установка интерфейса командной строки AWS в различных операционных системах. Следуйте приведенным шагам и соблюдайте соответствующие скриншоты, где бы они ни были.
Для Windows
Проверьте конфигурацию Windows и выберите одну из следующих ссылок для установки AWS CLI MSI.
-
Для Windows 64 бит — AWS CLI MSI для Windows (64 бит)
-
Для Windows 32 бит — AWS CLI MSI установить для Windows (32)
Для Windows 64 бит — AWS CLI MSI для Windows (64 бит)
Для Windows 32 бит — AWS CLI MSI установить для Windows (32)
Выбрав соответствующую ссылку и нажав на нее, вы можете найти окно, как показано здесь —
Затем установите путь для среды в окнах, как показано на скриншотах ниже —
После этого вы можете использовать следующую команду в командной строке, чтобы увидеть, установлена ли aws cli :
aws --version
Он отображает детали версии aws-cli, как показано на следующем скриншоте —
Для Linux / Mac
Для установки на Linux и Mac вам потребуется версия Python 2.6.3 или выше. Затем используйте следующие команды для дальнейших процессов установки —
$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" $ unzip awscli-bundle.zip $ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
Теперь нам нужно настроить параметры AWS. Вы можете использовать следующую команду для этой цели —
aws configure
Для этого требуются такие данные, как —
- Идентификатор ключа доступа AWS
- Секретный ключ доступа AWS
- Название региона по умолчанию
- Вывод по умолчанию из формата
Вы можете получить эти данные с вашей консоли AWS. Перейдите к имени вашей учетной записи в правом верхнем углу, как показано на рисунке —
Теперь нажмите Мои учетные данные безопасности и выберите пользователей слева. Добавить пользователя с подробной информацией, как просили.
Добавьте пользователя и получите ключ доступа и секретный ключ. Чтобы увидеть новый ключ доступа, выберите Показать . Ваши учетные данные будут выглядеть так, как показано ниже —
Идентификатор ключа доступа — AOSAIOSFOCDD7Example
Секретный ключ доступа — aJuirCVtnROUN / K7MDENG / bPxRfiCYExampleKEY
Справочные команды для AWS CLIS
В следующей таблице приведены ссылки на команды, доступные для работы с aws cli .
Название команды aws cli | Справочник по командам |
---|---|
создание-функция | create-function —function-name <value> —runtime <value> —role <value> —handler <value> [—code <value>] [—description <value>] [—timeout < значение>] [—memory-size <значение>] [—environment <значение>] [—kms-key-arn <значение>] [—tags <значение>] [—zip-файл <значение> ] [—cli-input-json <значение>] |
Список-функция | list-functions [—master-region <value>] [—function-version <value>] [—max-items <value>] [—cli-input-json <value>] [—starting- токен <value>] [—page-size <value>] [—generate-cli-skeleton <value>] |
получить-функции | get-function —function-name <value> [—qualifier <value>] [—cli-input-json <value>] [—generate-cli-skeleton <value>] |
получить-функции-конфигурации | get-function-configuration —function-name <значение> [—qualifier <значение>] [—cli-input-json <значение>] [—generate-cli-skeleton <value>] |
получить по счету-настройки | get-account-settings [—cli-input-json <значение>] [—generate-cli-skeleton <значение>] |
обновление-функции-конфигурации | update-function-configuration —function-name <значение> [—role <значение>] [—handler <значение>] [—description <значение>] [—timeout <значение>] [—memory- размер <значение>] [—vpc-config <значение>] [—environment <значение>] [—runtime <значение>] [—dead-letter-config <значение>] [—kms-key- arn <значение>] [—tracing-config <значение>] [—revision-id <значение>] [—cli-input-json <значение>] [—generate-cli-skeleton <значение>] |
обновление-функции-код | обновить код функции — имя-функции <значение> [—zip-файл <значение>] [—s3-bucket <значение>] [—s3-ключ <значение>] [—s3-объект- версия <значение>] [—publish | —no-publish] [—dry-run | —no-dry-run] [—revision-id <value>] [- cli-input-json <value>] [- generate-cli-skeleton <value>] |
удалить функция | delete-function —function-name <value> [—qualifier <value>] [—cli-input-json <value>] [—generate-cli-skeleton <value>] |
Теперь давайте обсудим эти команды одну за другой подробно.
создание-функция
Этот API создаст новую лямбда-функцию. Код должен быть предоставлен в формате zip. Если функция, которая будет создана, уже существует, API потерпит неудачу. Обратите внимание, что имя функции чувствительно к регистру.
Команды включены
Список команд, которые вы можете использовать с функцией create, приведен здесь —
create-function --function-name <value> --runtime <value> --role <value> --handler <value> [--code <value>] [--description <value>] [--timeout <value>] [--memory-size <value>] [--environment <value>] [--kms-key-arn <value>] [--tags <value>] [--zip-file <value>] [--cli-input-json <value>]
Опции включены
Различные варианты, которые вы можете использовать с функциями выше, следующие:
—function-name (string) — принимает имя функции. Имя может содержать 64-битные символы.
—runtime (строка) — здесь вам нужно указать среду выполнения, т.е. выбор языка. Детали времени выполнения приведены ниже:
Варианты доступны | время выполнения |
---|---|
Python v3.6 | python3.6 |
Python v2.7 | python2.7 |
NodeJS v6.10 | nodejs6.10 |
NodeJS v8.10 | nodejs8.10 |
Джава | java8 |
C # 1 | dotnetcore1.0 |
C # 2 | dotnetcore2.0 |
Идти | go1.x |
—role (string) — это будет имя лямбда-политики, т. е. роль, которую должна быть отдана лямбда-функции для доступа к другим сервисам. Это будет иметь разрешение в соответствии с указанной ролью.
—handler (string) — это имя обработчика, с которого начнется выполнение лямбда-кода.
- Для nodejs имя обработчика — это имя модуля, которое мы экспортируем.
- Для Java это имя пакета.classname :: handler или package.classname
- Для python обработчик nameofthefile.
—code (структура) — AWS лямбда-код
—description (строка) — описание лямбда-функции AWS
—timeout (integer) — время ожидания будет иметь время, когда лямбда-функция должна прекратить выполнение. По умолчанию это 3 с.
—memory-size (integer) — это память, предоставляемая лямбда-функции aws. AWS будет распределять объем ресурсов процессора и памяти на основе предоставленной памяти.
—environment (структура) — это объект с деталями окружения, необходимыми в лямбда-функции aws.
e.g : Variables = {Name1 = string, Name2 = string}
—kms-key-arn (string) — это имя ресурса amazon (ARN), используемое для шифрования переменных среды. Если не указано иное, для шифрования будут использоваться настройки по умолчанию.
—zip-file (blob) — путь к zip-файлу, в котором есть детали кода.
—cli-input-json (string) : выполняет сервисную операцию на основе предоставленной строки JSON. Строка JSON соответствует формату, предоставленному —generate-cli-skeleton. Если в командной строке указаны другие аргументы, значения CLI будут переопределять значения, предоставленные JSON.
Теперь давайте создадим простую лямбда-функцию AWS, используя время выполнения в качестве nodejs, и добавим несколько console.logs для печати.
Рассмотрим пример кода для понимания того же самого —
exports.handler = async (event) => { console.log("Using aws cli"); return 'Hello from Lambda from aws cli!' };
Теперь заархивируйте файл и сохраните его как awscli.zip .
Получение АРН
Для роли давайте использовать арн из существующей роли, которую мы создали. Чтобы получить ARN, вы должны будете выполнить шаги, как показано здесь. Соблюдайте соответствующие скриншоты, где бы они ни находились.
Шаг 1
Перейдите в IAM и выберите нужную роль из ролей . Детали ARN для роли отображаются, как показано ниже. Используйте роль ARN с функцией create в aws cli .
Заметьте, что роль arn: arn: aws: iam :: 625297745038: role / lambdaapipolicy
Команда со значениями для create-function выглядит следующим образом:
aws lambda create-function --function-name "awslambdausingcli" --runtime "nodejs8.10" --role "arn:aws:iam::625297745038:role/lambdaapipolicy" --handler "awscli.handler" --timeout 5 --memory-size 256 --zip-file "fileb://awscli.zip"
Теперь, если вы запустите команду в aws cli, вы можете найти вывод, как показано ниже —
В консоли AWS функция Lambda отображается, как показано ниже:
Детали функций, как показано здесь —
Детали конфигурации приведены ниже:
Вы можете проверить функцию и проверить вывод, как показано на рисунке —
Соответствующий вывод журнала показан здесь —
Список-функция
Этот API-интерфейс предоставляет список функций, созданных на данный момент в AWS Lambda.
Команды включены
Ниже приведены команды, связанные с этим API.
list-functions [--master-region <value>] [--function-version <value>] [--max-items <value>] [--cli-input-json <value>]
Опции в списке функций
Ниже приведены различные опции, которые вы можете использовать в этом списке функций api —
—master-region (string) — необязательно. Регион, из которого должны отображаться функции.
—function-version (string) — необязательно. Это даст версию функции.
—max-items (integer) — необязательно. Это даст элементы в соответствии с указанным значением.
—cli-input-json (строка) — необязательно. Будет выполнять операцию на основе предоставленного файла JSON.
Команда со значениями list-functions выглядит следующим образом:
aws lambda list-functions --max-items 3
Команда отображает детали следующим образом —
получить-функции
Этот API-интерфейс предоставит подробную информацию о функциях, а также URL-ссылку, на которую загружен zip-файл с использованием create-function. URL с деталями почтового индекса будет действителен только в течение 10 минут.
Команды включены
Ниже приведены команды, связанные с этим API —
get-function --function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>]
Опции включены
—function-name — имя лямбда-функции AWS. Вы также можете указать имя ресурса Amazon для функции.
—qualifier (string) — Необязательно. Версия функции может быть использована для получения подробной информации о функции.
Команда со значениями для get-function:
aws lambda get-function --function-name awslambdausingcli
Детали отображения команды следующие:
Это дает URL-адрес, на который загружен почтовый индекс. В приведенном выше случае URL —
https://prod-04-2014- tasks.s3.amazonaws.com/snapshots/625297745038/awslambdausingcli-97048f8d-4a08 -4ed9-99d9-acb00d2063d2?versionId=d04HKvPu9S2zz8pzjbW6Rmf5o5fxnc_r&X-Amz-Security -Token=FQoDYXdzEKT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDCpTmGvtwKToPBiWcyK3A96UcJEnwvYDhMbbxu %2Bg2gffK2ocfnlEeiCHak8QqqE1RFpbKrdks9NzxP9gNbagL4M9RValxJ1a9PUY%2FOdAekscRHOiX00MVAxUlI8 2pKryhdOwLJWSj0uRzqvOxCcBwJenHrSNPeG6lMa2ZDo0qZFEUDONSaTg4nuSnJK1f6t3pMAKu4vF9wPvf92G%2BU 60rUxwleggigISmD9l1IlZse3%2BVF1JlNuN%2F5d85v0y2Q%2F%2BO515CybcZpn91sHPYG8JMJ00LsrkQ2Ww4VU 9Zz5c5QYH4JYPj0CyEgSz9b%2FMceMPpOoPUAMjctb%2FEwQqcShZeqAr9%2Fcd2ZI%2BXl2%2Bs4ri0ucgPvQQvs eGIIiZbX3GqdwR2jb1nylrAEIfiuFMoSWfcFYoYtuL0MZnjGR9jy2GNkp6MB%2BlHHr7%2BnuFRUzU26rgDYmdE1w Rb3%2B21Jm49WGDa9opRLvUxFaux57Or70haib2FuKzN6Gf3Vzzk5KPdWsYUpaLyf%2B1ovEytOZhB1JEXuCs%2FG IlOXS88yxT%2BpOKmyxweiezpGgI%2FAkSAQTbSRsYQKIOFyIJNHzplwrJKhy28vy60numIBIo9Zqq2AU%3D &X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20180527T112426Z&X-Amz- SignedHeaders=host&X-Amz-Expires=600&X-Amz- Credential=ASIAICSQHLSBWFP37U4Q%2F20180527%2Fus- east-1%2Fs3%2Faws4_request&X-Amz-Signature= 8b97e7d6d7da13313068e027894d2c875be5e50a0c5a62550f55307985bdc1aa
получить-функции-конфигурации
Это даст подробную информацию о конфигурации функции AWS Lambda.
Ниже приведены команды, используемые вместе с этим API —
get-function-configuration --function-name <value> [--qualifier <value>]
Ниже приведены параметры, используемые с
—function-name (string) — имя лямбда-функции aws. Вы также можете указать имя ресурса Amazon для функции.
—qualifier (string) — Optional.Function версия может быть использована для получения подробной информации о функции.
Команда со значениями для get-function:
aws lambda get-function-configuration --function-name awslambdausingcli
Команда отображает детали следующим образом —
получить по счету-настройки
Этот API дает настройки учетных записей.
Включенные команды
Команда, которую вы можете использовать с этим API —
get-account-settings [--cli-input-json <value>] [--generate-cli-skeleton <value>]
Варианты вовлечены
Вы можете использовать следующие параметры с этим API —
—cli-input-json (string) — выполняет службу на основе предоставленной строки json.
—generate-cli-skeleton (string) — печатает вывод json без отправки запроса API.
Вы можете использовать следующую команду для get-account-settings —
aws lambda get-account-settings
Вы можете увидеть следующий вывод при выполнении команды, приведенной выше —
обновление-функции-конфигурации
Этот API-интерфейс помогает обновить детали конфигурации для созданной функции AWS Lambda. Вы можете изменить память, время ожидания, обработчик, роль, время выполнения, описание и т. Д.
Включенные команды
Ниже приведены команды, используемые в api update-function-configuration —
update-function-configuration --function-name <value> [--role <value>] [--handler <value>] [--description <value>] [--timeout <value>] [--memory-size <value>] [--environment <value>] [--runtime <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>]
Варианты вовлечены
Ниже перечислены параметры, используемые в api update-function-configuration —
—function-name — имя лямбда-функции aws
—role (строка) — необязательно. АРН роли необходимо обновить.
—handler (строка) — необязательно. Детали обработчика лямбда-функции aws.
—description (строка) — необязательно. Описание для функции.
— timeout (целое число) — необязательно. Время, необходимое для прекращения работы лямбда-функции aws.
— размер-памяти (целое число) — необязательно. Это память, предоставляемая лямбда-функции aws. AWS будет распределять объем ресурсов процессора и памяти на основе предоставленной памяти.
— среда (структура) — необязательно. Это объект с деталями окружения, необходимыми в лямбда-функции aws.
e.g: Variables = {Name1 = string, Name2 = string}
—runtime (строка) — здесь вам нужно указать среду выполнения, т.е. выбор языка.
Детали времени выполнения приведены в таблице, приведенной ниже —
Варианты доступны | время выполнения |
---|---|
Python v3.6 | python3.6 |
Python v2.7 | python2.7 |
NodeJS v6.10 | nodejs6.10 |
NodeJS v8.10 | nodejs8.10 |
Джава | java8 |
C # 1 | dotnetcore1.0 |
C # 2 | dotnetcore2.0 |
Идти | go1.x |
—cli-input-json (строка) — необязательно. Это выполнит операцию над API, как указано в предоставленной строке json.
—generate-cli-skeleton (string) — необязательно. Это выведет скелет JSON со всеми деталями без выполнения API. Вывод может быть использован как вход для —cli-input-json.
Теперь давайте изменим память и время ожидания лямбда-функции AWS, которую мы создали ранее. Следуйте инструкциям, приведенным ниже, и обратите внимание на соответствующие скриншоты, прилагаемые для этой цели:
Шаг 1
Память и время ожидания до изменения следующие:
Шаг 2
Теперь, с помощью update-function-configuration , давайте изменим память и время ожидания до 320 МБ, а время ожидания — до 10 с. Для этого используйте следующую команду со значениями —
aws lambda update-function-configuration --function-name “awslambdusingcli” --timeout 10 --memory-size 320
Шаг 3
Затем вы можете увидеть следующий вывод в виде дисплея —
Шаг 4
Отображение в консоли AWS после использования update-function-configuration выглядит следующим образом:
Update-функция-код
Этот API обновит код для существующей лямбда-функции AWS.
Включенные команды
update-function-code --function-name <value> [--zip-file <value>] [--s3-bucket <value>] [--s3-key <value>] [--s3-object-version <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>]
Варианты вовлечены
Ниже приведены параметры, связанные с API-кодом update-function-code.
—function-name (строка) — имя лямбда-функции aws
—zip-файл (blob) — необязательно. Путь к zip-файлу с кодом для обновления.
—s3-ведро (строка) — необязательно. S3 имя контейнера, в который загружен zip-файл с кодом.
—s3-ключ (строка) — необязательно. Имя ключа объекта AWS s3, которое необходимо загрузить.
—s3-object-version (string) — необязательно. Версия объекта AWS s3.
—cli-input-json (строка) — необязательно. Это выполнит операцию над API, как указано в предоставленной строке json.
—generate-cli-skeleton (string) — необязательно. Это выведет скелет JSON со всеми деталями без выполнения API. Вывод может быть использован как вход для —cli-input-json.
Обновленный код как показано ниже —
exports.handler = async (event, context) => { console.log("Using aws cli"); console.log() return 'Hello from Lambda from aws cli!' };
Вы можете использовать следующую команду со значениями для этой цели —
aws lambda update-function-code --function-name "awslambdausingcli" --zip-file "fileb://awscli.zip"
Соответствующий вывод, как показано здесь —
Дисплей с консоли AWS, как показано здесь —
Соответствующий вывод журнала, как показано ниже —
удалить функция
Удалить aws cli api удалит данную функцию.
Команды включены
Подробности команды для того же даны здесь —
delete-function --function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>]
Опции включены
Опции, включенные в этот API, приведены ниже.
—function-name (string) — это будет принимать имя лямбда-функции или арн ля лямбда-функции aws.
—qualifier (string) — это необязательно. Здесь вы можете указать версию aws lambda, которую нужно удалить.
— cli-input-json (string) — выполняет сервисную операцию на основе предоставленной строки JSON. Строка JSON соответствует формату, предоставленному —generate-cli-skeleton. Если в командной строке указаны другие аргументы, значения CLI будут переопределять значения, предоставленные JSON.
—generate-cli-skeleton (string) — выводит скелет json на стандартный вывод без отправки запроса API.
Вы можете использовать следующую команду со значениями для этой цели —
aws lambda delete-function --function-name "lambdatestcli"
Теперь обратите внимание, что функция не будет отображаться в списке функций AWS Lambda.
Создание и развертывание с использованием Serverless Framework
AWS Lambda может быть создан и развернут с использованием бессерверной инфраструктуры. Это позволяет создавать триггеры AWS Lambda, а также развертывать их, создавая необходимые роли. Безсерверный фреймворк позволяет проще обрабатывать большие проекты. Необходимые события и ресурсы записаны в одном месте, и всего несколько команд помогают развернуть все функции на консоли AWS.
В этой главе вы подробно узнаете, как начать работу с AWS-сервером.
Установите Serverless Framework, используя npm install
Для начала вам нужно сначала установить nodejs . Вы можете проверить наличие узлов следующим образом:
Вы должны будете использовать следующую команду для установки без сервера, используя пакет npm —
npm install -g serverless
После завершения npm выполните безсерверную команду, которая показывает список команд, которые будут использоваться для создания и развертывания лямбда-функции AWS. Обратите внимание на скриншоты, приведенные ниже —
Вы также можете использовать sls вместо без сервера. sls — сокращенная команда для без сервера.
Если вам нужна помощь по команде sls, вы можете использовать следующую команду —
sls create --help
Для создания безсерверного фреймворка вы должны выполнить следующие шаги:
Шаг 1
Чтобы начать использовать безсерверный фреймворк, нам нужно добавить учетные данные. Таким образом, вы можете сначала ввести пользователя в консоль AWS следующим образом:
Шаг 2
Нажмите Далее: кнопка « Разрешения» , чтобы добавить разрешения. Вам нужно будет прикрепить существующие политики или доступ администратора к этому пользователю.
Шаг 3
Нажмите Создать пользователя, чтобы добавить пользователя. Он отобразит ключ доступа и секретный ключ, которые нам нужны для настройки безсерверной инфраструктуры —
Настройка AWS Serverless Framework
Давайте посмотрим, как настроить серверную среду AWS. Вы можете использовать следующую команду для этой цели —
sls config credentials --provider aws --key accesskey --secret secretkey
Обратите внимание, что данные введенных учетных данных, а именно ключ доступа и секретный ключ , хранятся в файле / aws / credentials .
Сначала создайте папку, в которой вы хотите, чтобы файлы вашего проекта были сохранены.
Далее мы начнем работу в папке aws-serverless .
Создание AWS Lambda с использованием Serverless Framework
Теперь давайте создадим лямбда-функцию с безсерверной средой, используя приведенные ниже шаги.
Шаг 1
Ниже приведены подробные сведения о команде создания сервера —
Шаг 2
Теперь нам нужно назначить шаблон следующим образом:
AWS-nodejs, aws-nodejs-typcript, aws-nodejs-ecma-script, aws-python, aws-python3, aws-groovy-gradle и т. Д.
Шаг 3
Мы будем использовать шаблон aws-nodejs для создания нашего первого проекта с использованием безсерверной инфраструктуры. Команда для той же цели, как показано здесь —
sls create --template aws-nodejs
Обратите внимание, что эта команда создает шаблон для шаблона aws-nodejs.
Шаг 4
Теперь откройте папку, созданную в IDE. Здесь мы используем код Visual Studio и структура папок выглядит следующим образом —
Шаг 5
Создано 2 файла: handler.js и Serverless.yml
Детали базовой функции AWS Lambda показаны в файле handler.js следующим образом:
'use strict'; module.exports.hello = (event, context, callback) => { const response = { statusCode: 200, body: JSON.stringify({ message: 'Go Serverless v1.0! Your function executed successfully!', input: event, }), }; callback(null, response); // Use this code if you don't use the http event with the LAMBDA-PROXY integration // callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event }); };
Этот файл Serverless.yml содержит сведения о конфигурации безсерверной инфраструктуры, как показано ниже —
# Welcome to Serverless! # # This file is the main config file for your service. # It's very minimal at this point and uses default values. # You can always add more config options for more control. # We've included some commented out config Examples here. # Just uncomment any of them to get that config option. # # For full config options, check the docs: # docs.serverless.com # # Happy Coding! service: aws-nodejs # NOTE: update this with your service name # You can pin your service to only deploy with a specific Serverless version # Check out our docs for more details # frameworkVersion: "=X.X.X" provider: name: aws runtime: nodejs6.10 # you can overwrite defaults here # stage: dev # region: us-east-1 # you can add statements to the Lambda function's IAM Role here # iamRoleStatements: # - Effect: "Allow" # Action: # - "s3:ListBucket" # Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] } # - Effect: "Allow" # Action: # - "s3:PutObject" # Resource: # Fn::Join: # - "" # - - "arn:aws:s3:::" # - "Ref" : "ServerlessDeploymentBucket" # - "/*" # you can define service wide environment variables here # environment: # variable1: value1 # you can add packaging information here #package: # include: # - include-me.js # - include-me-dir/** # exclude: # - exclude-me.js # - exclude-me-dir/** functions: hello: handler: handler.hello # The following are a few example events you can configure # NOTE: Please make sure to change your handler code to work with those events # Check the event documentation for details # events: # - http: # path: users/create # method: get # - s3: ${env:BUCKET} # - schedule: rate(10 minutes) # - sns: greeter-topic # - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000 # - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx # - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx # - iot: # sql: "SELECT * FROM 'some_topic'" # - cloudwatchEvent: # event: # Example: # - "aws.ec2" # detail-type: # - "EC2 Instance State-change Notification" # detail: # state: # - pending # - cloudwatchLog: '/aws/lambda/hello' # - cognitoUserPool: # pool: MyUserPool # trigger: PreSignUp # Define function environment variables here # environment: # variable2: value2 # you can add CloudFormation resource templates here #resources: # resources: # NewResource: # Type: AWS::S3::Bucket # Properties: # BucketName: my-new-bucket # Outputs: # NewOutput: # Description: "Description for the output" # Value: "Some output value"
Теперь нам нужно добавить изменения в файл serverless.yml в соответствии с нашими требованиями. Вы можете использовать команды как указано ниже —
Вы можете использовать следующую команду для обслуживания —
service: aws-nodejs # NOTE: update this with your service name
Теперь измените сервис здесь и добавьте имя, указанное в нашей папке, как показано на рисунке —
service: aws-serverless # NOTE: update this with your service name
Детали провайдера как показано —
provider: name: aws runtime: nodejs6.10
Поставщик — это aws, а среда выполнения — nodejs6.10 . Нам нужно добавить регион, в котором мы будем работать, и стадию , которая является средой разработки или разработки для проекта. Итак, вот обновленные данные о провайдере: провайдер —
name: aws runtime: nodejs6.10 # you can overwrite defaults here stage: prod region: us-east-1
Роль IAM
Роль iam , то есть код для разрешения работы с Lambda, показана здесь в файле .yml —
# iamRoleStatements: # - Effect: "Allow" # Action: # - "s3:ListBucket" # Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] } # - Effect: "Allow" # Action: # - "s3:PutObject" # Resource: # Fn::Join: # - "" # - - "arn:aws:s3:::" # - "Ref" : "ServerlessDeploymentBucket" # - "/*"
Обратите внимание, что нам нужно предоставить подробности роли, то есть разрешения, требуемого для других сервисов AWS, в приведенном выше разделе.
AWS Lambda Handler Подробности
Имя функции экспорта в handler.js — привет. Таким образом, обработчик — это имя файла, за которым следует имя экспорта.
functions: hello: handler: handler.hello
Подробности ресурса об услуге s3 добавлены, как показано ниже здесь —
# you can add CloudFormation resource templates here #resources: # resources: # NewResource: # Type: AWS::S3::Bucket # Properties: # BucketName: my-new-bucket # Outputs: # NewOutput: # Description: "Description for the output" # Value: "Some output value"
Разверните AWS Lambda с помощью Serverless Framework
Развернем лямбда-функцию на консоли AWS. Вы можете использовать следующие шаги для этой цели —
Шаг 1
Сначала вам нужно будет использовать следующую команду —
sls deploy
Шаг 2
Теперь вы должны увидеть функцию в консоли AWS, как показано на рисунке. Подробности о безсерверном AWS регистрируются в облаке AWS. Для этого перейдите в сервис AWS и выберите CloudFormation . Детали AWS Lambda отображаются следующим образом:
Обратите внимание, что данное имя — это имя проекта, за которым следует используемый этап.
Шаг 3
Он создает роль iam для AWS Lambda и группу журналов для облачных часов AWS. Создается сегмент S3, в котором хранятся детали кода и детали конфигурации.
Это создается командой sls deploy . Вам не нужно указывать роль iam, вместо этого она создается по умолчанию на этапе развертывания .
Шаг 4
Подробный поток событий отображается ниже в сервисе формирования облаков.
Лямбда-код AWS
Лямбда-код AWS и настройки его выполнения показаны на приведенном ниже снимке экрана.
Когда вы тестируете лямбда-функцию, вы можете найти следующий вывод:
Выход журнала для вышеуказанной функции показан здесь —
Мы также можем протестировать функцию AWS Lambda с помощью команды serverless, как показано ниже:
sls invoke --function hello
Синтаксис команды invoke показан здесь —
sls invoke --function hello
Эта команда invoke запускает функцию AWS Lambda и отображает вывод в командной строке, как показано ниже —
Вы также можете проверить функцию Lambda перед ее развертыванием и команду для нее, используя следующую команду:
sls invoke local --function hello
Обратите внимание, что не всегда возможно локальное тестирование, поскольку такие ресурсы, как S3 и DynanoDB, не могут быть смоделированы в локальной среде. Только основные вызовы функций могут быть проверены локально.
Использование API Gateway и AWS Lambda с Serverless Framework
Давайте посмотрим, как создать новый проект для работы с Lambda и API-шлюзом. Вы можете использовать следующую команду для этой цели —
sls create --template aws-nodejs
Теперь откройте проект aws-api в визуальном коде. Вы можете видеть, что файлы handler.js и serverless.yml созданы. Давайте внесем изменения в это для добавления шлюза API.
Вам нужно будет сделать следующие изменения в serverless.yml —
Теперь добавлена информация о событиях для активации шлюза API с помощью AWS Lambda.
Здесь добавлена новая вещь, называемая событиями . Мы указали событие как http вместе с его путем и методом.
Путь — это конечная точка, которую мы будем использовать при создании пути шлюза API и метода GET.
Обратите внимание, что обработчиком является handler.hello , а hello — это имя экспорта из handler.js.
Обратите внимание, что вам не нужно развертывать здесь шлюз API, так как безсерверный фреймворк будет выполнять это.
Теперь мы запустим команду sls deploy, чтобы создать функцию AWS Lambda с триггером в качестве шлюза API .
sls deploy
Обратите внимание, что подробности развертывания перечислены выше. Это дает Get URL с конечной точкой в качестве деталей пути. Стадия prod так же используется в URL. Название функции — aws-api-prod-hello .
Давайте нажмем на URL и посмотрим на результат. Вы можете увидеть следующие ответы, которые мы получаем от api-gateway get url —
{"message":"Go Serverless v1.0! Your function executed successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod": "GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9, image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto": "https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer": "false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer": "false","CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1. amazonaws.com","upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36","Via":"2.0 707912794802dbb4825c79b7d8626a5d.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"j70MMqkWFp6kmvuauzp_nvTbI-WwKIQmm2Jl5hzSoN6gkdvX11hh-g==", "X-Amzn-Trace-Id":"Root=1-5b13f9ef-5b012e36b7f40b5013a326fc","X-Forwarded-For":"157.33.133.217, 54.182.242.73","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"}, "queryStringParameters":null,"pathParameters":null,"stageVariables":null, "requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod": "GET","extendedRequestId":"H6P9fE-MoAMFdIg=","requestTime":"03/Jun/2018:14:23: 43 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1", "stage":"prod","requestTimeEpoch":1528035823928,"requestId":"b865dbd6-6739-11e8-b135 -a30269a8ec58","identity":{"cognitoIdentityPoolId":null,"accountId":null, "cognitoIdentityId":null,"caller":null,"SourceIp":"157.33.133.217","accessKey":null, "cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null, "userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":null, "isBase64Encoded":false}}
Информация о событии также доступна в выводе, когда вы нажмете URL. HttpMethod — GET, а queryStringParameters — нулевые, поскольку в строке запроса ничего не передается. Информация о событии дается на вход, который мы указали в обработчике лямбды AWS —
Выходные данные, которые мы получаем от шлюза API, — это только детали тела, такие как сообщение и ввод . Ответ полностью контролируется шлюзом API и способом его отображения в качестве вывода.
Теперь давайте передадим входные данные в URL-адрес GET в строке запроса и увидим отображение:
Затем вы можете увидеть вывод строки запроса, как показано ниже —
{"message":"Go Serverless v1.0! Your function executed successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod": "GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9, image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":"https", "CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false", "CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false", "CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.amazonaws.com", "upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36","Via":"2.0 8b1d3263c2fbd0a2c270b174d7aa3d61.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"JIBZw3I-blKbnpHP8LYXPVolCgdW5KmEukZS4at9mi4vrWBMI-UKNw==", "X-Amzn-Trace-Id":"Root=1-5b13ff90-7d6e38d4c0e4a5d4e6184f30","X-Forwarded-For": "157.33.133.217, 54.182.242.127","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"queryString Parameters":{"displaymessage":"Hello"},"pathParameters":null,"stageVariables":null, "requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod": "GET","extendedRequestId":"H6TeiG34oAMFguA=","requestTime":"03/Jun/2018:14:47:44 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1", "stage":"prod","requestTimeEpoch":1528037264252,"requestId":"12e5dca3- 673d-11e8-8966-69fcf43bd4db","identity":{"cognitoIdentityPoolId":null,"accountId":null, "cognitoIdentityId":null,"caller":null,"exmpleIp":"157.33.133.217","accessKey":null, "cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null, "userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body": null,"isBase64Encoded":false}}
Давайте изменим функцию AWS Lambda, чтобы она отображала детали строки запроса, как показано ниже:
'use strict'; module.exports.hello = (event, context, callback) => { const response = { statusCode: 200, body: JSON.stringify({ message🙁event.queryStringParameters && event.queryStringParameters.displaymessage!="") ? event.queryStringParameters.displaymessage : 'Go Serverless v1.0! Your function executed successfully!' }), }; callback(null, response); // Use this code if you don't use the http event with the LAMBDA-PROXY integration // callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event }); };
Обратите внимание, что мы изменили сообщение, основываясь на отображаемом сообщении строки запроса. Это снова развернет функцию и проверит вывод. Он отображает детали, присутствующие в отображаемом сообщении переменной строки запроса, как показано ниже.
Давайте теперь добавим метод post к событиям, созданным, как показано ниже —
Теперь разверните внесенные изменения, и вы увидите следующий вывод команды deploy:
Обратите внимание, что тестирование URL поста в браузере напрямую не даст подробностей. Вы должны проверить почтовый адрес в почтальоне .
Чтобы получить почтальон перейдите на https://www.getpostman.com/apps . Загрузите приложение в соответствии с вашей ОС. После установки вы сможете протестировать ваш пост, как показано ниже —
Это отображает сообщение, которое мы добавили в функцию Lambda.
Выполнение и вызов лямбда-функции
В этой главе будет подробно рассказано о процессе выполнения и вызова лямбда-функции и о шагах, связанных с ней.
Модель исполнения AWS Lambda
Выполнение AWS зависит от деталей конфигурации, добавленных для лямбда-функции AWS. При создании функции выделяется память и время , которые используются для выполнения лямбда-функции AWS.
С помощью деталей конфигурации AWS Lambda создает контекст выполнения. Контекст выполнения — это временная среда выполнения, которая готова к любым внешним зависимостям, таким как подключение к базе данных, конечные точки http, сторонние библиотеки и т. Д., Если таковые имеются.
Когда лямбда-функция AWS вызывается в первый раз или если лямбда-функция обновляется, добавляется небольшая задержка из-за настройки контекста выполнения. Однако последующие звонки быстрее по сравнению с первым. AWS Lambda пытается снова использовать контекст выполнения, если функция Lambda вызывается с меньшим временем.
Повторное использование контекста выполнения имеет следующие последствия:
-
Если для выполнения Lambda установлено соединение с базой данных, соединение сохраняется для повторного использования. Поэтому лямбда-код должен быть таким, чтобы сначала проверялась связь — если она существует и используется повторно; в противном случае нам придется установить новое новое соединение.
-
Контекст выполнения поддерживает дисковое пространство 500 МБ в каталоге / tmp . Требуемые данные кэшируются в этом каталоге. Вы можете дополнительно проверить код, чтобы увидеть, существуют ли данные.
-
Если обратные вызовы или некоторые фоновые процессы, если они не завершены, когда была вызвана лямбда-функция, выполнение начнется, когда лямбда-функция будет вызвана снова. Если вам не нужно, чтобы это происходило, убедитесь, что все ваши процессы завершены правильно, когда выполнение функции завершено.
Если для выполнения Lambda установлено соединение с базой данных, соединение сохраняется для повторного использования. Поэтому лямбда-код должен быть таким, чтобы сначала проверялась связь — если она существует и используется повторно; в противном случае нам придется установить новое новое соединение.
Контекст выполнения поддерживает дисковое пространство 500 МБ в каталоге / tmp . Требуемые данные кэшируются в этом каталоге. Вы можете дополнительно проверить код, чтобы увидеть, существуют ли данные.
Если обратные вызовы или некоторые фоновые процессы, если они не завершены, когда была вызвана лямбда-функция, выполнение начнется, когда лямбда-функция будет вызвана снова. Если вам не нужно, чтобы это происходило, убедитесь, что все ваши процессы завершены правильно, когда выполнение функции завершено.
Вы должны использовать контекст выполнения и данные, хранящиеся в каталоге tmp. Вам нужно будет добавить необходимые проверки в код, чтобы увидеть, существуют ли необходимые данные, прежде чем создавать новые новые. Это сэкономит время во время выполнения и сделает его более быстрым.
Вызов функции AWS Lambda
Мы можем вызвать AWS вручную, используя aws cli . Мы уже видели, как создавать и развертывать AWS Lambda с помощью cli . Здесь мы сначала создадим функцию, используя aws cli, и вызовем ее.
Создание лямбда-функции AWS с помощью интерфейса командной строки AWS
Для создания функции AWS Lambda с помощью aws cli вы можете использовать следующие команды:
команды
create-function --function-name <value> --runtime <value> --role <value> --handler <value> [--code <value>] [--description <value>] [--timeout <value>] [--memory-size <value>] [--environment <value>] [--kms-key-arn <value>] [--tags <value>] [--zip-file <value>] [--cli-input-json <value>]
Команда со значениями
aws lambda create-function --function-name "lambdainvoke" --runtime "nodejs8.10" --role "arn:aws:iam::625297745038:role/lambdaapipolicy" --handler "index.handler" --timeout 5 --memory-size 256 --zip-file "fileb://C:\nodeproject\index.zip"
Вывод как показано ниже —
Функция, созданная в консоли AWS, показана ниже:
Теперь вы можете вызвать функцию с помощью команды: invoke
--function-name <value> [--invocation-type <value>] [--log-type <value>] [--client-context <value>] [--payload <value>] [--qualifier <value>] outfile <value>
Опции
—function-name — Укажите имя функции, которую вы хотите вызвать.
—invocation-type (string) — по умолчанию типом вызова является requestresponse . Доступные значения для invokation-type: RequestResponse, Event и DryRun .
-
Тип вызова события должен использоваться для асинхронного ответа.
-
DryRun должен использоваться, когда вы хотите проверить функцию Lambda без необходимости ее выполнения.
Тип вызова события должен использоваться для асинхронного ответа.
DryRun должен использоваться, когда вы хотите проверить функцию Lambda без необходимости ее выполнения.
—log-type — Это будет Tail, если типом вызова является RequestResponse. Это дает последние 4KB base64-закодированные данные журнала. Возможные значения: Tail и None .
—client-context — Вы можете передать специфические детали клиента в функцию Lambda. Клиентский текст должен быть в формате json и кодироваться в base64. Максимальный размер файла составляет 3583 байта.
—payload — ввод в формате json лямбда-функции.
—qualifier — Вы можете указать версию лямбда-функции или псевдоним. Если вы передадите версию функции, то API будет использовать квалифицированную функцию arn для вызова функции Lambda. Если вы указываете псевдоним, API-интерфейс использует псевдоним ARN для вызова функции Lambda.
outfile — это имя файла, в котором будет сохранен контент.
Команда со значениями
aws lambda invoke --function-name "lambdainvoke" --log-type Tail C:\nodeproject\outputfile.txt
Вы можете использовать опцию полезной нагрузки для отправки фиктивного события лямбда-функции в формате json, как показано ниже.
Соответствующий лямбда-код AWS выглядит следующим образом:
exports.handler = async (event, callback) => { console.log("Hello => "+ event.name); console.log("Address =>"+ event.addr); callback(null, 'Hello '+event.name +" and address is "+ event.addr); };
Обратите внимание, что в коде у нас есть консоль event.name и event.addr . Теперь давайте используем опцию полезной нагрузки в aws cli, чтобы отправить событие с именем и адресом следующим образом:
aws lambda invoke --function-name "lambdainvoke" --log-type Tail --payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt
Thenpayload принимает ввод как путь к файлу, который имеет вход json, как показано
{"name":"Roy Singh", "addr":"Mumbai"}
Соответствующий вывод как показано ниже —
Вывод сохраняется в файле C: \ clioutput \ outputfile.txt следующим образом:
"Hello Roy Singh and address is Mumbai"
Образцы событий
Вы можете проверить функцию AWS Lambda, передав пример события. В этом разделе приведены примеры событий для Сервисов AWS. Вы можете использовать команду invoke для проверки вывода при запуске с любой из служб. Соблюдайте коды, указанные для соответствующих примеров событий ниже —
Amazon S3 Put Пример события
{ "Records": [{ "eventVersion": "2.0", "eventTime": "1970-01-01T00:00:00.000Z", "requestParameters": { "SourceIPAddress": "127.0.0.1" }, "s3": { "configurationId": "testConfigRule", "object": { "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901", "key": "HappyFace.jpg", "size": 1024 }, "bucket": { "arn": bucketarn, "name": "Sourcebucket", "ownerIdentity": { "principalId": "EXAMPLE" } }, "s3SchemaVersion": "1.0" }, "responseElements": { "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH", "x-amz-request-id": "EXAMPLE123456789" }, "awsRegion": "us-east-1", "eventName": "ObjectCreated:Put", "userIdentity": { "principalId": "EXAMPLE" }, "eventSource": "aws:s3" }] }
Чтобы получить подробную информацию о файле из события s3 put , вы можете использовать следующую команду —
event.Records[0].s3.object.key //will display the name of the file
Чтобы получить имя сегмента , вы можете использовать следующую команду —
event.Records[0].s3.bucket.name //will give the name of the bucket.
Чтобы увидеть EventName , вы можете использовать следующую команду —
event.Records[0].eventName // will display the eventname
Amazon S3 Удалить пример события
{ "Records": [{ "eventVersion": "2.0", "eventTime": "1970-01-01T00:00:00.000Z", "requestParameters": { "SourceIPAddress": "127.0.0.1" }, "s3": { "configurationId": "testConfigRule", "object": { "sequencer": "0A1B2C3D4E5F678901", "key": "HappyFace.jpg" }, "bucket": { "arn": bucketarn, "name": "Sourcebucket", "ownerIdentity": { "principalId": "EXAMPLE" } }, "s3SchemaVersion": "1.0" }, "responseElements": { "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH", "x-amz-request-id": "EXAMPLE123456789" }, "awsRegion": "us-east-1", "eventName": "ObjectRemoved:Delete", "userIdentity": { "principalId": "EXAMPLE" }, "eventSource": "aws:s3" }] }
Amazon DynamoDB
Amazon DynamoDB может быть событием в AWS Lambda, когда изменения вносятся в таблицу DynamoDB. Мы можем выполнять такие операции, как добавление записи, обновление и удаление записей из таблицы DynamodDB.
Пример события для добавления, вставки и удаления DynamoDB показан здесь —
{ "Records": [{ "eventID": "1", "eventVersion": "1.0", "dynamodb": { "Keys": { "Id": { "N": "101" } }, "NewImage": { "Message": { "S": "New item!" }, "Id": { "N": "101" } }, "StreamViewType": "NEW_AND_OLD_IMAGES", "SequenceNumber": "111", "SizeBytes": 26 }, "awsRegion": "us-west-2", "eventName": "INSERT", "eventSourceARN": eventSourcearn, "eventSource": "aws:dynamodb" }, { "eventID": "2", "eventVersion": "1.0", "dynamodb": { "OldImage": { "Message": { "S": "New item!" }, "Id": { "N": "101" } }, "SequenceNumber": "222", "Keys": { "Id": { "N": "101" } }, "SizeBytes": 59, "NewImage": { "Message": { "S": "This item has changed" }, "Id": { "N": "101" } }, "StreamViewType": "NEW_AND_OLD_IMAGES" }, "awsRegion": "us-west-2", "eventName": "MODIFY", "eventSourceARN": Sourcearn, "eventSource": "aws:dynamodb" }, { "eventID": "3", "eventVersion": "1.0", "dynamodb": { "Keys": { "Id": { "N": "101" } }, "SizeBytes": 38, "SequenceNumber": "333", "OldImage": { "Message": { "S": "This item has changed" }, "Id": { "N": "101" } }, "StreamViewType": "NEW_AND_OLD_IMAGES" }, "awsRegion": "us-west-2", "eventName": "REMOVE", "eventSourceARN": Sourcearn, "eventSource": "aws:dynamodb" }] }
Amazon Простая служба уведомлений
AWS Lambda может быть полезна для обработки уведомлений, созданных в Simple Notification Service (SNS) . Всякий раз, когда в SNS публикуется сообщение, лямбда-функция может запускаться с событием SNS, в котором есть подробности сообщений. Эти сообщения могут быть обработаны внутри лямбда-функции и могут быть отправлены в другие службы в соответствии с требованиями.
Как только сообщение введено, SNS запустит функцию Lambda. Если какая-либо ошибка пытается вызвать лямбда-функцию, SNS попытается вызвать лямбда-функцию до трех раз.
Образец события Amazon SNS
Пример события, в котором есть все подробности, доступные в функции AWS Lambda для выполнения дальнейшего процесса, показан ниже —
{ "Records": [{ "EventVersion": "1.0", "EventSubscriptionArn": eventsubscriptionarn, "EventSource": "aws:sns", "Sns": { "SignatureVersion": "1", "Timestamp": "1970-01-01T00:00:00.000Z", "Signature": "EXAMPLE", "SigningCertUrl": "EXAMPLE", "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e", "Message": "Hello from SNS!", "MessageAttributes": { "Test": { "Type": "String", "Value": "TestString" }, "TestBinary": { "Type": "Binary", "Value": "TestBinary" } }, "Type": "Notification", "UnsubscribeUrl": "EXAMPLE", "TopicArn": topicarn, "Subject": "TestInvoke" } }] }
Amazon Simple Mail Service
Amazon Simple Mail Service можно использовать для отправки сообщений, а также для получения сообщений. Функция AWS Lambda может вызываться в Simple Mail Service при получении сообщения.
Образец события получения электронной почты Amazon SES
Подробности события SES при использовании внутри AWS Lambda показаны ниже —
{ "Records": [{ "eventVersion": "1.0", "ses": { "mail": { "commonHeaders": { "from": [ "Jane Doe <[email protected]>" ], "to": [ "[email protected]" ], "returnPath": "[email protected]", "messageId": "<0123456789Source.com>", "date": "Wed, 7 Oct 2015 12:34:56 -0700", "subject": "Test Subject" }, "example": "[email protected]", "timestamp": "1970-01-01T00:00:00.000Z", "destination": [ "[email protected]" ], "headers": [{ "name": "Return-Path", "value": "<[email protected]>" }, { "name": "Received", "value": "from mailer.example.com (mailer.example.com [203.0.113.1]) by inbound-smtp.us-west-2.amazonaws.com with SMTP id o3vrnil0e2ic for [email protected]; Wed, 07 Oct 2015 12:34:56 +0000 (UTC)" }, { "name": "DKIM-Signature", "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=example; h=mime-version:from:date:message-id:subject:to:content-type; bh=jX3F0bCAI7sIbkHyy3mLYO28ieDQz2R0P8HwQkklFj4=; b=sQwJ+LMe9RjkesGu+vqU56asvMhrLRRYrWCbV" }, { "name": "MIME-Version", "value": "1.0" }, { "name": "From", "value": "Jane Doe <[email protected]>" }, { "name": "Date", "value": "Wed, 7 Oct 2015 12:34:56 -0700" }, { "name": "Message-ID", "value": "<0123456789example.com>" }, { "name": "Subject", "value": "Test Subject" }, { "name": "To", "value": "[email protected]" }, { "name": "Content-Type", "value": "text/plain; charset=UTF-8" }], "headersTruncated": false, "messageId": "o3vrnil0e2ic28tr" }, "receipt": { "recipients": [ "[email protected]" ], "timestamp": "1970-01-01T00:00:00.000Z", "spamVerdict": { "status": "PASS" }, "dkimVerdict": { "status": "PASS" }, "processingTimeMillis": 574, "action": { "type": "Lambda", "invocationType": "Event", "functionArn": "arn:aws:lambda:us-west-2:012345678912:function:example" }, "spfVerdict": { "status": "PASS" }, "virusVerdict": { "status": "PASS" } } }, "eventexample": "aws:ses" }] }
Amazon Cloudwatch Logs
AWS Lambda можно запустить из Amazon CloudWatch Logs, используя подписку CloudWatch Logs . Подписки CloudWatch Logs содержат данные в реальном времени о журналах, которые можно обрабатывать и анализировать в AWS Lambda или использовать для загрузки в другие системы.
Образец события Amazon CloudWatch Logs
{ "awslogs": { "data": "H4sIAAAAAAAAAHWPwQqCQBCGX0Xm7EFtK+smZBEUgXoLCdMhFtKV3akI8d0bLYmibvPPN3wz00CJxmQnTO41whwW QRIctmEcB6sQbFC3CjW3XW8kxpOpP+OC22d1Wml1qZkQGtoMsScxaczKN3plG8zlaHIta5KqWsozoTYw3/djzwhpL wivWFGHGpAFe7DL68JlBUk+l7KSN7tCOEJ4M3/qOI49vMHj+zCKdlFqLaU2ZHV2a4Ct/an0/ivdX8oYc1UVX860fQ DQiMdxRQEAAA==" } }
Amazon API Gateway
Лямбда-функция AWS может быть вызвана по URL-адресу https . ЭТО можно сделать на GET, POST, PUT . Когда вызывается https url, также запускается функция AWS Lambda, и данные, передаваемые в https с помощью get / post, можно сделать доступными внутри AWS Lambda, чтобы использовать их для вставки в DynamoDB или для отправки почты и т. Д.
Событие запроса прокси API-шлюза
{ "path": "/test/hello", "headers": { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Encoding": "gzip, deflate, lzma, sdch, br", "Accept-Language": "en-US,en;q=0.8", "CloudFront-Forwarded-Proto": "https", "CloudFront-Is-Desktop-Viewer": "true", "CloudFront-Is-Mobile-Viewer": "false", "CloudFront-Is-SmartTV-Viewer": "false", "CloudFront-Is-Tablet-Viewer": "false", "CloudFront-Viewer-Country": "US", "Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48", "Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)", "X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==", "X-Forwarded-For": "192.168.100.1, 192.168.1.1", "X-Forwarded-Port": "443", "X-Forwarded-Proto": "https" }, "pathParameters": { "proxy": "hello" }, "requestContext": { "accountId": "123456789012", "reexampleId": "us4z18", "stage": "test", "requestId": "41b45ea3-70b5-11e6-b7bd-69b5aaebc7d9", "identity": { "cognitoIdentityPoolId": "", "accountId": "", "cognitoIdentityId": "", "caller": "", "apiKey": "", "exampleIp": "192.168.100.1", "cognitoAuthenticationType": "", "cognitoAuthenticationProvider": "", "userArn": "", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48", "user": "" }, "reexamplePath": "/{proxy+}", "httpMethod": "GET", "apiId": "wt6mne2s9k" }, "reexample": "/{proxy+}", "httpMethod": "GET", "queryStringParameters": { "name": "me" }, "stageVariables": { "stageVarName": "stageVarValue" } }
Событие ответа прокси-сервера шлюза API
{ "statusCode": 200, "headers": { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Encoding": "gzip, deflate, lzma, sdch, br", "Accept-Language": "en-US,en;q=0.8", "CloudFront-Forwarded-Proto": "https", "CloudFront-Is-Desktop-Viewer": "true", "CloudFront-Is-Mobile-Viewer": "false", "CloudFront-Is-SmartTV-Viewer": "false", "CloudFront-Is-Tablet-Viewer": "false", "CloudFront-Viewer-Country": "US", "Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48", "Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)", "X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==", "X-Forwarded-For": "192.168.100.1, 192.168.1.1", "X-Forwarded-Port": "443", "X-Forwarded-Proto": "https" }, "body": "Hello World" }
Удаление лямбда-функции
Удаление лямбда-функции AWS приведет к удалению лямбды AWS из консоли AWS. Есть 2 способа удалить функцию AWS Lambda.
- Использование консоли AWS.
- Использование команды AWS CLI
В этой главе подробно рассматриваются эти два способа.
Использование AWS Console
Для удаления лямбда-функции с помощью консоли AWS выполните следующие действия:
Шаг 1
Войдите в консоль AWS и перейдите в сервис AWS Lambda. Вы можете обнаружить, что лямбда-функции AWS, созданные до сих пор, перечислены в консоли AWS, как показано ниже —
Список показывает, что на данный момент создано 23 функции AWS Lambda. Вы можете просмотреть их, используя нумерацию страниц сверху или выполнить поиск в AWS Lambda с помощью поля поиска.
Шаг 2
Обратите внимание, что на каждой функции AWS Lambda есть переключатель. Выберите функцию, которую вы хотите удалить. Посмотрите на скриншот, показанный ниже.
Шаг 3
После того как вы выберете функцию AWS Lambda, выпадающий ранее выпадающий список Action будет выделен серым цветом. Теперь откройте поле со списком, и он будет отображать параметры, как показано —
Шаг 4
Нажмите кнопку Удалить , чтобы удалить функцию AWS Lambda. После того, как вы нажмете « Удалить» , появится следующее сообщение:
Шаг 5
Внимательно прочитайте сообщение, а затем нажмите кнопку « Удалить» , чтобы окончательно удалить лямбда-функцию AWS.
Примечание. Удаление aws-лямбды не приведет к удалению связанной роли. Чтобы удалить роль, необходимо перейти к IAM и удалить роль.
Шаг 6
Список ролей, созданных на данный момент, показан ниже. Обратите внимание, что есть кнопка « Создать роль» и кнопка « Удалить роль» .
Установите флажок напротив роли, которую хотите удалить. Вы также можете выбрать несколько ролей для удаления одновременно.
Шаг 7
Вы увидите подтверждающее сообщение, как показано ниже, как только вы нажмете кнопку Удалить —
Теперь внимательно прочитайте упомянутые детали, а затем нажмите кнопку « Да», кнопку « Удалить» .
Использование команды AWS CLI
Давайте сначала создадим лямбда-функцию, используя aws cli, и удалим ее, используя ту же команду. Для этого выполните следующие шаги:
Шаг 1
Команда со значениями для create-function выглядит следующим образом:
aws lambda create-function --function-name "lambdatestcli" --runtime "nodejs8.10" --role "arn:aws:iam::625297745038:role/lambdaapipolicy" --handler "index.handler" --timeout 5 --memory-size 256 --zip-file "fileb://C:\demotest\index.zip"
Соответствующий вывод показан здесь —
Шаг 2
Созданная лямбда-функция AWS является lambdatestcli . Мы использовали существующую роль arn для создания лямбда-функции.
Затем вы можете найти эту функцию в консоли AWS, как показано ниже:
Шаг 3
Теперь давайте вызовем функцию для проверки вывода с помощью показанной команды:
aws lambda invoke --function-name "lambdatestcli" --log-type Tail C:\demotest\outputfile.txt
Эта команда выдаст вам вывод, как показано на рисунке —
Шаг 4
Вы можете наблюдать журналы из cloudwatch для лямбда-функции lambdatestcli
Шаг 5
Теперь давайте перейдем к фактической части удаления функции AWS. Удалить aws cli api удалит данную функцию. Детали команды, используемой для этой цели, приведены ниже —
команда
delete-function --function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>]
Опции
—function-name (string) — принимает имя лямбда-функции или арн лямбда-функции AWS.
—qualifier (string) — это необязательно. Здесь вы можете указать версию AWS Lambda, которую необходимо удалить.
— cli-input-json (string) — выполняет сервисную операцию на основе предоставленной строки JSON. Строка JSON соответствует формату, предоставленному —generate-cli-skeleton . Если в командной строке указаны другие аргументы, значения CLI будут переопределять значения, предоставленные JSON.
—generate-cli-skeleton (string) — выводит скелет json на стандартный вывод без отправки запроса API.
Команда со значениями
aws lambda delete-function --function-name "lambdatestcli"
Соответствующий вывод показан ниже —
Шаг 6
Если вы проверите сейчас, вы можете заметить, что функция не будет отображаться в списке функций AWS Lambda, как показано на снимке экрана ниже —
Работа с Amazon API Gateway
Лямбда-функция AWS может быть вызвана по URL-адресу HTTPS . Это можно сделать на GET, POST, PUT. Когда вызывается HTTPS-URL, также может запускаться функция AWS Lambda, и данные, передаваемые в HTTPS с помощью get / post, могут быть доступны внутри AWS Lambda для использования для вставки в DynamoDB или для отправки почты и т. Д.
В этой главе подробно обсуждаются различные процессы, связанные с работой с AWS lambda и API Gateway.
Вовлеченные процессы
Ниже приведены процессы, связанные с работой с AWS lambda и API Gateway.
- Создать роль IAM для разрешения
- Создать лямбда-функцию AWS
- Создать API-шлюз
- Связь лямбда-функции с API-шлюзом
- Передача данных в шлюз API
Базовая диаграмма, объясняющая работу API-шлюза и AWS Lambda, приведена здесь —
Эти процессы подробно объясняются далее в этой главе с соответствующими скриншотами.
Создать роль IAM для разрешения
В сервисах Amazon, как показано ниже, выберите IAM для создания ролей, которые будут использоваться функцией Lambda.
Перейдите в IAM и выберите Роли в левой части, как показано ниже —
Нажмите Создать роль для лямбда-функции.
Выберите Lambda и нажмите « Разрешения» внизу. Выберите разрешение, необходимое для шлюза API и лямбды.
Ищите API-шлюз в поиске, и он перечислит вам все связанные разрешения. Здесь мы выбрали полный доступ к API-шлюзу, как показано ниже —
Теперь найдите API-шлюз, и он покажет вам все связанные разрешения. Здесь мы выбрали полный доступ к API-шлюзу, как показано ниже —
Вы должны повторить тот же процесс для политик также.
Как только вы закончите выбор необходимых политик, нажмите « Обзор» для следующего шага. Введите название роли согласно вашему выбору, как показано ниже —
Он отображает политики, прикрепленные к роли. Нажмите Создать роль, и мы закончили с созданием роли и можем перейти к лямбда-функции.
Создать лямбда-функцию AWS
Перейдите в сервисы AWS и нажмите на лямбда-сервис, чтобы создать функцию для его подключения к API-шлюзу.
Экран пользовательского интерфейса для функции лямбда показан ниже. Нажмите кнопку Создать функцию , чтобы продолжить создание функции лямбда.
Введите имя функции и выберите существующую роль, которую мы создали выше.
Мигает сообщение о том, что функция с именем lambdawithapigateway успешно создана.
Обратите внимание, что здесь мы будем использовать runjs для написания кода. Код AWS с сообщением helloworld показан ниже:
Лямбда-код AWS присутствует в файле index.js . Функция с именем handler имеет параметры, а именно события, контекст и обратный вызов .
Функция обратного вызова в основном имеет ошибку и сообщение об успехе. Обратите внимание, что здесь у нас нет кода, связанного с ошибками, поэтому передается значение null, и сообщение об успехе — HelloWorld от lambda.
Наконец, сохраните добавленные изменения и давайте перейдем к добавлению функции Lambda в шлюз API.
Создать API-шлюз
Войдите в свою учетную запись AWS и откройте API Gateway, как показано ниже —
Нажмите API Gateway, и вы попадете на экран, где можно создать новый API-шлюз.
Нажмите Create API и добавьте детали, как показано ниже —
Нажмите кнопку « Создать API» в правой части экрана. Это отобразит вновь созданный API в левой части экрана.
Щелкните раскрывающийся список « Действия», чтобы создать новый ресурс для API.
Теперь создайте новый ресурс, как показано ниже —
Введите имя ресурса, как показано ниже. Вы увидите название ресурса, введенного в URL, созданный в конце. Нажмите Создать ресурс, и вы увидите его на экране следующим образом —
Добавьте методы GET / POST к созданному ресурсу, как показано ниже. Выберите метод из выпадающего списка действий .
Нажмите метод GET, чтобы добавить метод в API.
Следующим шагом является интеграция, которая будет интегрировать его с лямбда-функцией. Теперь добавьте к нему функцию Lambda, как показано ниже —
Связь лямбда-функции с API-шлюзом
Выберите лямбда-функцию, созданную ранее.
Сохраните изменения, и вы увидите диалоговое окно с запросом разрешения, как показано ниже —
Нажмите OK для разрешения. Это детали выполнения между HTTP-запросом шлюза API и функцией Lambda —
Теперь давайте развернем изменения шлюза API. Для этого нам нужно выбрать Deploy API из выпадающего меню Actions, как показано ниже —
Выберите Deploy API . Будет запрошено состояние развертывания. Выберите « Новый этап» в раскрывающемся списке «этап развертывания» и добавьте имя этапа как « Производство» .
Нажмите кнопку Deploy , и он перенаправит вас на URL, как показано ниже —
Выберите метод GET с левой стороны, чтобы получить URL. Откройте URL в новой вкладке, чтобы увидеть сообщение от лямбда-функции.
Это базовый пример работы с AWS Lambda и AWS API Gateway. В приведенном выше примере мы жестко закодировали сообщение в функции Lambda.
Теперь давайте возьмем детали сообщения от шлюза API. В случае, если вызов HTTPS должен вызываться из другого домена, например, вызов AJAX для API, нам нужно включить CORS для созданного шлюза API.
Выберите ресурс, созданный для API, и нажмите выпадающий список Actions —
Теперь Включить CORS откроет следующий экран —
Вы можете использовать несколько методов для включения CORS. Access-Control-Allow-Origin помечен *, что означает, что он позволит получать содержимое от шлюза API из любого домена.
Вы также можете указать доменное имя, которое вы хотите работать с API. Нажмите Включить CORS и замените существующую кнопку заголовков CORS. Появится подтверждающее сообщение, как показано ниже —
Нажмите кнопку Да, замените существующие значения , чтобы включить его. Экран Enable CORS выглядит так, как показано ниже —
Передача данных в API-шлюз
Откройте API, созданный в API Gateway displayhelloworld, как показано ниже —
Нажмите Запрос интеграции, чтобы отправить данные, как показано ниже —
Выберите Body Mapping Templates и добавьте Content-Type для этого примера как application / json . Нажмите на добавленный тип контента и добавьте следующие детали:
Теперь добавьте шаблон в формате JSON, как показано ниже —
Обратите внимание, что мы взяли сообщение в качестве параметра для получения данных из API Gateway и передачи их в AWS Lambda. Синтаксис для получения деталей, как показано выше.
Теперь разверните API, чтобы сделать изменения доступными по URL-адресу шлюза API. Для этого нам нужно изменить функцию Lambda для отображения данных на основе URL-адреса API-шлюза. Код для лямбда-функции приведен ниже. Обратите внимание, что мы берем сообщение от события и переходим к обратному вызову.
exports.handler = (event, context, callback) => { let message = event.message; callback(null, message); };
Теперь сохраните изменения в Lambda и нажмите URL, чтобы увидеть изменения. Посмотрите на скриншот, приведенный ниже —
Нажмите на URL, как показано ниже —
https://rw2ek1xung.execute-api.us-east- 1.amazonaws.com/prod/hello?message=hello%20from%20api%20gateway
Заметьте, что здесь мы передаем сообщение в виде строки запроса на адрес GET. Затем вы можете наблюдать результат, как показано ниже —
Он считывает сведения, отправленные в сообщение с URL-адреса, и отображает их в браузере.
Использование лямбда-функции с Amazon S3
Сервис Amazon S3 используется для хранения файлов, где вы можете загружать или удалять файлы. Мы можем активировать AWS Lambda на S3, когда есть какие-либо загрузки файлов в S3. AWS Lambda имеет функцию-обработчик, которая служит отправной точкой для функции AWS Lambda. У обработчика есть детали событий. В этой главе мы рассмотрим, как использовать AWS S3 для запуска функции AWS Lambda при загрузке файлов в корзину S3.
Шаги по использованию лямбда-функции AWS с Amazon S3
Чтобы начать использовать AWS Lambda с Amazon S3, нам нужно следующее:
- Создать S3 Bucket
- Создайте роль, которая имеет разрешение на работу с s3 и lambda
- Создайте лямбда-функцию и добавьте s3 в качестве триггера.
пример
Давайте рассмотрим эти шаги на примере, демонстрирующем базовое взаимодействие между Amazon S3 и AWS Lambda.
-
Пользователь загрузит файл в корзину Amazon S3
-
Как только файл загружен, он запускает функцию AWS Lambda в фоновом режиме, которая отображает вывод в форме консольного сообщения о том, что файл загружен.
-
Пользователь сможет увидеть сообщение в журналах Cloudwatch после загрузки файла.
Пользователь загрузит файл в корзину Amazon S3
Как только файл загружен, он запускает функцию AWS Lambda в фоновом режиме, которая отображает вывод в форме консольного сообщения о том, что файл загружен.
Пользователь сможет увидеть сообщение в журналах Cloudwatch после загрузки файла.
Блок-схема, поясняющая последовательность действий, приведена здесь —
Создание S3 Bucket
Давайте начнем с создания сегмента s3 в консоли AWS, используя шаги, приведенные ниже:
Шаг 1
Перейдите в сервисы Amazon и нажмите S3 в разделе хранилища, как показано на рисунке ниже —
Шаг 2
Нажмите S3 storage и создайте корзину, в которой будут храниться загруженные файлы.
Шаг 3
После того, как вы нажмете кнопку « Создать корзину» , вы увидите следующий экран:
Шаг 4
Введите подробные данные Bucket name, выберите регион и нажмите кнопку « Создать» в левом нижнем углу. Таким образом, мы создали ведро с именем: workingwithlambdaands3 .
Шаг 5
Теперь, нажмите на название корзины, и она попросит вас загрузить файлы, как показано ниже —
Итак, мы закончили с созданием сегмента в S3.
Создать роль, которая работает с S3 и Lambda
Чтобы создать роль, которая работает с S3 и Lambda, выполните следующие шаги:
Шаг 1
Перейдите в сервисы AWS и выберите IAM, как показано ниже —
Шаг 2
Теперь нажмите IAM -> Роли, как показано ниже —
Шаг 3
Теперь нажмите « Создать роль» и выберите службы, которые будут использовать эту роль. Выберите лямбду и нажмите кнопку разрешения .
Шаг 4
Добавьте разрешение снизу и нажмите « Обзор» .
Шаг 5
Обратите внимание, что мы выбрали следующие разрешения —
Обратите внимание, что мы выбрали следующие политики : AmazonS3FullAccess, AWSLambdaFullAccess и CloudWatchFullAccess .
Шаг 6
Теперь введите имя роли, описание роли и нажмите кнопку « Создать роль» внизу.
Таким образом, наша роль с именем lambdawiths3service создана.
Создать лямбда-функцию и добавить S3 Trigger
В этом разделе мы рассмотрим, как создать лямбда-функцию и добавить к ней триггер S3. Для этого вам нужно будет выполнить следующие шаги:
Шаг 1
Перейдите в Сервисы AWS и выберите Lambda, как показано ниже —
Шаг 2
Нажмите Lambda и следуйте процессу добавления имени . Выберите время выполнения, роль и т. Д. И создайте функцию. Созданная нами лямбда-функция показана на снимке экрана ниже.
Шаг 3
Теперь давайте добавим триггер S3.
Шаг 4
Выберите триггер сверху и добавьте детали, как показано ниже —
Шаг 5
Выберите контейнер, созданный из выпадающего списка. Тип события имеет следующие детали —
Выберите Object Created (All) , так как нам нужен лямбда-триггер AWS, когда файл загружен, удален и т. Д.
Шаг 6
Вы можете добавить префикс и шаблон файла, которые используются для фильтрации добавленных файлов. Например, для запуска лямбда только для изображений .jpg. Давайте пока оставим это поле пустым, поскольку нам нужно запустить Lambda для всех загруженных файлов. Нажмите кнопку Добавить , чтобы добавить триггер.
Шаг 7
Вы можете найти триггерный дисплей для функции Lambda, как показано ниже —
Давайте добавим детали для лямбда-функции aws. Здесь мы будем использовать онлайн-редактор для добавления нашего кода и использовать nodejs в качестве среды выполнения.
Шаг 8
Чтобы запустить S3 с помощью AWS Lambda, нам нужно будет использовать событие S3 в коде, как показано ниже —
exports.handler = function(event, context, callback) { console.log("Incoming Event: ", event); const bucket = event.Records[0].s3.bucket.name; const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' ')); const message = `File is uploaded in - ${bucket} -> ${filename}`; console.log(message); callback(null, message); };
Обратите внимание, что в параметре события содержится информация о S3event. Мы утешили имя корзины и имя файла, которые будут записываться при загрузке изображения в S3bucket.
Шаг 9
Теперь давайте сохраним изменения и протестируем лямбда-функцию с помощью S3upload. Ниже приведены детали кода, добавленные в AWS Lambda.
Шаг 10
Теперь давайте добавим роль, память и время ожидания.
Шаг 11
Теперь сохраните лямбда-функцию. Откройте S3 из сервисов Amazon и откройте корзину, которую мы создали ранее, а именно workingwithlambdaands3 .
Загрузите изображение в нем, как показано ниже —
Шаг 12
Нажмите кнопку Загрузить , чтобы добавить файлы, как показано на рисунке —
Шаг 13
Нажмите Добавить файлы, чтобы добавить файлы. Вы также можете перетаскивать файлы. Теперь нажмите кнопку Загрузить .
Таким образом, мы загрузили одно изображение в нашу корзину S3.
Шаг 14
Чтобы просмотреть подробности триггера, перейдите в сервис AWS и выберите CloudWatch . Откройте журналы для лямбда-функции и используйте следующий код —
exports.handler = function(event, context, callback) { console.log("Incoming Event: ", event); const bucket = event.Records[0].s3.bucket.name; const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' ')); const message = `File is uploaded in - ${bucket} -> ${filename}`; console.log(message); callback(null, message); };
Вывод, который вы можете наблюдать в Cloudwatch, выглядит так:
Лямбда-функция AWS запускается, когда файл загружается в корзину S3, а детали регистрируются в Cloudwatch, как показано ниже —
Использование лямбда-функции с Amazon DynamoDB
DynamoDB может запускать AWS Lambda, когда данные добавляются в таблицы, обновляются или удаляются. В этой главе мы будем работать над простым примером, который будет добавлять элементы в таблицу DynamoDB и AWS Lambda, которые будут считывать данные и отправлять почту с добавленными данными.
реквизиты
Чтобы использовать Amazon DB и AWS Lambda, нам нужно выполнить следующие шаги:
-
Создать таблицу в DynamoDB с первичным ключом
-
Создайте роль, которая будет иметь разрешение на работу с DynamoDB и AWS Lambda.
-
Создать функцию в AWS Lambda
-
AWS Lambda Trigger для отправки почты
-
Добавить данные в DynamoDB
Создать таблицу в DynamoDB с первичным ключом
Создайте роль, которая будет иметь разрешение на работу с DynamoDB и AWS Lambda.
Создать функцию в AWS Lambda
AWS Lambda Trigger для отправки почты
Добавить данные в DynamoDB
Давайте обсудим каждый из этих шагов подробно.
пример
Мы собираемся поработать над следующим примером, который показывает базовое взаимодействие между DynamoDB и AWS Lambda. Этот пример поможет вам понять следующие операции —
-
Создание таблицы с именем customer в таблице Dynamodb и способ ввода данных в эту таблицу.
-
Запуск функции AWS Lambda после ввода данных и отправка почты с помощью сервиса Amazon SES.
Создание таблицы с именем customer в таблице Dynamodb и способ ввода данных в эту таблицу.
Запуск функции AWS Lambda после ввода данных и отправка почты с помощью сервиса Amazon SES.
Основная блок-схема, поясняющая последовательность действий, показана ниже:
Создать таблицу в DynamoDB с первичным ключом
Войдите в консоль AWS. Перейдите в Сервисы AWS и выберите DynamoDB, как показано ниже. Выберите DynamoDB.
DynamoDB показывает параметры, как показано ниже —
Теперь нажмите « Создать таблицу», чтобы создать таблицу, как показано на рисунке. Мы назвали таблицу как клиент с первичным ключом для этой таблицы как cust_id . Нажмите кнопку Создать , чтобы добавить таблицу в DynamodB.
Созданная таблица, как показано ниже —
Мы можем добавить элементы в таблицу, созданную следующим образом:
Нажмите « Элементы» и нажмите кнопку « Создать элемент» , как показано на рисунке —
Создание роли с разрешениями для работы с DynamoDB и AWS Lambda
Чтобы создать роль, перейдите в сервисы AWS и нажмите IAM.
Давайте создадим политику, которая будет использоваться только для таблицы DynamoDB, созданной ранее —
Теперь выберите сервис . Обратите внимание, что выбранный нами сервис — DynamoDB . Для действий мы предприняли все действия Dynamodb, то есть доступ к списку, чтение и запись. Для ресурсов мы выберем тип ресурсов таблицы действий. Когда вы нажимаете на нее, вы можете увидеть экран следующим образом —
Теперь выберите таблицу и добавьте к ней ARN, как показано. Мы получим данные ARN из таблицы клиентов, созданной, как показано ниже —
Введите подробности арн здесь —
Нажмите кнопку Добавить , чтобы сохранить изменения. После этого нажмите на Политику просмотра . Введите название политики, описание и т. Д., Как показано ниже —
Нажмите на создать политику, чтобы сохранить ее. Добавьте политику к создаваемой роли. Выберите роль с левой стороны и введите детали.
Обратите внимание, что добавлены следующие политики: policyfordynamdd, awslambdafullaccess, cloudwatchfullaccess и amazonsesfullaccess . Добавьте роль и будете использовать ее при создании лямбда-функции AWS.
Создать функцию в AWS Lambda
Таким образом, мы создали лямбда-функцию newlambdafordynamodb, как показано на рисунке.
Теперь давайте добавим триггер DynamodDB к созданной AWS Lambda. Время выполнения, которое мы будем использовать, — Node.js.
В триггере Dynamodb вы можете найти следующие подробности, которые нужно настроить для AWS Lambda:
Теперь просто нажмите кнопку Добавить, чтобы добавить триггер в AWS Lambda.
AWS Lambda Trigger для отправки почты
AWS Lambda будет срабатывать при вставке данных в AWS Lambda. В параметре события будут вставлены данные DynamodB. Это будет читать данные с мероприятия и отправлять электронную почту.
Отправка электронной почты
Чтобы отправить электронное письмо, вам необходимо выполнить следующие шаги:
Шаг 1
Перейдите в сервис AWS и выберите SES (простой почтовый сервис). Подтвердите адрес электронной почты, на который нам нужно отправить сообщение, как показано на рисунке —
Шаг 2
Нажмите кнопку Подтвердить новый адрес электронной почты, чтобы добавить адрес электронной почты.
Шаг 3
Введите адрес электронной почты, чтобы подтвердить это. На адрес электронной почты будет получено и письмо активации от Amazon, на которое нужно нажать. После завершения активации идентификатор электронной почты проверяется и может использоваться с сервисами AWS.
Шаг 4
Лямбда-код AWS, который считывает данные с мероприятия и отправляет электронную почту, приведен ниже —
var aws = require('aws-sdk'); var ses = new aws.SES({ region: 'us-east-1' }); exports.handler = function(event, context, callback) { console.log(event); let tabledetails = JSON.parse(JSON.stringify(event.Records[0].dynamodb)); console.log(tabledetails.NewImage.address.S); let customerid = tabledetails.NewImage.cust_id.S; let name = tabledetails.NewImage.name.S; let address = tabledetails.NewImage.address.S; var eParams = { Destination: { ToAddresses: ["[email protected]"] }, Message: { Body: { Text: { Data: "The data added is as follows:\n CustomerId:"+customerid+"\n Name:"+name+"\nAddress:"+address } }, Subject: { Data: "Data Inserted in Dynamodb table customer" } }, Source: "[email protected]" }; console.log('===SENDING EMAIL==='); var email = ses.sendEmail(eParams, function(err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); console.log("EMAIL CODE END"); console.log('EMAIL: ', email); context.succeed(event); callback(null, "email is send"); } }); }
Теперь сохраните лямбда-функцию и данные в таблице DynamoDB.
Добавить данные в DynamoDB
Используйте следующую последовательность для добавления данных в DynamoDB.
Шаг 1
Перейти к таблице клиентов, созданной в Dynamodb.
Шаг 2
Нажмите Создать элемент .
Шаг 3
Нажмите кнопку Сохранить и проверьте идентификатор электронной почты, указанный в AWS Lambda, чтобы узнать, было ли письмо отправлено AWS Lambda.
Использование лямбда-функции с запланированными событиями
Предполагается, что запланированные события происходят через регулярные промежутки времени на основе набора правил. Запланированные события используются для выполнения лямбда-функции после интервала, определенного в сервисах cloudwatch. Их лучше всего использовать для работы на cron вместе с AWS Lambda. В этой главе на простом примере объясняется, как отправлять почту через каждые 5 минут с использованием запланированных событий и AWS Lambda.
реквизиты
Требования для использования лямбда-функции с запланированными событиями следующие:
- Подтвердите идентификатор электронной почты, используя AWS SES
- Создать роль для использования AWS SES, Cloudwatch и AWS Lambda
- Создать лямбда-функцию для отправки электронной почты
- Добавить правило для запланированных событий из AWS CloudWatch
пример
Пример, который мы рассмотрим, добавит событие CloudWatch к функции AWS Lambda. Cloudwatch запустит AWS Lambda на основе временной привязки к ней. Например, в примере ниже мы использовали 5 минут в качестве триггера. Это означает, что каждые 5 минут будет запускаться AWS Lambda, а AWS Lambda будет отправлять почту при каждом запуске.
Базовая блок-схема для этого показана ниже —
Подтвердите идентификатор электронной почты, используя AWS SES
Войдите в AWS и перейдите в сервис AWS SES, как показано ниже —
Теперь нажмите Simple Email Service, как показано на рисунке —
Нажмите Адреса электронной почты слева, как показано на рисунке —
Он отображает кнопку Подтвердить новый адрес электронной почты . Нажмите на это.
Введите адрес электронной почты, который вы хотите проверить. Нажмите кнопку Подтвердить этот адрес электронной почты . На этот идентификатор электронной почты вы получите письмо от AWS с темой электронного письма: Amazon Web Services — запрос подтверждения адреса электронной почты в регионе Восток США (Северная Вирджиния)
Нажмите на ссылку, указанную в письме, чтобы подтвердить адрес электронной почты. После проверки будет отображаться идентификатор электронной почты следующим образом:
Создать роль для использования AWS SES, Cloudwatch и AWS Lambda
Вы также можете создать роль, которая дает разрешение на использование услуг. Для этого перейдите в IAM и выберите Роль. Добавьте необходимые политики и создайте роль. Обратите внимание, что роль, созданная здесь, — это события с лямбдой .
Создать лямбда-функцию для отправки электронной почты
Вам нужно будет выполнить шаги, чтобы создать функцию Lambda, используя время выполнения в качестве nodejs.
Теперь добавьте триггер к лямбде, как показано на рисунке —
Добавьте детали в CloudWatch Events Trigger, как показано ниже —
Обратите внимание, что событие будет запускаться через каждые 5 минут в соответствии с созданным триггером правила.
Лямбда-код для отправки электронной почты приведен ниже —
var aws = require('aws-sdk'); var ses = new aws.SES({ region: 'us-east-1' }); exports.handler = function(event, context, callback) { var eParams = { Destination: { ToAddresses: ["[email protected]"] }, Message: { Body: { Text: { Data: "this mail comes from aws lambda event scheduling" } }, Subject: { Data: "Event scheduling from aws lambda" } }, Source: "[email protected]" }; console.log('===SENDING EMAIL==='); var email = ses.sendEmail(eParams, function(err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); console.log("EMAIL CODE END"); console.log('EMAIL: ', email); context.succeed(event); callback(null, "email is send"); } }); };
Теперь нам нужен сервис AWS SES. Вы можете добавить это, используя код, показанный ниже —
var aws = require('aws-sdk'); var ses = new aws.SES({ region: 'us-east-1' });
Чтобы отправить почту с узлаjjs , мы создали объект eParams, который имеет такие детали, как пример почты, идентификатор почты и тело с сообщением следующим образом:
var eParams = { Destination: { ToAddresses: ["[email protected]"] }, Message: { Body: { Text: { Data: "this mail comes from aws lambda event scheduling" } }, Subject: { Data: "Event scheduling from aws lambda" } }, Source: "[email protected]" };
Лямбда-код для отправки электронной почты выглядит следующим образом —
var email = ses.sendEmail(eParams, function(err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); console.log("EMAIL CODE END"); console.log('EMAIL: ', email); context.succeed(event); callback(null, "email is send"); } });
Теперь давайте сохраним эту функцию Lambda и проверим идентификатор электронной почты на наличие писем. На приведенном ниже снимке экрана показано, что письмо отправляется из AWS Lambda через каждые 5 минут.
Использование лямбда-функции с Amazon SNS
Amazon SNS — это сервис, используемый для push-уведомлений. В этой главе мы объясним работу AWS Lambda и Amazon SNS с помощью примера, где будут выполняться следующие действия:
-
Создайте тему в сервисе SNS и используйте AWS Lambda Добавить темы в CloudWatch
-
Отправьте текстовое сообщение SNS на указанный номер телефона.
Создайте тему в сервисе SNS и используйте AWS Lambda Добавить темы в CloudWatch
Отправьте текстовое сообщение SNS на указанный номер телефона.
реквизиты
Чтобы создать тему в сервисе SNS и использовать AWS Lambda Add Topics to CloudWatch, нам не нужно выполнять шаги, указанные ниже:
- Создать тему в SNS
- Создать роль для разрешения в IAM
- Создать лямбда-функцию AWS
- Опубликовать в теме, чтобы активировать триггер
- Проверьте детали сообщения в сервисе CloudWatch.
Чтобы отправить текстовое сообщение SNS на указанный номер телефона, нам нужно сделать следующее:
- Добавьте код в AWS Lambda, чтобы отправить сообщение на свой телефон.
пример
В этом примере мы создадим тему в SNS. Когда данные вводятся в тему для публикации, запускается AWS Lambda. Детали темы регистрируются в CloudWatch, и AWS Lambda отправляет сообщение по телефону.
Вот базовая блок-схема, которая объясняет то же самое —
Создать тему в SNS
Чтобы создать тему в SNS, вам нужно будет выполнить следующие шаги:
Шаг 1
Войдите в консоль AWS и перейдите к сервису SNS в Amazon, как показано ниже —
Шаг 2
Нажмите Simple Notification Service и создайте в нем тему .
Шаг 3
Затем вы должны нажать кнопку Создать новую тему , как показано на рисунке —
Шаг 4
Введите название темы и отображаемое имя и нажмите « Создать тему» . Вы должны увидеть название темы на дисплее следующим образом:
Создать роль для разрешения в IAM
Чтобы создать роль для работы с сервисом AWS Lambda и SNS, нам необходимо войти в консоль AWS. Затем выберите IAM из сервисов Amazon и щелкните роль с левой стороны, как показано ниже.
Обратите внимание, что мы добавили политики для SNS, Lambda и CloudWatch. Добавьте rolename и нажмите кнопку Создать роль, чтобы завершить процесс создания роли.
Создать лямбда-функцию AWS
В этом разделе мы разберемся, как создать лямбда-функцию AWS, используя nodejs в качестве среды выполнения.
Для этого войдите в консоль AWS и выберите AWS Lambda из сервисов AWS. Добавьте имя функции, сведения о роли и т. Д. И создайте лямбда-функцию AWS, как показано на рисунке.
Добавить SNS Trigger
Чтобы добавить триггер SNS, введите сведения о конфигурации SNS, как показано на рисунке —
Затем выберите тему SNS и добавьте триггер в функцию AWS Lambda, как показано ниже:
Затем добавьте лямбда-код AWS, указанный ниже:
exports.handler = function(event, context, callback) { console.log("AWS lambda and SNS trigger "); console.log(event); const sns = event.Records[0].Sns.Message; console.log(sns) callback(null, sns); };
В приведенном выше коде event.Records [0] .Sns.Message предоставляет добавленные детали сообщения. Мы добавили журналы консоли, чтобы увидеть их в CloudWatch. Теперь сохраните функцию Lambda с необходимой памятью и распределением времени.
Опубликовать в теме, чтобы активировать триггер
Напомним, что мы уже создали тему в SNS на шаге 1. Теперь мы опубликуем эту тему и увидим подробности в CloudWatch, которые будут запущены AWS Lambda.
Опубликовать в теме
Сначала выберите название темы, которую вы хотите опубликовать. Нажмите кнопку « Опубликовать в теме» —
Введите тему и детали сообщения, как показано ниже —
Вы также можете выбрать формат сообщения JSON для отправки в стиле JSON . Нажмите кнопку Опубликовать сообщение в конце экрана.
Проверьте детали сообщения в сервисе CloudWatch
Войдите в консоль AWS и откройте сервис CloudWatch. Нажмите на журналы с левой стороны и выберите журналы для созданной функции лямбда AWS. Вы можете найти следующий экран для журналов с сообщениями, созданными как показано выше —
Добавьте код в AWS Lambda, чтобы отправить сообщение на телефон
Здесь будет использоваться обмен текстовыми сообщениями SNS для отправки сообщений на телефон с помощью AWS Lambda. Вы можете использовать следующий код для обновления лямбда-кода AWS следующим образом:
const aws = require("aws-sdk"); const sns = new aws.SNS({ region:'us-east-1' }); exports.handler = function(event, context, callback) { console.log("AWS lambda and SNS trigger "); console.log(event); const snsmessage = event.Records[0].Sns.Message; console.log(snsmessage); sns.publish({ Message: snsmessage, PhoneNumber: '+911212121212' }, function (err, data) { if (err) { console.log(err); callback(err, null); } else { console.log(data); callback(null, data); } }); };
Мы добавили AWS SDK и сервис SNS для отправки сообщений. Сообщение о событии от SNS отправляется в виде текстового сообщения на указанный номер телефона.
Обратите внимание на следующий код, например:
sns.publish({ Message: snsmessage, PhoneNumber: '+911212121212' }, function (err, data) { if (err) { console.log(err); callback(err, null); } else { console.log(data); callback(null, data); } });
Введите тему сейчас, чтобы увидеть сообщение в cloudwatch и номер телефона, указанный выше.
Нажмите Опубликовать сообщение, чтобы опубликовать сообщение. Вы видите сообщение на номер телефона, указанный ниже —
Использование лямбда-функции с CloudTrail
AWS CloudTrail — это сервис, доступный в Amazon, который помогает регистрировать все действия, выполняемые в консоли AWS. Он регистрирует все вызовы API и сохраняет историю, которая может быть использована позже для целей отладки. Обратите внимание, что мы не можем запустить Lambda из CloudTrail. Вместо этого CloudTrail хранит всю историю в виде журналов в корзине S3, и мы можем запустить AWS Lambda из S3. Как только какие-либо журналы будут обработаны, AWS Lambda будет срабатывать всякий раз, когда какие-либо журналы добавляются в корзину S3.
реквизиты
Перед началом работы с AWS CloudTrail, S3 и AWS Lambda необходимо выполнить следующее:
- Создать корзину S3 для хранения логов CloudTrail
- Создать сервис SNS
- Создайте след в CloudTrail и назначьте ведро S3 и сервис SNS
- Создать роль IAM с разрешения.
- Создать лямбда-функцию aws
- Конфигурация AWS Lambda
пример
Давайте рассмотрим пример, который показывает работу AWS CloudTrail, S3 и AWS Lambda. Здесь мы создадим сегмент в S3, в котором будут храниться все журналы для любого взаимодействия, выполняемого в консоли AWS. Давайте создадим тему SNS и опубликуем ее. Для этого действия журналы будут занесены в файл S3. Будет запущена AWS lambda, которая отправит почту с помощью сервиса Amazon SES.
Блок-схема для объяснения этого процесса показана ниже:
Создать S3 Bucket для хранения логов CloudTrail
Перейдите в консоль AWS и щелкните сервис S3. Нажмите Create bucket и введите имя bucket, в котором вы хотите хранить журналы cloudtrail, как показано на рисунке —
Заметьте, что здесь мы создали облачные трассовые пилы S3 для хранения логов.
Создать сервис SNS
Перейдите в консоль AWS и нажмите « Сервис простых уведомлений» . Выберите темы слева и нажмите кнопку «Создать новую тему».
Мы создали тему под названием displaytrail, чтобы опубликовать тему. Его детали будут храниться в S3bucket, который создан выше.
Создайте Trail в Cloudtrail и назначьте S3 Bucket и службу SNS.
Перейдите в консоль AWS и выберите сервис CloudTrail из инструментов управления, как показано на рисунке —
Нажмите Trails с левой стороны, как показано ниже —
Нажмите кнопку Создать след . Введите название следа, примените след ко всем регионам и выберите « Да» . Тогда логи будут применяться для всего региона.
Для событий «Чтение / запись» выберите « Все» . Добавьте подробности темы S3 Bucket и SNS, как показано ниже. Вы можете создать новый здесь или добавить существующий.
Обратите внимание, что есть опции, доступные для шифрования файлов журнала, включения проверки файла журнала, отправки уведомления sns для каждой доставки файла журнала и т. Д. Я использовал здесь значения по умолчанию. Вы можете разрешить шифрование файла, и он запросит ключ шифрования. Нажмите на кнопку «Создать след», когда детали будут добавлены.
Создать роль IAM с разрешением
Перейдите в консоль AWS и выберите IAM. Создайте роль с разрешениями для S3, Lambda, CloudTrail и SES для отправки электронной почты. Созданная роль, как показано ниже —
Создать лямбда-функцию AWS
Перейдите в сервис AWS и нажмите « Лямбда- сервис». Добавьте имя функции, выберите время выполнения как nodejs и выберите роль, созданную для лямбда-функции. Ниже приводится описание лямбда-функции.
Конфигурация AWS Lambda
Далее нам нужно добавить S3 в качестве триггера для созданной лямбды AWS.
Добавьте данные корзины S3, чтобы добавить триггер, и добавьте следующий лямбда-код AWS —
const aws = require("aws-sdk"); const sns = new aws.SNS({ region:'us-east-1' }); var ses = new aws.SES({ region: 'us-east-1' }); exports.handler = function(event, context, callback) { console.log("AWS lambda and SNS trigger "); console.log(event); const s3message = "Bucket Name:"+event.Records[0].s3.bucket.name+"\nLog details:"+event.Records[0].s3.object.key; console.log(s3message); var eParams = { Destination: { ToAddresses: ["[email protected]"] }, Message: { Body: { Text: { Data:s3message } }, Subject: { Data: "cloudtrail logs" } }, Source: "[email protected]" }; var email = ses.sendEmail(eParams, function(err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); console.log("EMAIL CODE END"); console.log('EMAIL: ', email); context.succeed(event); callback(null, "email is send"); } }); };
Обратите внимание, что мы берем данные о событии S3 и регистрируем информацию о событии и отправляем почту с использованием службы SES, как показано выше.
Всякий раз, когда в консоли AWS происходит какое-либо действие, журналы отправляются в корзину S3, и в то же время запускается лямбда AWS, а почта отправляется на идентификатор электронной почты, указанный в коде.
Обратите внимание, что вы можете обрабатывать журналы в соответствии с вашими потребностями в AWS Lambda.
Использование лямбда-функции с Amazon Kinesis
Сервис AWS Kinesis используется для сбора / хранения данных отслеживания в режиме реального времени, поступающих с кликов веб-сайтов, журналов, каналов социальных сетей. Мы можем запустить AWS Lambda для дополнительной обработки этих журналов.
реквизиты
Основные требования для начала работы с Kinesis и AWS Lambda:
- Создать роль с необходимыми разрешениями
- Создать поток данных в Kinesis
- Создайте функцию AWS Lambda.
- Добавить код в AWS Lambda
- Добавить данные в поток данных Kinesis
пример
Давайте поработаем над примером, в котором мы будем запускать AWS Lambda для обработки потока данных из Kinesis и отправлять почту с полученными данными.
Простая блок-схема для объяснения процесса показана ниже —
Создать роль с необходимыми разрешениями
Перейдите в консоль AWS и создайте роль.
Создать поток данных в Kinesis
Перейдите в консоль AWS и создайте поток данных в kinesis.
Есть 4 варианта, как показано. Мы будем работать над созданием потока данных в этом примере.
Нажмите Создать поток данных . Введите имя в название потока Kinesis, приведенное ниже.
Введите количество шардов для потока данных.
Детали Осколков как показано ниже —
Введите имя и нажмите кнопку Создать поток Kinesis внизу.
Обратите внимание, что для активации потока требуется определенное время.
Создать лямбда-функцию AWS
Перейдите в консоль AWS и нажмите «Лямбда». Создайте функцию AWS Lambda, как показано на рисунке —
Нажмите кнопку Создать функцию в конце экрана. Добавьте Kinesis в качестве триггера для AWS Lambda.
Добавить детали конфигурации в триггер Kinesis —
Добавьте триггер и добавьте код в AWS Lambda.
Добавление кода в AWS Lambda
Для этой цели мы будем использовать nodejs во время выполнения. Мы отправим почту, как только AWS Lambda сработает с потоком данных Kinesis.
const aws = require("aws-sdk"); var ses = new aws.SES({ region: 'us-east-1' }); exports.handler = function(event, context, callback) { let payload = ""; event.Records.forEach(function(record) { // Kinesis data is base64 encoded so decode here payload = new Buffer(record.kinesis.data, 'base64').toString('ascii'); console.log('Decoded payload:', payload); }); var eParams = { Destination: { ToAddresses: ["[email protected]"] }, Message: { Body: { Text: { Data:payload } }, Subject: { Data: "Kinesis data stream" } }, Source: "[email protected]" }; var email = ses.sendEmail(eParams, function(err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); console.log("EMAIL CODE END"); console.log('EMAIL: ', email); context.succeed(event); callback(null, "email is send"); } }); };
Параметр события содержит данные, введенные в поток данных кинезиса. Вышеуказанный лямбда-код aws активируется после ввода данных в поток данных kinesis.
Добавить данные в поток данных Kinesis
Здесь мы будем использовать AWS CLI для добавления потока данных кинезиса данных, как показано ниже. Для этого мы можем использовать следующую команду —
aws kinesis put-record --stream-name kinesisdemo --data "hello world" -- partition-key "789675"
Затем активируется AWS Lambda и отправляется письмо.
Использование лямбда-функции с пользовательскими приложениями
Мы можем использовать лямбда-функцию AWS для обработки сгенерированных событий пользовательским приложением следующими двумя способами:
- Использование AWS Console
- Использование AWS CLI
Использование AWS Console
С консоли AWS мы будем работать с событиями AWS и Lambda. Для этого перейдите в консоль AWS и создайте лямбда-функцию.
Далее, давайте добавим код для AWS Lambda —
exports.handler = (event, context, callback) => { // TODO implement console.log("Hello => "+ event.name); console.log("Address =>"+ event.addr); callback(null, 'Hello '+event.name +" and address is "+ event.addr); };
Обратите внимание, что в приведенном выше коде мы печатаем имя и адрес, используя событие.
Подробная информация о событии будет предоставлена с использованием тестового события, созданного следующим образом:
Теперь сохраните событие и протестируйте его.
Соответствующий вывод журнала, как показано здесь —
Использование AWS CLI
Мы можем вызвать вышеуказанную функцию с помощью AWS CLI следующим образом:
aws lambda invoke --function-name "lambdauserevent" --log-type Tail -- payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt
Подробности события передаются в полезную нагрузку, а выходные данные хранятся в C: \ clioutput \ outputfile.txt. следующим образом —
input.txt
{"name":"Roy Singh", "addr":"Mumbai"}
При вызове Lambda с помощью AWS CLI вы можете увидеть следующее:
Аналогичным образом, если вы хотите проверить AWS Lambda для любой другой службы AWS, вы можете сделать это, используя событие test в консоли AWS и AWS CLI. Пример события для сервиса SNS показан ниже —
{ "Records": [{ "EventVersion": "1.0", "EventSubscriptionArn": "arnid", "EventSource": "aws:sns", "Sns": { "SignatureVersion": "1", "Timestamp": "1970-01-01T00:00:00.000Z", "Signature": "EXAMPLE", "SigningCertUrl": "EXAMPLE", "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e", "Message": "Hello from SNS!", "MessageAttributes": { "Test": { "Type": "String", "Value": "TestString" }, "TestBinary": { "Type": "Binary", "Value": "TestBinary" } }, "Type": "Notification", "UnsubscribeUrl": "EXAMPLE", "TopicArn": "topicarn", "Subject": "TestInvoke" } }] }
Давайте добавим пример события, показанный выше, и протестируем его, как показано ниже:
В AWS Lambda код напечатает сообщение SNS, как показано в примере, приведенном ниже —
exports.handler = (event, context, callback) => { // TODO implement console.log(event.Records[0].Sns.Message); callback(null, event.Records[0].Sns.Message);};
Давайте вызовем то же самое с помощью AWS CLI. Давайте сохраним событие в файле и используем его для полезной нагрузки с помощью показанной команды:
aws lambda invoke --function-name "lambdauserevent" --log-type Tail -- payload file://C:\clioutput\sns.txt C:\clioutput\snsoutput.txt
Использование AWS Lambda @ Edge с CloudFront
Lambda @ Edge является дополнением к сервису AWS Lambda Compute Service, который используется для настройки контента, предоставляемого облачным фронтом.
Блок-схема, показывающая работу AWS Lambda с облачным фронтом от AWS, показана ниже —
Существует четыре способа использования AWS Lambda:
-
Viewer Request — Конечный пользователь делает запрос под названием Viewer Request для CloudFront.
-
Запрос отправления — CloudFront направляет запрос отправителю
-
Ответ источника — CloudFront получает ответ от источника
-
Ответ зрителя — CloudFront отправляет ответ зрителю
Viewer Request — Конечный пользователь делает запрос под названием Viewer Request для CloudFront.
Запрос отправления — CloudFront направляет запрос отправителю
Ответ источника — CloudFront получает ответ от источника
Ответ зрителя — CloudFront отправляет ответ зрителю
Мы можем использовать Lambda @ Edge для следующих целей —
-
Для изменения заголовков по запросу и времени ответа.
-
Добавьте куки в заголовки. Выполните тестирование AB на основе запроса и ответа.
-
Перенаправьте URL на другой сайт, основываясь на деталях заголовка.
-
Мы можем получить пользовательский агент из заголовков и узнать детали браузера, ОС и т. Д.
Для изменения заголовков по запросу и времени ответа.
Добавьте куки в заголовки. Выполните тестирование AB на основе запроса и ответа.
Перенаправьте URL на другой сайт, основываясь на деталях заголовка.
Мы можем получить пользовательский агент из заголовков и узнать детали браузера, ОС и т. Д.
реквизиты
Чтобы начать работать с CloudFront и Lambda @ Edge, нам нужно следующее:
-
Создать хранилище S3 с подробной информацией о файле
-
Создайте роль, которая позволит работать с CloudFront и Lambda @ Edge
-
Создать дистрибутив CloudFront
-
Создать лямбда-функцию
-
Добавить детали лямбда-функции в облачный фронт
-
Проверьте URL-адрес облачного фронта в браузере
Создать хранилище S3 с подробной информацией о файле
Создайте роль, которая позволит работать с CloudFront и Lambda @ Edge
Создать дистрибутив CloudFront
Создать лямбда-функцию
Добавить детали лямбда-функции в облачный фронт
Проверьте URL-адрес облачного фронта в браузере
Мы будем работать над примером с CloudFront и Lambda @ Egde, в котором мы будем размещать страницу и изменять ответ при обнаружении как настольного компьютера, так и устройства.
Создать хранилище S3 с подробными сведениями о файле
Войдите в консоль AWS, создайте корзину в S3 и добавьте . HTML- файл, который вы хотите отобразить.
Нажмите на S3 и создайте корзину, как показано ниже —
Теперь нажмите кнопку « Создать корзину» и добавьте детали корзины, как показано ниже —
Нажмите кнопку « Создать» и загрузите HTML-файл.
Создать роль
Перейдите в консоль AWS и нажмите IAM .
Теперь нажмите Роли -> Создать роль , как показано на рисунке —
Выберите разрешение для S3, Lambda и Cloudfront . Хорошей практикой является создание политики, дающей разрешение только на требуемую функцию хранения с использованием сведений ARN.
В приведенном ниже примере мы показываем разрешение на полный доступ . Политики для роли с именем роли для облачного фронта добавляются, как показано выше. Нажмите на Создать роль.
Вся политика, необходимая для lambda @ edge и cloudfront, показана выше. Здесь необходимо выполнить дополнительный шаг, поскольку в случае облачного фронта URL-адрес будет доступен по всему региону, и для этого нужны доверительные отношения между службами, которые мы используем.
Теперь, для созданной роли, нажмите на вкладку Доверительные отношения, как показано на рисунке —
Нажмите на Изменить доверительные отношения, как показано ниже —
Он отображает документ политики. Нам нужно добавить другие сервисы в Принципал -> Сервис, которые мы планируем использовать. Окончательный документ о политике доверия показан ниже:
Нажмите кнопку « Обновить политику доверия» , чтобы сохранить изменения.
Создать дистрибутив CloudFront
Перейти к сервису CloudFront, как показано ниже —
Нажмите на сервис CloudFront и нажмите Создать рассылку —
Настройки источника, Настройки поведения и Настройки распространения
Давайте посмотрим на эти настройки один за другим —
Настройки происхождения
Различные параметры настроек источника описаны ниже:
Исходное доменное имя — это имя корзины S3, в которой мы сохранили html-файлы. Мы также можем хранить изображения, если они есть, в корзине S3, создавая папки по нашему выбору.
Origin Path — Здесь вам нужно ввести имя папки, в которой хранятся файлы. В настоящее время у нас нет этой папки, поэтому мы пока оставим ее пустой.
Origin ID — Заполняется, когда выбрано имя домена происхождения. Вы можете изменить идентификатор в соответствии с вашим выбором.
Ограничить доступ к корзине — здесь мы выберем опцию yes . Здесь нам нужна безопасность для корзины S3, чтобы никто не имел доступа к корзине S3. Для этой опции есть еще несколько опций, таких как Идентификация доступа к источнику, Комментарий и Предоставление разрешения на чтение в корзине .
Идентификация доступа к источнику — Мы использовали опцию создания нового идентификатора. Вы также можете выбрать существующую личность. Это создает новую личность, которая используется CloudFront для чтения деталей из корзины S3.
Grand Read Permission on Bucket — для этого выберите опцию Да .
Исходные пользовательские заголовки — здесь мы оставим пустые заголовки, поскольку нам не нужны детали прямо сейчас.
Далее, давайте обсудим и заполните параметры поведения для распространения Cloudront —
Теперь выберите протокол — https или http и опцию кэширования. Обратите внимание, что кэширование по умолчанию — 86400 или 24 часа. Вы можете изменить это значение согласно требованию.
Нажмите Object Caching (опция настройки), чтобы изменить кэширование. Вы можете использовать плавную трансляцию в случае, если на вашей странице есть видео. Здесь мы оставляем доступной опцию по умолчанию. Как только лямбда-функция будет создана, ее детали будут добавлены.
Детали настроек распространения показаны ниже —
Различные параметры настройки распространения описаны ниже —
Ценовой класс — имеет такие детали, как происхождение трафика пользователей. Обратите внимание, что здесь мы выбрали вариант по умолчанию — Использовать все крайние местоположения.
AWS WAF Web ACL — для выбора брандмауэра веб-приложения. Здесь у этого есть выбор как Ни один . Во-первых, нам нужно создать брандмауэр в AWS. Это обеспечивает безопасность сайта.
Альтернативные доменные имена — здесь вы можете указать доменное имя, если у вас есть.
Сертификат SSL — здесь есть все детали, которые нужно выбрать для сертификата SSL. Мы оставим по умолчанию.
Корневой объект по умолчанию — здесь мы будем указывать имя файла, которое мы загрузили в S3. Для этого нам нужен контент из .html, который будет отображаться по умолчанию.
В остальном мы сохраним настройки по умолчанию.
Нажмите кнопку Создать рассылку, чтобы добавить рассылку.
Обратите внимание, что рассылка займет некоторое время, чтобы показать статус развернутого.
Создать лямбда-функцию AWS
Перейдите в консоль AWS и создайте функцию Lambda.
В лямбда-коде AWS мы возьмем заголовки запроса и проверим пользовательский агент. Если пользовательский агент с рабочего стола, мы изменим ответ на отображаемое сообщение как «DESKTOP: Добро пожаловать в AWS Lambda с Cloudfront!», А если устройство будет «МОБИЛЬНЫЕ УСТРОЙСТВА: Привет от Lambda @ Edge!»
Соответствующий лямбда-код AWS показан ниже:
let content = ` <\!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Simple Lambda@Edge Static Content Response</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <h1>MOBILE DEVICES : Hello from Lambda@Edge!</h1> </body> </html> `; let content1 = ` <\!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Simple Lambda@Edge Static Content Response</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <h1>DESKTOP : Welcome to AWS Lambda with Cloudfront!</h1> </body> </html> `; exports.handler = (event, context, callback) => { let request = event.Records[0].cf.request; let finalrequest = JSON.stringify(request); let headers = request.headers; let useragent = JSON.stringify(headers["user-agent"][0].value); let str = ""; if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i.test(useragent)) { str = content; } else { str = content1; } const response = { status: '200', statusDescription: 'OK', body: str+useragent, }; callback(null, response); };
Теперь сохраните лямбда-функцию. Обратите внимание, что нам нужно опубликовать функцию Lambda, чтобы ее можно было использовать со всеми регионами. Чтобы опубликовать, нам нужно сделать следующее —
В раскрывающемся списке «Действия» выберите « Опубликовать новую версию», как показано ниже.
Если вы нажмете Опубликовать новую версию , отобразится следующий экран —
Теперь введите описание версии и нажмите « Опубликовать» . ARN отобразит версию лямбда-функции AWS, созданной, как показано ниже:
Добавьте триггер CloudFront в новую версию, созданную, как показано ниже —
Теперь добавьте детали конфигурации для CloudFront. Событие CloudFront имеет параметр для запроса средства просмотра, запроса источника, ответа источника и ответа средства просмотра .
Далее выберите дистрибутив CloudFront, созданный ранее. Из событий мы выберем запрос зрителя . На основании запроса средства просмотра будет выбран рабочий стол / устройство от пользовательского агента, и ответ будет изменен. Затем добавьте детали триггера.
После добавления триггера нам нужно дождаться развертывания дистрибутива из CloudFront.
Как только статус меняется на « Развернутый» , мы можем протестировать URL-адрес CloudFront и проверить доменное имя в браузере.
Отображение в браузере на рабочем столе, как показано ниже. Здесь мы распечатали user-agent из события viewer-request.
Это дисплей в мобильном устройстве.
Таким образом, в приведенном выше примере мы использовали Lambda @ Edge для изменения ответа на настольном и мобильном устройстве.
Мониторинг и устранение неисправностей с помощью Cloudwatch
Функции, созданные в AWS Lambda, отслеживаются Amazon CloudWatch. Это помогает регистрировать все запросы к функции Lambda, когда она запускается.
Учтите, что следующий код загружен в AWS Lambda с именем функции lambda и cloudwatch .
exports.handler = (event, context, callback) => { // TODO implement console.log("Lambda monitoring using amazon cloudwatch"); callback(null, 'Hello from Lambda'); };
Когда функция будет протестирована или запущена, вы должны увидеть запись в Cloudwatch. Для этого перейдите в сервисы AWS и нажмите CloudWatch.
Выберите журналы с левой стороны.
Когда вы нажимаете « Журналы» , в вашей учетной записи создается функция « Группы журналов» AWS Lambda. Выберите любую функцию AWS Lambda и проверьте детали. Здесь мы ссылаемся на лямбда-функцию с именем: lambdaandcloudwatch . Журналы, добавленные в функцию Lambda, отображаются здесь, как показано ниже —
Теперь давайте добавим триггер S3 к функции Lambda и посмотрим подробности журналов в CloudWatch, как показано ниже:
Давайте обновим лямбда-код AWS для отображения загруженного файла и имени сегмента, как показано в приведенном ниже коде —
exports.handler = (event, context, callback) => { // TODO implement console.log("Lambda monitoring using amazon cloudwatch"); const bucket = event.Records[0].s3.bucket.name; const filename = event.Records[0].s3.object.key; const message = `File is uploaded in - ${bucket} -> ${filename}`; console.log(message); callback(null, 'Hello from Lambda'); };
Теперь добавьте файл в s3storetestlambdaEventbucket, как показано на рисунке —
Когда файл загружен, запускаются функции AWS Lambda, и сообщения консольного журнала из лямбда-кода отображаются в CloudWatch, как показано ниже —
Если есть какая-либо ошибка, CloudWatch выдает подробности ошибки, как показано ниже —
Обратите внимание, что мы неправильно указали имя сегмента в лямбда-коде AWS, как показано ниже.
exports.handler = (event, context, callback) => { // TODO implement console.log("Lambda monitoring using amazon cloudwatch"); const bucket = event.Records[0].bucket.name; const filename = event.Records[0].s3.object.key; const message = `File is uploaded in - ${bucket} -> ${filename}`; console.log(message); callback(null, 'Hello from Lambda'); };
Ссылка на имя корзины из события неверна. Таким образом, мы должны увидеть ошибку, отображаемую в CloudWatch, как показано ниже —
CloudWatch Metrics
Подробности выполнения лямбда-функции можно увидеть в метриках. Нажмите Метрики, отображаемые в левой части.
Детали графика для лямбда-функции lambdaandcloudwatch приведены ниже:
В нем приводятся такие сведения, как продолжительность, в течение которой выполняется лямбда-функция, количество ее вызовов и ошибки из лямбда-функции.
AWS Lambda — дополнительный пример
До сих пор мы видели работу AWS Lambda с сервисами AWS. Основываясь на этих знаниях, давайте создадим простую форму регистрации пользователей и разместим данные с помощью API-шлюза в AWS Lambda. AWS Lambda получит данные из события или триггера шлюза API и добавит эти данные в таблицу DynamoDB.
пример
Давайте рассмотрим пример и выполним следующие функции на нем —
-
Создать таблицу DynamoDB
-
Создать форму для регистрации пользователя
-
Создайте шлюз AWS Lambda и API для отправки сообщения на телефон с помощью сервиса AWS SNS
-
Создайте AWS Lambda и API-шлюз для данных формы POST и вставьте их в таблицу DynamoDb
-
Создать AWS Lambda и API-шлюз для чтения данных из таблицы Dynamodb
-
Окончательная работа формы регистрации пользователя
Создать таблицу DynamoDB
Создать форму для регистрации пользователя
Создайте шлюз AWS Lambda и API для отправки сообщения на телефон с помощью сервиса AWS SNS
Создайте AWS Lambda и API-шлюз для данных формы POST и вставьте их в таблицу DynamoDb
Создать AWS Lambda и API-шлюз для чтения данных из таблицы Dynamodb
Окончательная работа формы регистрации пользователя
Создать таблицу DynamoDB
Введенные данные будут сохранены в таблице DynamodDB. Мы будем использовать шлюз API для обмена данными, введенными с помощью AWS Lambda, а позже AWS Lambda добавит детали в DynamoDB.
Вы можете использовать следующие детали для создания таблицы DynamodDB в консоли AWS. Сначала перейдите в Сервис AWS и нажмите DynamoDB . Нажмите Table, чтобы создать таблицу, как показано ниже —
Вы можете использовать ARN для создания политики для DynamoDB, которая будет использоваться с AWS Lambda.
Перейдите в IAM и выберите Политики . Нажмите Создать политику , выберите сервис как DynamodDB, как показано ниже —
Нажмите Все действия DynamoDB, как показано выше. Выберите ресурс и введите ARN для таблицы, как показано ниже —
Теперь нажмите Add, как показано ниже.
Если вы нажмете кнопку « Обзор политики» в конце экрана, вы увидите следующее окно —
Введите название политики и нажмите кнопку « Создать политику» в конце страницы. Теперь нам нужно создать роль для использования с Lambda. Нам нужны разрешения для DynamoDB, APIGateway и Lambda.
Перейдите в сервисы AWS и выберите IAM. Выберите Роли с левой стороны и добавьте необходимые роли.
Введите имя роли и нажмите « Создать роль» . Созданная роль — роль для примера .
Создать форму для регистрации пользователя
Здесь отображается форма регистрации пользователя для ввода и чтения данных из таблицы DynamodB.
Создание AWS Lambda и API-шлюза для отправки OTP-сообщения на телефон с использованием сервиса SNS
Если вы видите форму регистрации пользователя, есть кнопка подтверждения телефона . Пользователь должен ввести номер телефона и нажать кнопку подтверждения телефона , чтобы подтвердить номер телефона.
Для этого —
Когда пользователь нажимает эту кнопку, вызывается метод публикации шлюза API, который содержит сведения о телефоне, и запускается внутренняя AWS Lambda.
Затем AWS Lambda отправляет OTP на номер телефона, введенный с использованием сервиса AWS SNS.
Пользователь получает OTP и должен ввести этот номер OPT.
Текстовое поле для ввода OTP появится после ввода номера телефона и нажатия кнопки подтверждения телефона .
OTP, полученный от AWS Lambda, и OTP, введенный пользователем, должны совпадать, чтобы пользователь мог отправить форму регистрации пользователя.
Простая блок-схема, которая объясняет работу проверки телефона, показана здесь —
Созданная лямбда-функция AWS выглядит так:
Соответствующий лямбда-код AWS приведен ниже.
const aws = require("aws-sdk"); const sns = new aws.SNS({ region:'us-east-1' }); exports.handler = function(event, context, callback) { let phoneno = event.mphone; let otp = Math.floor(100000 + Math.random() * 900000); let snsmessage = "Your otp is : "+otp; sns.publish({ Message: snsmessage, PhoneNumber: "+91"+phoneno }, function (err, data) { if (err) { console.log(err); callback(err, null); } else { console.log(data); callback(null, otp); } }); };
Обратите внимание, что мы используем сервис SNS для отправки кода OTP. Этот код используется для проверки номера мобильного телефона, введенного пользователем в форму регистрации пользователя. API-шлюз, созданный для проверки телефона выше, выглядит следующим образом:
Данная лямбда-функция является примером проверки телефона . Мы берем данные мобильного телефона, которые будут использоваться в AWS Lambda. Затем AWS Lambda отправит код OTP на указанный номер мобильного телефона.
Создайте AWS Lambda и API-шлюз для данных формы POST и вставьте их в таблицу DynamoDB
Для формы регистрации пользователя все поля являются обязательными. Выполняется вызов AJAX, в котором данные, введенные в форму, публикуются по URL-адресу шлюза API.
Простая блок-схема, которая объясняет работу кнопки отправки, показана здесь —
После заполнения формы кнопка отправки вызовет шлюз API, который активирует AWS Lambda. AWS Lambda получит информацию о форме из события или шлюза API, и данные будут вставлены в таблицу DynamodDB.
Давайте разберемся в создании API Gateway и AWS Lambda.
Сначала перейдите в сервисы AWS и нажмите Лямбда. Созданная лямбда-функция выглядит так:
Теперь, чтобы создать API-шлюз, перейдите в сервис AWS и выберите API-шлюз . Нажмите на кнопку Создать API , показанную ниже.
Введите имя API и нажмите кнопку « Создать API» , чтобы добавить API.
Теперь создан API, называемый registeruser . Выберите API и нажмите « Действия», чтобы создать ресурс .
Нажмите Создать ресурс . Теперь давайте добавим метод POST . Для этого нажмите на ресурсы, созданные слева, и в раскрывающемся списке Действия выберите метод создания . Это отобразит раскрывающийся список, как показано ниже —
Выберите метод POST и добавьте функцию Lambda, которую мы создали выше.
Нажмите кнопку Сохранить , чтобы добавить метод. Чтобы отправить детали формы в функцию Lambda lambdaexample, нам нужно добавить запрос на интеграцию, как показано ниже —
Чтобы опубликовать детали формы, вам нужно будет нажать Запрос интеграции . Это покажет ниже детали.
Щелкните « Шаблоны отображения тела», чтобы добавить поля формы для публикации.
Затем нажмите « Добавить шаблон сопоставления» и введите тип содержимого. Здесь мы добавили application / json в качестве типа контента. Нажмите на нее, и здесь вам нужно ввести поле в формате JSON, как показано ниже —
Теперь нажмите кнопку Сохранить и разверните API, как показано ниже —
Вот API, созданный для POST, который будет использоваться внутри нашего файла .html. Обратите внимание, что нам нужно включить CORS для созданного ресурса. Для вызова ajax будет использоваться URL-адрес шлюза API, поэтому CORS должен быть включен.
Выберите методы, на которых вы хотите включить CORS. Нажмите Включить CORS и замените существующие заголовки CORS .
Он отображает экран подтверждения следующим образом —
Нажмите Да, замените существующие значения, чтобы включить CORS.
Лямбда-код AWS для API-интерфейса POST выглядит так:
const aws = require("aws-sdk"); const docClient = new aws.DynamoDB.DocumentClient({ region:'us-east-1' }); exports.handler = function(event, context, callback) { console.log(event); console.log("Entering Data"); var data = { TableName : "registeruser", Item : { first_name:event.fname, last_name:event.lname, emailid:event.emailid, mobile_no : event.mphone, otp:event.otp, username:event.uname, password:event.passwd, confirm_password:event.cpasswd } } docClient.put(data, function(err, value) { if (err) { console.log("Error"); callback(err, null); } else { console.log("data added successfully"); callback(null, value); } }); }
Параметр события в обработчике лямбды AWS будет содержать все детали, которые были добавлены ранее в запросе интеграции POST. Детали из события добавляются в таблицу DynamodDB, как показано в коде.
Теперь нам нужно получить подробности обслуживания из AWS-SDK, как показано ниже —
const aws = require("aws-sdk"); const docClient = new aws.DynamoDB.DocumentClient({ region:'us-east-1' }); var data = { TableName : "registeruser", Item : { first_name:event.fname, last_name:event.lname, emailid:event.emailid, mobile_no : event.mphone, otp:event.otp, username:event.uname, password:event.passwd, confirm_password:event.cpasswd } } docClient.put(data, function(err, value) { if (err) { console.log("Error"); callback(err, null); } else { console.log("data added successfully"); callback(null, value); } });
Создание AWS Lambda и API-шлюза для чтения данных из таблицы DynamodDB
Теперь мы создадим функцию AWS Lambda для чтения данных из таблицы DynamoDB. Мы запустим APIGateway для функции AWS Lambda, которая отправит данные в HTML-форму.
Созданная лямбда-функция AWS показана ниже:
Соответствующий лямбда-код AWS выглядит следующим образом:
const aws = require("aws-sdk"); const docClient = new aws.DynamoDB.DocumentClient({ region:'us-east-1' }); exports.handler = function(event, context, callback) { var readdata = { TableName : "registeruser", Limit : 10 } docClient.scan(readdata, function(err, data) { if (err) { console.log("Error"); callback(err, null); } else { console.log("Data is " + data); callback(null, data); } }); }
Здесь данные считываются из таблицы DynamoDB и передаются обратному вызову. Теперь мы создадим APIGateway и добавим функцию AWS Lambda в качестве триггера.
Мы добавим метод get в API, созданный ранее.
Добавлена лямбда-функция — пример lambdareaddata . Нажмите Сохранить, чтобы сохранить метод и развернуть API.
Окончательная работа формы регистрации пользователя
Окончательное отображение формы показано ниже:
Теперь введите детали, как показано выше. Обратите внимание, что кнопка отправки отключена. Он будет включен только тогда, когда введены все детали, как показано на рисунке —
Теперь введите номер мобильного телефона и нажмите кнопку подтверждения телефона . Появится предупреждающее сообщение «OTP отправлено на мобильный телефон, введите OTP для продолжения» . ОТП отправляется на номер мобильного телефона следующим образом —
Введите OTP и оставшиеся детали и отправьте форму.
Данные в таблице регистраторов DynamoDB после отправки выглядят так:
Детали кода приведены ниже.
Example1.html
<html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script type="text/javascript" src="formdet.js"></script> <style> input[type=text], input[type=password],button { width: 100%; padding: 5px 5px; margin: 5px 0; box-sizing: border-box; } #maincontainer { width: 80%; margin: auto; padding: 10px; } div#userregistration { width: 60%; float: left; } div#userdisplay { margin-left: 60%; } </style> </head> <body> <div id="maincontainer"> <div id="userregistration"> <h1>User Registration Form</h1> <table border="0"> <tr> <td><b>First Name<span style="color:red;">*</span> : </b></td> <td><input type="text" value="" name="fname" id="fname" /></td> <td id="tdfname" style="display:none;"><span style="color:red;">Enter First Name</span></td> </tr> <tr> <td><b>Last Name<span style="color:red;">*</span> : </b></td> <td><input type="text" value="" name="lname" id="lname" /></td> <td id="tdlname" style="display:none;"><span style="color:red;">Enter Last Name</span></td> </tr> <tr> <td><b>Email Id<span style="color:red;">*</span> : </b></td> <td><input type="text" value="" name="emailid" id="emailid" /></td> <td id="tdemailid" style="display:none;"><span style="color:red;">Enter Email</span></td> </tr> <tr> <td><b>Mobile No<span style="color:red;">*</span> : </b></td> <td><input type="text" name="mphone" id="mphone"/></td> <td id="tdmphone" style="display:none;"><span style="color:red;">Enter Mobile Number</span></td> </tr> <tr> <td></td> <td><button id="validatephone">validate phone</button></td> <td></td> </tr> <tr id="otpdiv" style="display:none;"> <td><b>Enter OTP<span style="color:red;">*</span>:</b></td> <td><input type="text" value="" name="otp" id="otp" /></td> <td id="tdotp" style="display:none;"><span style="color:red;">Enter OTP</span></td> </tr> <tr> <td><b>Username<span style="color:red;">*</span>: </b></td> <td><input type="text" value="" name="uname" id="uname"/></td> <td id="tduname" style="display:none;"><span style="color:red;">Enter Username</span></td> </tr> <tr><td><b>Password<span style="color:red;">*</span> :</b></td> <td><input type="password" value="" name="passwd" id="passwd"/></td> <td id="tdpasswd" style="display:none;"><span style="color:red;">Enter Password</span></td> </tr> <tr><td><b>Confirm Password<span style="color:red;">*</span> :</b></td> <td><input type="password" value="" name="cpasswd" id="cpasswd"/></td> <td id="tdcpasswd" style="display:none;"><span style="color:red;">Enter Confirm Password</span></td> </tr> <tr> <td></td> <td><button name="submit" id="submit" style="display:;" disabled="true">Submit</button></td> <td></td> </tr> </table> </div> <div id="userdisplay"> <h1>User Display</h1> <table id="displaydetails" style="display:block;width:80%;padding:5px;margin:5px; border: 1px solid black;"> <tr> <td></td> <td>FirstName</td> <td>LastName</td> <td>Mobile No</td> <td>EmailID</td> </tr> </table> </div> </div> </body> </html>
formdet.js
function validateform() { var sError=""; if ($("#fname").val() === "") { $("#tdfname").css("display",""); sError++; } if ($("#lname").val() === "") { $("#tdlname").css("display",""); sError++; } if ($("#emailid").val() === "") { $("#tdemailid").css("display",""); sError++; } if ($("#mphone").val() === "") { $("#tdmphone").css("display",""); sError++; } if ($("#otp").val() === "") { $("#tdotp").css("display",""); sError++; } if ($("#uname").val() === "") { $("#tduname").css("display",""); sError++; } if ($("#passwd").val() === "") { $("#tdpasswd").css("display",""); sError++; } if ($("#cpasswd").val() === "") { $("#tdcpasswd").css("display",""); sError++; } if (sError === "") { return true; } else { return false; } } $("#fname").change(function() { if ($("#fname").val() !== "") { $("#tdfname").css("display","none"); } else { $("#tdfname").css("display",""); } }); $("#lname").change(function() { if ($("#lname").val() !== "") { $("#tdlname").css("display","none"); } else { $("#tdlname").css("display",""); } }); $("#emailid").change(function() { if ($("#emailid").val() !== "") { $("#tdemailid").css("display","none"); } else { $("#tdemailid").css("display",""); } }); $("#mphone").change(function() { if ($("#mphone").val() !== "") { $("#tdmphone").css("display","none"); } else { $("#tdmphone").css("display",""); } }); $("#otp").change(function() { if ($("#otp").val() !== "") { $("#tdotp").css("display","none"); } else { $("#tdotp").css("display",""); } }); $("#uname").change(function() { if ($("#uname").val() !== "") { $("#tduname").css("display","none"); } else { $("#tduname").css("display",""); } }); $("#passwd").change(function() { if ($("#passwd").val() !== "") { $("#tdpasswd").css("display","none"); } else { $("#tdpasswd").css("display",""); } }); $("#cpasswd").change(function() { if ($("#cpasswd").val() !== "") { $("#tdcpasswd").css("display","none"); } else { $("#tdcpasswd").css("display",""); } }); var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser"; var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate"; var otpsend = ""; function getdata() { var a = 0; $.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html(''); $("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>'); data.Items.forEach(function(registeruser) { var clr = (a%2 === 0) ? "#eee": "white"; a++; $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>'); }); }, error: function(err) { console.log(err); } }); } $(document).ready(function() { $("#otp").on("change", function() { var otpentered = $("#otp").val(); if (otpsend == otpentered) { document.getElementById("submit").disabled = false; } else { alert("OTP is not valid.Please enter the valid one or validate phone again to continue!"); document.getElementById("submit").disabled = true; } }); $("#validatephone").on("click", function() { $.ajax({ type:'POST', url:phonevalidationurl, data:JSON.stringify({ "mphone":$("#mphone").val() }), success: function(data) { $("#otpdiv").css("display", ""); alert("OTP is send to the mobile, please enter to continue"); console.log(data); otpsend = data; }, error : function(err) { $("#otpdiv").css("display", "none"); alert("Invalid mobile no."); } }); }); $("#submit").on("click", function() { if (validateform()) { $.ajax({ type:'POST', url:posturl, data:JSON.stringify({ "fname": $("#fname").val(), "lname": $("#lname").val(), "emailid":$("#emailid").val(), "mphone":$("#mphone").val(), "otp":$("#otp").val(), "uname":$("#uname").val(), "passwd":$("#passwd").val(), "cpasswd":$("#cpasswd").val() }), success: function(data) { alert("Data added successfully"); console.log(data); getdata(); } }); } }); getdata(); });
До сих пор мы выполняли AJAX-вызов API, создавали и размещали данные, как показано выше.
AJAX-вызов для добавления данных в таблицу выглядит следующим образом:
var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser"; $(document).ready(function() { $("#submit").on("click", function() { if (validateform()) { $.ajax({ type:'POST', url:posturl, data:JSON.stringify({ "fname": $("#fname").val(), "lname": $("#lname").val(), "emailid":$("#emailid").val(), "mphone":$("#mphone").val(), "otp":$("#otp").val(), "uname":$("#uname").val(), "passwd":$("#passwd").val(), "cpasswd":$("#cpasswd").val() }), success: function(data) { alert("Data added successfully"); console.log(data); getdata(); } }); } }); });
Обратите внимание, что для чтения данных вызывается функция, код которой приведен ниже —
function getdata() { var a = 0; $.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html(''); $("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>'); data.Items.forEach(function(registeruser) { var clr = (a%2 === 0) ? "#eee": "white"; a++; $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>'); }); }, error: function(err) { console.log(err); } }); }
Когда вы нажимаете кнопку подтверждения номера мобильного телефона, вызывается следующий код и отправляется номер мобильного телефона —