Учебники

AWS Lambda — Краткое руководство

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 в пяти простых шагах, показана ниже —

Блок-схема AWS лямбда

Шаг 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/ и нажмите, чтобы создать бесплатный аккаунт. Вы можете увидеть скриншот, как показано ниже —

Amazon Free Tier

Шаг 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 # , чтобы мы могли работать позже.

Visual Studio

Поддержка AWS Toolkit для Visual Studio 2017

После установки Visual Studio 2017 вам нужно будет выполнить указанные шаги для установки поддержки AWS Toolkit для Visual Studio 2017 —

Шаг 1

Перейдите на https://aws.amazon.com/visualstudio/ и загрузите инструментарий AWS для Visual Studio. Дисплей показан ниже.

Набор инструментов AWS

Обратите внимание, что пакет, загруженный для Visual Studio 2017, является пакетом vsix . Если ваша версия Visual Studio находится между 2013-2015, она установит установщик MSI . Нажмите кнопку « Скачать» , как показано ниже.

Загрузка инструментария AWS

Шаг 2

Теперь дважды щелкните загруженный пакет vsix, и он проведет вас через этапы установки, как показано ниже —

Установка AWS

После успешной установки Visual Studio вы увидите окно, как показано ниже —

Установка завершена

Шаг 3

Теперь откройте Visual Studio 2017, и вы увидите страницу приветствия от AWS, как показано ниже —

Страница приветствия AWS

Обратите внимание, что вам нужно добавить ключ доступа, секретный ключ, номер учетной записи, чтобы начать работу, и использовать сервисы AWS из Visual Studio.

AWS Lambda BoilerPlate для NodeJS

Вы можете использовать его с визуальным студийным кодом, как показано ниже.

Шаг 1

Вы можете бесплатно загрузить код Visual Studio с официального сайта: https://www.visualstudio.com/downloads/. Домашняя страница загрузок Visual Studio выглядит следующим образом —

Visual Studio Code

Шаг 2

Теперь откройте код Visual Studio, как показано ниже —

Откройте Visual Studio

Шаг 3

Для установки поддержки AWS, поддержка для nodejs доступна внутри расширений. Вы можете искать AWS, и он отобразит следующую опцию:

Поддержка Nodejs

Шаг 4

Теперь установите шаблон для AWS Lambda в nodejs, как показано на рисунке —

Boilerplate Nodejs

Шаг 5

Щелкните репозиторий и клонируйте его в Visual Studio, чтобы начать писать функцию Lambda в Visual Studio. Он перенаправляет вас в этот репозиторий, который мы можем клонировать в Visual Studio: https://github.com/loganarnett/vscode-lambda-snippets . Теперь откройте командную палитру из опции View в Visual Studio.

Палитра команд

Шаг 6

Нажмите на него и выберите git clone, как показано ниже —

Git Clone

Шаг 7

Введите URL-адрес хранилища и сохраните его по вашему выбору локально. Создайте файл index.js, как показано ниже, для работы с лямбда-функцией —

Лямбда-функция

Лямбда-сниппетс

Установка Eclipse IDE

Теперь вам нужно будет установить последнюю версию Eclipse Java EE IDE. Вы можете скачать его с официального сайта Eclipse: https://www.eclipse.org/downloads/

Установка Eclipse IDE

Eclipse Ide Java

Поддержка AWS Toolkit для Eclipse IDE

После установки Eclipse выполните следующие шаги:

Шаг 1

Перейдите на помощь в меню и нажмите Установить новое программное обеспечение .

Шаг 2

Введите https://aws.amazon.com/eclipse в текстовом поле « Работа с» в верхней части диалогового окна.

Шаг 3

Теперь выберите необходимые инструменты управления ядром AWS и другие дополнительные элементы из списка, показанного ниже.

Основные инструменты управления

Шаг 4

Теперь нажмите Next . Eclipse проведет вас через оставшиеся шаги установки, как указано в дальнейших шагах, приведенных ниже.

Шаг 5

Основные модули AWS отображаются в таблице ниже, как показано на приведенном ниже снимке экрана.

Основные модули AWS

Шаг 6

После установки инструмент AWS будет доступен в Eclipse, как показано ниже —

Eclipse Worksheet

Инструменты Затмения

Шаг 7

При нажатии на сервис Amazon вы можете увидеть следующий экран.

Сервис 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

Пример: создание функции

Позвольте нам понять функциональность Консоли 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 из поиска. Действия имеет следующие детали —

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

Это показано на скриншоте, приведенном ниже —

Скриншот

Давайте обсудим каждый из них подробно.

Использование встроенного редактора

Встроенный редактор кода, в котором вы можете написать свой код, выглядит следующим образом:

inline_editor

Вы можете написать свой код, выбрав нужный язык. Вы можете выбрать время выполнения снова здесь.

Посмотрите на следующий скриншот для лучшего понимания —

Runtime Menu

Код должен быть написан в 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.

Аудит и соответствие

После этого вам нужно сохранить изменения, используя кнопку Сохранить, как показано здесь —

Сохранить Button.jpg

Теперь, если вы нажмете кнопку « Тест» , будет запрошено тестовое событие. Вы можете передать пример тестового события следующим образом:

Созданное тестовое событие выглядит так:

Настроить тестовое событие

Теперь сохраните тестовое событие и нажмите кнопку теста, чтобы увидеть выполнение лямбда-функции 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 —

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.

Подробности приведены ниже:

  • identity.cognito_identity_id
  • identity.cognito_identity_pool_id
9

clientContext

Это будет подробная информация о клиентском приложении при использовании с AWS Mobile SDK. Детали приведены ниже:

  • client_context.client.installation_id
  • client_context.client.app_title
  • client_context.client.app_version_name
  • client_context.client.app_version_code
  • client_context.client.app_package_name
  • client_context.custom — он имеет набор пользовательских значений из мобильного клиентского приложения
  • client_context.env — содержит сведения об окружении из 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 —

Скриншот Cloud Watch

Обработка ошибок в 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 , он перенаправит вас на экран, показанный ниже —

Лямбда Java проект

Шаг 3

Теперь код по умолчанию создается для пользовательского типа ввода. Как только вы нажмете кнопку Готово , проект будет создан, как показано ниже —

Пользовательский Тип

Шаг 4

Теперь щелкните правой кнопкой мыши свой проект и экспортируйте его. Выберите файл Java / JAR в мастере экспорта и нажмите « Далее» .

Мастер экспорта

Шаг 5

Теперь, если вы нажмете « Далее» , вам будет предложено сохранить файл в папке назначения, который будет запрошен при нажатии «Далее».

После сохранения файла вернитесь в консоль AWS и создайте функцию AWS Lambda для Java.

Консоль AWS для 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 {
   @Override
   public String handleRequest(Object input, Context context) {
      context.getLogger().log("Input: " + input);

      // TODO: implement your handler
      return "Hello from Lambda!";
   }
}

Обратите внимание, что из приведенного выше кода обработчик будет 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!";
   }
}

Приведенный выше код даст вам следующий вывод —

Ведение журнала Java

Вывод в CloudWatch будет таким, как показано ниже —

Регистрация выходных данных Java

Обработка ошибок в 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 дают более подробную информацию об ошибке.

Вывод и соответствующий вывод лога кода, приведенного выше, будут такими, как показано на следующих скриншотах, приведенных ниже —

Обработка ошибок Java

Обработка ошибок Вывод

AWS Lambda — функция в Python

В этой главе мы создадим простую лямбда-функцию AWS в Python и разберемся с ее рабочими концепциями, следуя подробностям.

Прежде чем приступить к работе по созданию функции Lambda в AWS, нам потребуется поддержка инструментария AWS для Python. Для этого выполните шаги, приведенные ниже, и просмотрите соответствующие скриншоты, которые прилагаются —

Шаг 1

Войдите в консоль AWS, создайте функцию Lambda и выберите язык Python.

Лямбда-функция Python

Шаг 2

Теперь нажмите кнопку Создать функцию и введите сведения для создания простой лямбда-AWS в Python. Этот код возвращает сообщение Hello от Lambda с использованием Python и выглядит так, как показано здесь —

Создать функцию Python

Шаг 3

Теперь сохраните изменения и протестируйте код, чтобы увидеть результат. При тестировании в консоли AWS с помощью кнопки тестирования в пользовательском интерфейсе вы должны увидеть следующие выходные данные и журналы.

AWS_console_Python

Шаг 4

Теперь вы можете написать код внутри любого редактора или IDE для Python. Здесь мы используем визуальный студийный код для написания кода. Позже вам следует заархивировать файл и загрузить его в консоль AWS.

IDE для Python.

Здесь мы заархивировали код и используем его консоль AWS.

Шаг 5

Теперь выберите вариант « Загрузить файл .ZIP», как показано ниже —

Загрузить файл

Детали обработчика для Python

Обратите внимание, что обработчик должен быть именем файла, за которым следует имя функции. В приведенном выше случае имя нашего файла — hellopython.py, а имя функции — my_handler; поэтому обработчик будет hellopython.my_handler .

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

Подробности обработчика Python

Теперь давайте разберемся в деталях функции 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. Подробности приведены ниже:

  • identity.cognito_identity_id
  • identity.cognito_identity_pool_id
9

client_context

Это будет подробная информация о клиентском приложении при использовании с AWS Mobile SDK. Детали приведены ниже:

  • client_context.client.installation_id
  • client_context.client.app_title
  • client_context.client.app_version_name
  • client_context.client.app_version_code
  • client_context.client.app_package_name
  • client_context.custom — он имеет набор пользовательских значений из мобильного клиентского приложения
  • client_context.env — он содержит подробности об окружении из 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, как показано ниже —

Ведение журнала с использованием Python

Обратите внимание на следующий пример, чтобы понять, как использовать регистратор для печати журналов в 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"

Вывод для этого будет таким, как показано на скриншоте ниже:

Cloudwatch Python

Обработка ошибок в Python для лямбда-функции

В этом разделе давайте рассмотрим рабочий пример, который показывает, как обрабатывать ошибки в Python. Обратите внимание на фрагмент кода, приведенный здесь —

def error_handler(event, context):
   raise Exception('Error Occured!')

Обработка ошибок в Python

Отображение журнала, как показано на рисунке здесь —

Обработка ошибок в выводе Python

AWS Lambda — функция в движении

Поддержка Go Language является недавним дополнением к AWS. Для работы с Go необходимо выбрать язык из консоли AWS при создании функции AWS Lambda. В этой главе мы подробно узнаем о лямбда-функции AWS на языке Go.

Установка Go

Для начала нам нужна поддержка Go Language. В этом разделе мы рассмотрим следующие детали, чтобы начать работу с AWS Lambda в Go. Это официальный сайт для загрузки Go: https://golang.org/dl/

Go Программирование

Теперь загрузите пакет в соответствии с операционной системой. Следуйте приведенной здесь процедуре, чтобы установить Go в соответствующей операционной системе.

Установка на Windows

Обратите внимание, что для Windows доступна 32-разрядная и 64-разрядная загрузка. Скачайте zip-файл, распакуйте его и сохраните в каталоге по вашему выбору.

Добавьте переменные среды, доступные в ControlPanel —> System —> Advanced system settings.

Свойства системы

Теперь нажмите кнопку Переменные среды и добавьте путь к каталогу, как показано здесь —

Переменные среды Go

Вы также можете редактировать системную переменную, как показано здесь —

Изменить системную переменную

Как только эти шаги будут выполнены, вы сможете начать работать с 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 в качестве среды выполнения —

APIws Console Go

Как только функция будет создана, загрузите исполняемый zip-файл, созданный выше.

Лямбда-функция обработчик с Go

Обработчик — это то, с чего начинается выполнение программы Go. От основного вызова до lambda.start выполнение вызывается с помощью функции-обработчика. Обратите внимание, что добавляемый обработчик будет основным .

Соблюдайте код здесь для понимания —

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Следуйте согласно скриншотам, приведенным ниже —

Код функции

Исполнение Роль Go

Теперь сохраните функцию и протестируйте ее. Вы можете увидеть результат выполнения, как показано здесь.

Результат выполнения Go

Соответствующий вывод журнала будет таким, как показано здесь —

Log Output Go

Контекстный объект с 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) .

Visual Csharp

При необходимости вы можете изменить имя, оставив здесь имя по умолчанию. Нажмите OK, чтобы продолжить.

На следующем шаге вас попросят выбрать план .

Выберите план

Выберите пустую функцию для этого примера и нажмите Готово . Это создаст новую структуру проекта, как показано ниже —

Обозреватель решений

Теперь выберите Function.cs, который является основным файлом, в котором для AWS Lambda создается обработчик с событием и контекстом.

Отображение файла Functions.cs выглядит следующим образом —

Функция Csharp

Вы можете использовать приведенную ниже команду для сериализации входных и выходных параметров в функцию 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», как показано ниже.

Опубликовать Explorer

Загрузить лямбду

Введите имя функции и нажмите « Далее» . Следующий отображаемый экран — это подробные сведения о расширенной функции, как показано на рисунке —

Расширенная функция

Введите имя роли, память и время ожидания . детали Обратите внимание, что здесь мы выбрали существующую роль, созданную и использовавшую память как 128 МБ, а тайм-аут как 10 секунд. После этого нажмите « Загрузить», чтобы опубликовать его на консоли AWS Lambda.

Функция загрузки

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

взывать

Теперь давайте введем пример ввода и снова вызовем его. Обратите внимание, что здесь мы ввели некоторый текст в поле ввода, и то же самое при нажатии вызывать отображается в верхнем регистре в разделе ответа. Вывод журнала отображается ниже —

Функция лямбда

Теперь давайте также проверим консоль AWS, чтобы увидеть, создана ли функция, так как мы развернули функцию из Visual Studio.

Лямбда-функция, созданная выше, — это AWS-лямбда, использующая csharp, и она отображается в консоли AWS, как показано на скриншотах, приведенных ниже.

Создать функцию Csharp

Информация о коде функцииРоль казни Csharp

Основные настройки Csharp

Подпись обработчика

Обработчик является начальной точкой для выполнения 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 #, показан ниже:

Контекстный объект Csharp

Соответствующий вывод, который вы можете наблюдать при вызове вышеуказанного кода в Консоли 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");            
}

Соответствующий вывод для приведенного выше кода показан здесь —

Ведение журнала с использованием Csharp

Вы можете получить журналы из CloudWatch, как показано ниже —

Log Group

Обработка ошибок в 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.

Сервисы 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: ["coxxxxxxx@gmail.com"]
      },
      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: "coxxxxxx@gmail.com"
   };
   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)

Выбрав соответствующую ссылку и нажав на нее, вы можете найти окно, как показано здесь —

Установите AWS

Затем установите путь для среды в окнах, как показано на скриншотах ниже —

Путь к окружающей среде

После этого вы можете использовать следующую команду в командной строке, чтобы увидеть, установлена ​​ли aws cli :

aws --version

Он отображает детали версии aws-cli, как показано на следующем скриншоте —

Версия 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 .

Резюме 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, вы можете найти вывод, как показано ниже —

Command Cli

В консоли AWS функция Lambda отображается, как показано ниже:

Функция Cli

Детали функций, как показано здесь —

Код Кли

Детали конфигурации приведены ниже:

Cli Role

Вы можете проверить функцию и проверить вывод, как показано на рисунке —

Cli Execution

Соответствующий вывод журнала показан здесь —

Cli Output

Список-функция

Этот 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

Команда отображает детали следующим образом —

Cli Display

получить-функции

Этот 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

Затем вы можете увидеть следующий вывод в виде дисплея —

Cli обновлен

Шаг 4

Отображение в консоли AWS после использования update-function-configuration выглядит следующим образом:

Конфигурация Cli

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"

Соответствующий вывод, как показано здесь —

Cli Purpose

Дисплей с консоли AWS, как показано здесь —

Консоль AWS Cli

Соответствующий вывод журнала, как показано ниже —

Cli Log

удалить функция

Удалить 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.

Cli Ключевые слова

Создание и развертывание с использованием Serverless Framework

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

В этой главе вы подробно узнаете, как начать работу с AWS-сервером.

Установите Serverless Framework, используя npm install

Для начала вам нужно сначала установить nodejs . Вы можете проверить наличие узлов следующим образом:

Установить сервер

Вы должны будете использовать следующую команду для установки без сервера, используя пакет npm —

npm install -g serverless

Severless

После завершения npm выполните безсерверную команду, которая показывает список команд, которые будут использоваться для создания и развертывания лямбда-функции AWS. Обратите внимание на скриншоты, приведенные ниже —

Рамочная команда

Framework Prompt

Вы также можете использовать 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

Nodejs

Обратите внимание, что эта команда создает шаблон для шаблона aws-nodejs.

Шаг 4

Теперь откройте папку, созданную в IDE. Здесь мы используем код Visual Studio и структура папок выглядит следующим образом —

Visual Studio Framework

Шаг 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 отображаются следующим образом:

Cloud Framework

Обратите внимание, что данное имя — это имя проекта, за которым следует используемый этап.

Этап используется

Шаг 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, не могут быть смоделированы в локальной среде. Только основные вызовы функций могут быть проверены локально.

Invoke Local

Использование API Gateway и AWS Lambda с Serverless Framework

Давайте посмотрим, как создать новый проект для работы с Lambda и API-шлюзом. Вы можете использовать следующую команду для этой цели —

sls create --template aws-nodejs 

Api Gateway Framework

Теперь откройте проект 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

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 в строке запроса и увидим отображение:

Получить 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 
 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 . Загрузите приложение в соответствии с вашей ОС. После установки вы сможете протестировать ваш пост, как показано ниже —

Почтовый URL

Это отображает сообщение, которое мы добавили в функцию 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 <janedoe@example.com>"
               ],
            "to": [
               "johndoe@Source.com"
            ],
            "returnPath": "janedoe@example.com",
            "messageId": "<0123456789Source.com>",
            "date": "Wed, 7 Oct 2015 12:34:56 -0700",
            "subject": "Test Subject"
         },
         "example": "janedoe@example.com",
         "timestamp": "1970-01-01T00:00:00.000Z",
         "destination": [
            "johndoe@example.com"
         ],
         "headers": [{
            "name": "Return-Path",
            "value": "<janedoe@example.com>"
         },
         {
            "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 johndoe@example.com; 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 <janedoe@example.com>"
         },
         {
            "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": "johndoe@example.com"
         },
         {
            "name": "Content-Type",
            "value": "text/plain; charset=UTF-8"
         }],
         "headersTruncated": false,
         "messageId": "o3vrnil0e2ic28tr"
      },
      "receipt": {
         "recipients": [
            "johndoe@example.com"
         ],
         "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, как показано ниже —

Использование консоли 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"

Соответствующий вывод показан здесь —

Команда CLI

Шаг 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

Перейдите в IAM и выберите Роли в левой части, как показано ниже —

Панель инструментов Меню

Нажмите Создать роль для лямбда-функции.

Дополнительные ресурсы

Выберите Lambda и нажмите « Разрешения» внизу. Выберите разрешение, необходимое для шлюза API и лямбды.

Выберите тип

Ищите API-шлюз в поиске, и он перечислит вам все связанные разрешения. Здесь мы выбрали полный доступ к API-шлюзу, как показано ниже —

Прикрепить разрешение

Теперь найдите API-шлюз, и он покажет вам все связанные разрешения. Здесь мы выбрали полный доступ к API-шлюзу, как показано ниже —

Api Gateway

Вы должны повторить тот же процесс для политик также.

полисы

Как только вы закончите выбор необходимых политик, нажмите « Обзор» для следующего шага. Введите название роли согласно вашему выбору, как показано ниже —

Обзор

Он отображает политики, прикрепленные к роли. Нажмите Создать роль, и мы закончили с созданием роли и можем перейти к лямбда-функции.

Создать лямбда-функцию AWS

Перейдите в сервисы AWS и нажмите на лямбда-сервис, чтобы создать функцию для его подключения к API-шлюзу.

вычисление

Экран пользовательского интерфейса для функции лямбда показан ниже. Нажмите кнопку Создать функцию , чтобы продолжить создание функции лямбда.

Экран пользовательского интерфейса

Введите имя функции и выберите существующую роль, которую мы создали выше.

Введите имя

Мигает сообщение о том, что функция с именем lambdawithapigateway успешно создана.

Лямбда-шлюз

Обратите внимание, что здесь мы будем использовать runjs для написания кода. Код AWS с сообщением helloworld показан ниже:

Среда

Лямбда-код AWS присутствует в файле index.js . Функция с именем handler имеет параметры, а именно события, контекст и обратный вызов .

Функция обратного вызова в основном имеет ошибку и сообщение об успехе. Обратите внимание, что здесь у нас нет кода, связанного с ошибками, поэтому передается значение null, и сообщение об успехе — HelloWorld от lambda.

Наконец, сохраните добавленные изменения и давайте перейдем к добавлению функции Lambda в шлюз API.

Создать API-шлюз

Войдите в свою учетную запись AWS и откройте API Gateway, как показано ниже —

Доставка контента

Нажмите API Gateway, и вы попадете на экран, где можно создать новый API-шлюз.

Amazon Gateway

Нажмите Create API и добавьте детали, как показано ниже —

Создать новый

Нажмите кнопку « Создать API» в правой части экрана. Это отобразит вновь созданный API в левой части экрана.

Создать новый API

Щелкните раскрывающийся список « Действия», чтобы создать новый ресурс для API.

Действие Dropdown

Теперь создайте новый ресурс, как показано ниже —

Ресурсная группа

Введите имя ресурса, как показано ниже. Вы увидите название ресурса, введенного в URL, созданный в конце. Нажмите Создать ресурс, и вы увидите его на экране следующим образом —

Детский ресурс

Ресурс Сервис

Добавьте методы GET / POST к созданному ресурсу, как показано ниже. Выберите метод из выпадающего списка действий .

Получить метод

Нажмите метод GET, чтобы добавить метод в API.

Метод API

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

Получить настройки

Связь лямбда-функции с API-шлюзом

Выберите лямбда-функцию, созданную ранее.

привет настройка

Сохраните изменения, и вы увидите диалоговое окно с запросом разрешения, как показано ниже —

Добавить разрешение

Нажмите OK для разрешения. Это детали выполнения между HTTP-запросом шлюза API и функцией Lambda —

Выполнение метода

Теперь давайте развернем изменения шлюза API. Для этого нам нужно выбрать Deploy API из выпадающего меню Actions, как показано ниже —

Развернуть Api

Выберите Deploy API . Будет запрошено состояние развертывания. Выберите « Новый этап» в раскрывающемся списке «этап развертывания» и добавьте имя этапа как « Производство» .

Выберите Deploy

Нажмите кнопку Deploy , и он перенаправит вас на URL, как показано ниже —

Нажмите Развернуть

Выберите метод GET с левой стороны, чтобы получить URL. Откройте URL в новой вкладке, чтобы увидеть сообщение от лямбда-функции.

Выберите Получить

Это базовый пример работы с AWS Lambda и AWS API Gateway. В приведенном выше примере мы жестко закодировали сообщение в функции Lambda.

Теперь давайте возьмем детали сообщения от шлюза API. В случае, если вызов HTTPS должен вызываться из другого домена, например, вызов AJAX для API, нам нужно включить CORS для созданного шлюза API.

Выберите ресурс, созданный для API, и нажмите выпадающий список Actions

Привет Метод

Теперь Включить CORS откроет следующий экран —

Включить Cors

Вы можете использовать несколько методов для включения CORS. Access-Control-Allow-Origin помечен *, что означает, что он позволит получать содержимое от шлюза API из любого домена.

Вы также можете указать доменное имя, которое вы хотите работать с API. Нажмите Включить CORS и замените существующую кнопку заголовков CORS. Появится подтверждающее сообщение, как показано ниже —

Метод соответствия

Нажмите кнопку Да, замените существующие значения , чтобы включить его. Экран Enable CORS выглядит так, как показано ниже —

Заменить существующие значения

Передача данных в API-шлюз

Откройте API, созданный в API Gateway displayhelloworld, как показано ниже —

Передача данных

Нажмите Запрос интеграции, чтобы отправить данные, как показано ниже —

Запрос на интеграцию

Выберите Body Mapping Templates и добавьте Content-Type для этого примера как application / json . Нажмите на добавленный тип контента и добавьте следующие детали:

Body Mapping

Теперь добавьте шаблон в формате 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 в разделе хранилища, как показано на рисунке ниже —

S3 Storage

Шаг 2

Нажмите S3 storage и создайте корзину, в которой будут храниться загруженные файлы.

Файл загружен

Шаг 3

После того, как вы нажмете кнопку « Создать корзину» , вы увидите следующий экран:

Нажмите Создать

Шаг 4

Введите подробные данные Bucket name, выберите регион и нажмите кнопку « Создать» в левом нижнем углу. Таким образом, мы создали ведро с именем: workingwithlambdaands3 .

Выберите регион

Шаг 5

Теперь, нажмите на название корзины, и она попросит вас загрузить файлы, как показано ниже —

Загрузить ковш

Итак, мы закончили с созданием сегмента в S3.

Создать роль, которая работает с S3 и Lambda

Чтобы создать роль, которая работает с S3 и Lambda, выполните следующие шаги:

Шаг 1

Перейдите в сервисы AWS и выберите IAM, как показано ниже —

Работа с S3

Шаг 2

Теперь нажмите IAM -> Роли, как показано ниже —

Ям Роли

Шаг 3

Теперь нажмите « Создать роль» и выберите службы, которые будут использовать эту роль. Выберите лямбду и нажмите кнопку разрешения .

Разрешение Боттон

Шаг 4

Добавьте разрешение снизу и нажмите « Обзор» .

Нажмите Обзор

Шаг 5

Обратите внимание, что мы выбрали следующие разрешения —

Следующее разрешение

Обратите внимание, что мы выбрали следующие политики : AmazonS3FullAccess, AWSLambdaFullAccess и CloudWatchFullAccess .

Шаг 6

Теперь введите имя роли, описание роли и нажмите кнопку « Создать роль» внизу.

Создать роль

Таким образом, наша роль с именем lambdawiths3service создана.

Создать лямбда-функцию и добавить S3 Trigger

В этом разделе мы рассмотрим, как создать лямбда-функцию и добавить к ней триггер S3. Для этого вам нужно будет выполнить следующие шаги:

Шаг 1

Перейдите в Сервисы AWS и выберите Lambda, как показано ниже —

Выберите лямбда

Шаг 2

Нажмите Lambda и следуйте процессу добавления имени . Выберите время выполнения, роль и т. Д. И создайте функцию. Созданная нами лямбда-функция показана на снимке экрана ниже.

Выберите Runtime

Шаг 3

Теперь давайте добавим триггер S3.

Добавить 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, выглядит так:

Наблюдать за Cloudwatch

Лямбда-функция AWS запускается, когда файл загружается в корзину S3, а детали регистрируются в Cloudwatch, как показано ниже —

S3 Bucket

Использование лямбда-функции с 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

DynamoDB показывает параметры, как показано ниже —

Опция Dynamodb

Теперь нажмите « Создать таблицу», чтобы создать таблицу, как показано на рисунке. Мы назвали таблицу как клиент с первичным ключом для этой таблицы как cust_id . Нажмите кнопку Создать , чтобы добавить таблицу в DynamodB.

Создать Dynamodb

Созданная таблица, как показано ниже —

Детали таблицы

Мы можем добавить элементы в таблицу, созданную следующим образом:

Недавние оповещения

Нажмите « Элементы» и нажмите кнопку « Создать элемент» , как показано на рисунке —

Создать предмет

Создать Item2

Создание роли с разрешениями для работы с DynamoDB и AWS Lambda

Чтобы создать роль, перейдите в сервисы AWS и нажмите IAM.

Создание роли

Давайте создадим политику, которая будет использоваться только для таблицы DynamoDB, созданной ранее —

Создать политику Динамо

Теперь выберите сервис . Обратите внимание, что выбранный нами сервис — DynamoDB . Для действий мы предприняли все действия Dynamodb, то есть доступ к списку, чтение и запись. Для ресурсов мы выберем тип ресурсов таблицы действий. Когда вы нажимаете на нее, вы можете увидеть экран следующим образом —

Dynamodb Action

Теперь выберите таблицу и добавьте к ней 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: ["xxxxx@gmail.com"]
      },
      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: "xxxxx@gmail.com"
   };
   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.

Gmail

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

Предполагается, что запланированные события происходят через регулярные промежутки времени на основе набора правил. Запланированные события используются для выполнения лямбда-функции после интервала, определенного в сервисах 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, как показано ниже —

События Cloudwatch

Обратите внимание, что событие будет запускаться через каждые 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: ["xxxxxxxt12@gmail.com"]
      },
      Message: {
         Body: {
            Text: {
               Data: "this mail comes from aws lambda event scheduling"
            }
         },
         Subject: {
            Data: "Event scheduling from aws lambda"
         }
      },
      Source: "coxxxxxx@gmail.com"
   };
   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: ["xxxxxxxx12@gmail.com"]
   },
   Message: {
      Body: {
         Text: {
            Data: "this mail comes from aws lambda event scheduling"
         }
      },
      Subject: {
         Data: "Event scheduling from aws lambda"
      }
   },
   Source: "coxxxxxx@gmail.com"
};

Лямбда-код для отправки электронной почты выглядит следующим образом —

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

Чтобы создать тему в SNS, вам нужно будет выполнить следующие шаги:

Шаг 1

Войдите в консоль AWS и перейдите к сервису SNS в Amazon, как показано ниже —

Сервис Amazon Sns

Шаг 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

Затем выберите тему SNS и добавьте триггер в функцию AWS Lambda, как показано ниже:

Sns Тема

Затем добавьте лямбда-код 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.

Блок-схема для объяснения этого процесса показана ниже:

Блок-схема Cloudtrail

Создать S3 Bucket для хранения логов CloudTrail

Перейдите в консоль AWS и щелкните сервис S3. Нажмите Create bucket и введите имя bucket, в котором вы хотите хранить журналы cloudtrail, как показано на рисунке —

Создать ведро

Заметьте, что здесь мы создали облачные трассовые пилы S3 для хранения логов.

Создать сервис SNS

Перейдите в консоль AWS и нажмите « Сервис простых уведомлений» . Выберите темы слева и нажмите кнопку «Создать новую тему».

Простое уведомление

Мы создали тему под названием displaytrail, чтобы опубликовать тему. Его детали будут храниться в S3bucket, который создан выше.

Создайте Trail в Cloudtrail и назначьте S3 Bucket и службу SNS.

Перейдите в консоль AWS и выберите сервис CloudTrail из инструментов управления, как показано на рисунке —

Создать трассы

Нажмите Trails с левой стороны, как показано ниже —

Trail Dashboard

Трассы

Нажмите кнопку Создать след . Введите название следа, примените след ко всем регионам и выберите « Да» . Тогда логи будут применяться для всего региона.

Название тропы

Для событий «Чтение / запись» выберите « Все» . Добавьте подробности темы 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: ["xxxxxxxxx12@gmail.com"]
      },
      Message: {
         Body: {
            Text: {
               Data:s3message
            }
         },
         Subject: {
            Data: "cloudtrail logs"
         }
      },
      Source: "coxxxxxx@gmail.com"
   };
   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, а почта отправляется на идентификатор электронной почты, указанный в коде.

Журналы Cloudtrail

Обратите внимание, что вы можете обрабатывать журналы в соответствии с вашими потребностями в 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 Stream

Введите количество шардов для потока данных.

Сметное число

Детали Осколков как показано ниже —

Осколки

Введите имя и нажмите кнопку Создать поток Kinesis внизу.

Кинезис Стрим

Обратите внимание, что для активации потока требуется определенное время.

Создать лямбда-функцию AWS

Перейдите в консоль AWS и нажмите «Лямбда». Создайте функцию AWS Lambda, как показано на рисунке —

Кинезис лямбда

Нажмите кнопку Создать функцию в конце экрана. Добавьте Kinesis в качестве триггера для AWS Lambda.

Kinesis Trigger

Добавить детали конфигурации в триггер 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: ["xxxxxxx@gmail.com"]
      },
      Message: {
         Body: {
            Text: {
               Data:payload
            }
         },
         Subject: {
            Data: "Kinesis data stream"
         }
      },
      Source: "cxxxxxxxxx@gmail.com"
   };    
   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"

Data Kinesis

Затем активируется AWS Lambda и отправляется письмо.

Активировать почту

Kinesis CommandKinesis Mail

Использование лямбда-функции с пользовательскими приложениями

Мы можем использовать лямбда-функцию 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);};

Сообщение Sns

Давайте вызовем то же самое с помощью 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, показана ниже —

Блок-схема Cloudfront

Существует четыре способа использования 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 и создайте корзину, как показано ниже —

Amazon S3

Теперь нажмите кнопку « Создать корзину» и добавьте детали корзины, как показано ниже —

Кнопка Создать ковш

Нажмите кнопку « Создать» и загрузите HTML-файл.

Загрузить HTML

Создать роль

Перейдите в консоль AWS и нажмите IAM .

Безопасность

Теперь нажмите Роли -> Создать роль , как показано на рисунке —

Создать ролевую панель

Выберите разрешение для S3, Lambda и Cloudfront . Хорошей практикой является создание политики, дающей разрешение только на требуемую функцию хранения с использованием сведений ARN.

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

Полное разрешение доступа

Роль Cloudfront

Вся политика, необходимая для lambda @ edge и cloudfront, показана выше. Здесь необходимо выполнить дополнительный шаг, поскольку в случае облачного фронта URL-адрес будет доступен по всему региону, и для этого нужны доверительные отношения между службами, которые мы используем.

Теперь, для созданной роли, нажмите на вкладку Доверительные отношения, как показано на рисунке —

отношения

Нажмите на Изменить доверительные отношения, как показано ниже —

Изменить доверительные отношения

Он отображает документ политики. Нам нужно добавить другие сервисы в Принципал -> Сервис, которые мы планируем использовать. Окончательный документ о политике доверия показан ниже:

Окончательные доверительные отношения

Нажмите кнопку « Обновить политику доверия» , чтобы сохранить изменения.

Создать дистрибутив CloudFront

Перейти к сервису 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, который будет отображаться по умолчанию.

В остальном мы сохраним настройки по умолчанию.

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

Cloudfront Distribution

Обратите внимание, что рассылка займет некоторое время, чтобы показать статус развернутого.

Создать лямбда-функцию AWS

Перейдите в консоль AWS и создайте функцию Lambda.

Функция Cloudfront

В лямбда-коде 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 Trigger

Теперь добавьте детали конфигурации для CloudFront. Событие CloudFront имеет параметр для запроса средства просмотра, запроса источника, ответа источника и ответа средства просмотра .

Далее выберите дистрибутив CloudFront, созданный ранее. Из событий мы выберем запрос зрителя . На основании запроса средства просмотра будет выбран рабочий стол / устройство от пользовательского агента, и ответ будет изменен. Затем добавьте детали триггера.

Запрос зрителя

После добавления триггера нам нужно дождаться развертывания дистрибутива из CloudFront.

Cloudfront Deploy

Как только статус меняется на « Развернутый» , мы можем протестировать 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.

Нажмите Cloudwatch

Выберите журналы с левой стороны.

Выберите левую сторону

Когда вы нажимаете « Журналы» , в вашей учетной записи создается функция « Группы журналов» AWS Lambda. Выберите любую функцию AWS Lambda и проверьте детали. Здесь мы ссылаемся на лямбда-функцию с именем: lambdaandcloudwatch . Журналы, добавленные в функцию Lambda, отображаются здесь, как показано ниже —

Группы журналов

Теперь давайте добавим триггер S3 к функции Lambda и посмотрим подробности журналов в CloudWatch, как показано ниже:

S3 Trigger

Давайте обновим лямбда-код 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, как показано на рисунке —

S3 Store Test

Когда файл загружен, запускаются функции AWS Lambda, и сообщения консольного журнала из лямбда-кода отображаются в CloudWatch, как показано ниже —

Cloudwatch Display

Если есть какая-либо ошибка, 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, чтобы создать таблицу, как показано ниже —

Создать таблицу DynamoDB

Данные таблицы

Вы можете использовать ARN для создания политики для DynamoDB, которая будет использоваться с AWS Lambda.

Перейдите в IAM и выберите Политики . Нажмите Создать политику , выберите сервис как DynamodDB, как показано ниже —

Выберите Политики

Нажмите Все действия DynamoDB, как показано выше. Выберите ресурс и введите ARN для таблицы, как показано ниже —

Все DynamoDB

Теперь нажмите 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, введенный пользователем, должны совпадать, чтобы пользователь мог отправить форму регистрации пользователя.

Простая блок-схема, которая объясняет работу проверки телефона, показана здесь —

Sns Service

Созданная лямбда-функция 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-шлюз, созданный для проверки телефона выше, выглядит следующим образом:

Тайм-аут по умолчанию

Применение Json

Данная лямбда-функция является примером проверки телефона . Мы берем данные мобильного телефона, которые будут использоваться в AWS Lambda. Затем AWS Lambda отправит код OTP на указанный номер мобильного телефона.

Создайте AWS Lambda и API-шлюз для данных формы POST и вставьте их в таблицу DynamoDB

Для формы регистрации пользователя все поля являются обязательными. Выполняется вызов AJAX, в котором данные, введенные в форму, публикуются по URL-адресу шлюза API.

Простая блок-схема, которая объясняет работу кнопки отправки, показана здесь —

Блок-схема таблицы Dynamodb

После заполнения формы кнопка отправки вызовет шлюз API, который активирует AWS Lambda. AWS Lambda получит информацию о форме из события или шлюза API, и данные будут вставлены в таблицу DynamodDB.

Давайте разберемся в создании API Gateway и AWS Lambda.

Сначала перейдите в сервисы AWS и нажмите Лямбда. Созданная лямбда-функция выглядит так:

Лямбда Пример

Теперь, чтобы создать API-шлюз, перейдите в сервис AWS и выберите API-шлюз . Нажмите на кнопку Создать API , показанную ниже.

Создать Api

Введите имя API и нажмите кнопку « Создать API» , чтобы добавить API.

Создать кнопку API

Теперь создан API, называемый registeruser . Выберите API и нажмите « Действия», чтобы создать ресурс .

Новый детский ресурс

Нажмите Создать ресурс . Теперь давайте добавим метод POST . Для этого нажмите на ресурсы, созданные слева, и в раскрывающемся списке Действия выберите метод создания . Это отобразит раскрывающийся список, как показано ниже —

Создать метод

Выберите метод POST и добавьте функцию Lambda, которую мы создали выше.

Post Setup

Нажмите кнопку Сохранить , чтобы добавить метод. Чтобы отправить детали формы в функцию 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, созданный ранее.

Api создан

Добавлена ​​лямбда-функция — пример lambdareaddata . Нажмите Сохранить, чтобы сохранить метод и развернуть API.

Окончательная работа формы регистрации пользователя

Окончательное отображение формы показано ниже:

Окончательная работа

Теперь введите детали, как показано выше. Обратите внимание, что кнопка отправки отключена. Он будет включен только тогда, когда введены все детали, как показано на рисунке —

Введите детали

Теперь введите номер мобильного телефона и нажмите кнопку подтверждения телефона . Появится предупреждающее сообщение «OTP отправлено на мобильный телефон, введите 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);
      }
   });
}

Когда вы нажимаете кнопку подтверждения номера мобильного телефона, вызывается следующий код и отправляется номер мобильного телефона —