AWS Lambda - Краткое руководство
AWS Lambda- это сервис, который выполняет бессерверные вычисления, то есть вычисления без какого-либо сервера. Код выполняется на основе реакции на такие события в сервисах AWS, как добавление / удаление файлов в корзине S3, обновление таблиц Amazon Dynamo dB, 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 за пять простых шагов, показана ниже.
Step 1 − Загрузите лямбда-код AWS на любом из языков, поддерживаемых AWS lambda, то есть NodeJS, Java, Python, C # и Go.
Step 2 − Это несколько сервисов AWS, на которых можно активировать AWS lambda.
Step 3 −AWS Lambda, который содержит код загрузки и сведения о событии, по которому сработал триггер. Например, событие из Amazon S3, Amazon API Gateway, Dynamo dB, Amazon SNS, Amazon Kinesis, CloudFront, Amazon SES, CloudTrail, мобильного приложения и т. Д.
Step 4 − Выполняет AWS Lambda Code только при запуске сервисами AWS в следующих сценариях:
- Пользователь загружает файлы в корзину S3
- URL-адрес конечной точки http get / post поражен
- данные добавляются / обновляются / удаляются в таблицах динамо дБ
- Отправить уведомление
- сбор потоков данных
- хостинг веб-сайта
- отправка электронной почты
- мобильное приложение и т. д.
Step 5 − Помните, что AWS взимает плату только при выполнении лямбда-кода AWS, а не иначе.
Преимущества использования AWS Lambda
AWS Lambda предлагает множество преимуществ, когда вы над этим работаете. В этом разделе они подробно обсуждаются -
Легкость работы с кодом
AWS Lambda предоставляет инфраструктуру для загрузки кода. Он заботится о поддержке кода и запускает код всякий раз, когда происходит необходимое событие. Это позволяет вам выбрать память и время ожидания, необходимое для кода.
AWS Lambda также может выполнять параллельные запросы в соответствии с триггерами событий.
Предоставление журнала
AWS Lambda предоставляет подробную информацию о количестве выполнений кода и времени, затраченном на выполнение, потребляемой памяти и т. Д. AWS CloudWatch собирает все журналы, что помогает понять поток выполнения и отладить код.
Счета на основе использования
Счета AWS Lambda выставляются на основе использования памяти, выполненных запросов и выполнения, которые оплачиваются с шагом не менее 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 Lambda. Помимо консоли AWS, у нас есть AWS-cli для создания и развертывания кода.
Другие особенности
Вы можете использовать AWS Lambda бесплатно, войдя на уровень бесплатного пользования AWS. Это дает вам услугу бесплатно в течение 1 года. Ознакомьтесь с бесплатными услугами, предлагаемыми на уровне бесплатного пользования AWS.
Недостатки использования AWS Lambda
Несмотря на множество преимуществ, AWS Lambda обладает следующими недостатками:
Это не подходит для небольших проектов.
Вам нужно внимательно проанализировать свой код и определить объем памяти и тайм-аут. Если вашей функции требуется больше времени, чем выделено, она будет завершена в соответствии с указанным в ней тайм-аутом, и код не будет выполнен полностью.
Поскольку инфраструктура AWS Lambda полностью зависит от AWS, вы не можете установить какое-либо дополнительное программное обеспечение, если этого требует ваш код.
События, запускающие AWS Lambda
AWS Lambda может запускать следующие события:
- Вход в объект S3
- Вставка, обновление и удаление данных в таблице Dynamo DB
- Push-уведомления из соцсети
- GET / POST-вызовы API-шлюза
- Модификация заголовков при просмотре или запрос / ответ источника в CloudFront
- Записи журнала в потоке данных AWS Kinesis
- Журнал журнала в CloudTrail
Примеры использования AWS Lambda
AWS Lambda - это вычислительная служба, которая в основном используется для запуска фоновых процессов. Он может срабатывать при использовании с другими сервисами AWS. Список сервисов AWS, где мы можем использовать AWS Lambda, приведен ниже -
Объект S3 и AWS Lambda
Amazon S3 передает сведения о событии в AWS Lambda при загрузке любого файла в S3. Подробные сведения о загрузке файла, удалении или перемещении файла передаются в AWS Lambda. Код в AWS Lambda может предпринять необходимые действия, когда получит сведения о событии. Например, создание эскиза изображения, вставленного в S3.
DynamoDB и AWS Lambda
DynamoDB может запускать AWS Lambda при добавлении, обновлении и удалении данных в таблице. Событие AWS Lambda содержит все сведения таблицы AWS DynamoDB о вставке / обновлении или удалении.
API Gateway и AWS Lambda
API Gateway может запускать AWS Lambda для методов GET / POST. Мы можем создать форму и поделиться подробностями с конечной точкой API Gateway и использовать ее с AWS Lambda для дальнейшей обработки, например, для записи данных в таблицу DynamoDB.
SNS и AWS Lambda
SNS используется для push-уведомлений, отправки SMS и т. Д. Мы можем активировать AWS lambda, когда в 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, вам необходимо войти в систему с помощью консоли Amazon. AWS Lambda поддерживает две IDE:Visual studio и Eclipse. В этой главе мы подробно обсудим пошаговую установку AWS Lambda.
Создать логин в Консоли AWS
Вы можете бесплатно создать логин в Консоли AWS, используя уровень бесплатного пользования Amazon. Вы можете выполнить следующие шаги, приведенные ниже, чтобы создать логин в Amazon и использовать сервисы Amazon -
Шаг 1
Идти к https://aws.amazon.com/free/и нажмите «Создать бесплатную учетную запись». Вы можете увидеть снимок экрана, как показано ниже -
Шаг 2
Нажмите на Create a Free Account кнопку, и вы будете перенаправлены на экран, как показано ниже -
Теперь введите данные об адресе электронной почты, пароле и имени учетной записи AWS по вашему выбору в этой форме, показанной выше, и нажмите Continue.
Шаг 3
Теперь вы можете найти экран, как показано ниже -
Введите все необходимые данные в эту форму.
Обратите внимание, что в зависимости от выбранной страны взимается минимальная плата. То же самое возвращается после подтверждения введенных данных. Для создания бесплатной учетной записи вам нужны данные кредитной или дебетовой карты. Для индийских пользователейRs 2/- вычитается и для США $1 Эта же сумма возвращается соответствующему пользователю карты после подтверждения пользователя.
Обратите внимание, что учетная запись является бесплатной, и есть ограничения на использование услуг. Если использование превышает лимит, с пользователя будет взиматься плата.
После того, как данные будут введены в форму, показанную выше, нажмите Create Account and Continue.
Вы будете перенаправлены на следующий экран, как показано ниже.
Шаг 4
Вам необходимо ввести платежные реквизиты, то есть кредитную карту или дебетовую карту, вместе с датой истечения срока действия и именем держателя карты, как показано ниже -
Шаг 5
После ввода всех данных нажмите Secure Submit и он проверит карту в банке и выдаст вам OTPна вашем мобильном телефоне, который привязан к карте. Вы можете найти окно, как показано ниже -
Теперь введите OTP подробности и нажмите Make Payment. Плата взимается в зависимости от выбранной страны.
Шаг 6
После того, как оплата будет произведена, следующим шагом будет проверка телефона. Вам необходимо ввести номер своего мобильного телефона, как показано ниже -
Как только данные будут заполнены, нажмите Call Me Now. AWS немедленно позвонит через автоматизированную систему. При появлении запроса при вызове введите 4-значный номер, который будет отображаться на вашем сайте AWS, на свой телефон с помощью клавиатуры телефона. Это подтвердит ваш номер, и вы получите активацию почты в почтовом идентификаторе, указанном в начале при создании логина.
Шаг 7
Щелкните ссылку электронной почты и введите имя учетной записи или идентификатор электронной почты, а также пароль и войдите в систему в сервисах AWS, как показано ниже -
Имя учетной записи отображается в правом верхнем углу, как показано выше. Теперь вы можете начать использовать сервис AWS Lambda. Для сервиса AWS Lambda поддерживаются следующие языки: NodeJS, Python, Java, C # и Go.
Установка Visual Studio 2017
С AWS совместимы две IDE: Visual Studio и Eclipse. В этом разделе мы обсудим установку Visual Studio 2017 на Windows, Linux Mac. Перейдите на официальный сайт Visual Studio:https://www.visualstudio.com/downloads/. Вы можете найти экран приветствия, как показано -
Загрузите версию сообщества, т.е. Visual Studio Community 2017теперь это бесплатно для практики. После установки он проведет вас через шаги установки, на которых вам нужно выбрать пакеты, которые будут использоваться позже. Вы можете выбрать nodejs, python, c# пакет, чтобы мы работали позже.
Поддержка AWS Toolkit для Visual Studio 2017
После установки Visual Studio 2017 вам нужно будет выполнить следующие действия для установки поддержки AWS Toolkit для Visual Studio 2017:
Шаг 1
Идти к https://aws.amazon.com/visualstudio/ и загрузите набор инструментов AWS для Visual Studio. Дисплей выглядит, как показано ниже -
Обратите внимание, что пакет, загруженный для Visual Studio 2017, vsixпакет. Если ваша версия Visual Studio находится между 2013-2015 годами, она установитmsiустановщик. Щелкните значокDownload кнопку, как показано ниже.
Шаг 2
Теперь дважды щелкните загруженный пакет vsix, и он проведет вас через шаги установки, как показано ниже -
После успешной установки Visual Studio вы увидите окно, как показано ниже -
Шаг 3
Теперь откройте Visual Studio 2017, и вы должны увидеть приветственную страницу от AWS, как показано ниже -
Обратите внимание, что вам необходимо добавить ключ доступа, секретный ключ и номер учетной записи, чтобы начать работу и использовать сервисы AWS из visual studio.s
AWS Lambda BoilerPlate для NodeJS
Вы можете использовать его с visual studio code как показано ниже.
Шаг 1
Вы можете скачать Visual studio code бесплатно с официального сайта:https://www.visualstudio.com/downloads/. Домашняя страница загрузок Visual Studio выглядит так -
Шаг 2
Теперь откройте код Visual Studio, как показано ниже -
Шаг 3
Чтобы установить поддержку AWS, support for nodejsопция доступна внутри расширений. Вы можете выполнить поиск AWS, и он отобразит вариант следующим образом:
Шаг 4
Теперь установите шаблон для AWS Lambda в nodejs как показано -
Шаг 5
Щелкните репозиторий и клонируйте его в Visual Studio, чтобы начать писать лямбда-функцию в Visual Studio. Он перенаправляет вас в этот репозиторий, который мы можем клонировать в Visual Studio:https://github.com/loganarnett/vscode-lambda-snippets. Теперь откройте палитру команд изView вариант в Visual Studio.
Шаг 6
Нажмите на него и выберите git clone, как показано ниже -
Шаг 7
Введите URL-адрес репозитория и сохраните его по вашему выбору локально. Создайтеindex.js файл, как показано ниже, для работы с лямбда-функцией -
Установка Eclipse IDE
Теперь вам нужно будет установить последнюю версию eclipse Java EE IDE. Вы можете скачать его с официального сайта Eclipse:https://www.eclipse.org/downloads/
Поддержка AWS Toolkit для Eclipse IDE
После установки Eclipse выполните следующие шаги:
Шаг 1
Откройте справку в меню и нажмите Install New Software.
Шаг 2
Войти https://aws.amazon.com/eclipse в текстовом поле с надписью Work with в верхней части диалогового окна.
Шаг 3
Теперь выберите нужный AWS Core Management Tools и другие необязательные элементы из списка, показанного ниже.
Шаг 4
Теперь нажмите Next. Eclipse проведет вас через оставшиеся шаги установки, как указано в дальнейших шагах, приведенных ниже.
Шаг 5
Основные модули AWS отображаются в таблице ниже, как показано на скриншоте ниже -
Шаг 6
После установки инструмент AWS будет доступен в Eclipse, как показано ниже -
Шаг 7
Вы можете увидеть следующий экран, когда нажмете на сервис Amazon.
Теперь щелкните AWS Explorer, чтобы просмотреть доступные сервисы. Мы обсудим, как работать с установленной IDE в следующих главах.
AWS Lambda - это сервис, который заботится о вычислении вашего кода без какого-либо сервера. Это называется бессерверным вычислением. Код выполняется на основе реакции на события в сервисах AWS, такие как добавление / удаление файлов в корзине S3, обновление Amazon DynamoDBtables, HTTP-запрос от шлюза Amazon Api и т. Д.
Код AWS Lambda можно написать на NodeJS, Java, C #, Python и Go. В этой главе подробно рассказывается о создании функции AWS Lambda в консоли AWS.
Консоль AWS
Войдите в Консоль AWS по ссылке https://aws.amazon.com/console. Как только вы войдете в него, он перенаправит вас на экран, где отображаются сервисы AWS.
Пример: создание функции
Давайте разберемся с функциональностью Консоли AWS на примере. Нажмите на Lambda (отмечено выше), он перенаправит на создание функции, как показано ниже -
Нажмите Create function кнопку, и на экране отобразятся следующие детали -
Обратите внимание, что по умолчанию опция Author from scratch. Эта опция позволяет вам писать код лямбда с нуля. У него просто будет простая функция сhello world сообщение.
Второй вариант Blue prints имеет следующие детали.
В нем подробно описан код, уже написанный для некоторых сервисов aws на языках, доступных в AWS Lambda. Если вам нужно написать код AWS Lambda для любых сервисов, которые вы можете зарегистрироватьblue prints и приступим.
Третий вариант Serverless Application Repository имеет настройку бессерверного приложения, которое поможет развернуть код AWS Lambda.
В дальнейшем обсуждении мы будем работать над первым вариантом, в котором мы создаем лямбда-функцию AWS, используя Author from scratch.
Прежде чем мы создадим функцию Lambda, нам потребуется роль, то есть разрешение на работу с сервисами AWS и лямбда aws. Позже роль должна быть назначена лямбда-функции aws.
Создание роли в Консоли AWS
Чтобы создать роль в консоли AWS, перейдите в сервисы консоли AWS и щелкните IAM, как показано ниже -
Теперь, если вы нажмете IAM, вы увидите экран, как показано ниже -
Если вы выберете Roles, вы можете увидеть на экране следующие кнопки -
Теперь нажмите Create role. Вам будет предложено выбрать сервис, в котором вам нужно использовать созданную роль.
Поскольку нам нужно использовать эту роль с AWS Lambda, выберите Lambda и нажмите Next:Permissionsкнопку, как показано выше. На следующем экране отображается имя политики, доступной для сервисов AWS. Вы можете выбрать политику здесь -
Например, если вы хотите, чтобы AWS Lambda могла работать с S3 и DynamoDB, вам необходимо выбрать политику. В поле поиска введите сервис AWS и установите флажок. Вы можете выбрать несколько политик, а затем нажатьNext:Review.
Также можно создать собственную политику. Например, есть таблица Dynamodb, и вам нужно предоставить разрешение только для этой таблицы, в таких случаях вы можете создать политику.
Нажмите на Create policyкнопку, как показано на экране выше. Ниже приведены сведения, отображаемые на экране.
Выберите Serviceдля которого вы создаете политику. Позже он отобразит данные для действий,resources и Request conditions.
Теперь следует выбрать услугу. ВыберемAWS Dynamodb из поиска. Actions имеет следующие детали -
Теперь введите Access levelвы хотите отдать DynamoDB. Потом,resources отобразит следующие детали -
Теперь выберите тип ресурса таблицы. Вы можете увидеть следующий результат -
Для разрешения на столе вам необходимо Add ARN. ARN - это данные, уникальные для таблицы, созданной в AWS DynamoDB. Вы получите подробную информацию, когда таблица будет создана в Dynamodb.
Если вы нажмете Add ARN и он отобразит следующие детали -
Теперь, если вы войдете в ARN и Region, Account и Tableимя будет заполнено. Вы должны нажатьAddкнопку, чтобы добавить политику. Аналогичным образом вы можете создавать политики для других служб.
Здесь мы выбрали две политики AmazonS3FullAccess и AmazonDynamoDBFullACcess. В этой роли мы предоставили полный доступ к S3 и DynamoDB. Однако рекомендуется давать разрешение только для необходимых сегментов и таблиц.
Вы можете выполнить шаги, описанные ранее, чтобы создать политики, используя ARN.
Шаг 1
Нажмите Create roleкнопку для создания роли. Все созданные роли отображаются, как показано -
Шаг 2
Обратите внимание, что вы можете выбрать нужную роль, если вам нужно изменить созданную роль. Если мы выберемAuthor from scratch option, вы должны войти Name, Runtime and Role.
Шаг 3
Вы можете наблюдать следующие детали в Runtime раскрывающийся список -
Шаг 4
Вы можете выбрать среду выполнения по вашему выбору и продолжить, как показано.
Role раскрывающийся список имеет следующие параметры -
Choose an existing role − Это отобразит все роли, созданные в ролях IAM.
Create new role from template(s) −Это позволит вам создать роль и отобразит разрешение на выбор для этой роли. Обратите внимание на снимок экрана для лучшего понимания.
Create a custom role − Это позволяет пользователю создавать политики, как мы обсуждали ранее.
Шаг 5
Выберите runtime, roleи добавьте функцию. Нажмите наCreate functionкнопку для создания лямбда-функции. Следующий отображаемый экран выглядит следующим образом -
Части функции AWS Lambda
Функция AWS Lambda состоит из двух частей:Configuration и Monitoring. Обсудим каждый подробно.
Конфигурация
В конфигурацию включены следующие функции.
Add Triggers
Триггеры, необходимые для добавления в функцию AWS Lambda, отображаются следующим образом:
Обратите внимание, что когда мы выбираем триггер, нам нужно добавить детали конфигурации для этого триггера. В примере для триггера S3 нам нужно выбрать имя сегмента; для триггера Dynamodb нам нужно выбрать имя таблицы.
пример
Давайте посмотрим на пример деталей конфигурации для триггера S3 -
Теперь добавьте детали конфигурации для добавленного триггера S3 -
Здесь вам нужно выбрать bucket name, event type на котором вы хотите активировать лямбду, префикс и шаблон фильтра, если таковой имеется, и Add курок.
Добавление кода в Lambda
Теперь мы должны сосредоточиться на написании лямбда-кода. Чтобы добавить код в лямбда aws, есть три варианта:
- Использование встроенного редактора
- Использование файла .zip
- Загрузить файл с Amazon S3
Это показано на скриншоте ниже -
Обсудим подробно каждый из них.
Using the inline editor
Встроенный редактор кода, в котором вы можете написать код, выглядит следующим образом:
Вы можете написать свой код, выбрав язык по вашему выбору. Здесь вы можете снова выбрать среду выполнения.
Обратите внимание на следующий снимок экрана для лучшего понимания -
Код должен быть написан на index.js.Handler. Детали будут отличаться в зависимости от времени выполнения. Заnodejs, это filename.export function что прямо сейчас index.lambda handler.
Upload a .ZIP file
Вы можете сначала написать код, заархивировать его и загрузить zip-файл, выбрав Upload a .ZIP file.
Upload a file from Amazon S3
You can upload the file in S3 bucket and choose the option Upload a file from Amazon S3.
Note that for .ZIP and S3 it will not be possible to change the runtime.
Environment variables
They take in key value pairs and share them with AWS Lambda code. We can use environment variables in AWS Lambda for storing the database connection details, file details as to store the output, log file details etc.
Tags
They are key-value pairs added to AWS Lambda for better organizing the function when used across different regions. For a simple use case, it is not required. When there are lot of Lambda functions created, the tagging helps in filtering and managing the Lambda functions.
Execution role
You can change the role again here if not done properly at the start of creating Lambda function. You can update or create new role here. It provides same options which were displayed at the start of creating Lambda function.
Basic Settings
Here you need to enter the short description of what your Lambda function is doing. Select the memory and timeout which are required for the Lambda function.
Network
This allows you to select the VPC which will allow you to access the Lambda function from the VPC. By default, no VPC is selected.
Debugging and Error Handling
For debugging and errors handling, you can select AWS service to send the details. The options available are None, SNS and SQS.
Concurrency
This allows you to allocate a specific limit of concurrent executions allowed for this function.
Auditing and Compliance
This contains logs which are managed with the help of AWS CloudTrail.
Once done you need to save the changes using the Save button as shown here −
Now, if you click Test button, it will ask for a test event. You can pass a sample test event as follows −
The test event created is as shown here −
Now, save the test event and click the test button to see the execution of AWS Lambda function −
The code for index.js is as follows −
exports.lambdahandler = (event, context, callback) => {
// TODO implement
console.log(event.key1);
console.log(event.key2);
console.log(event.key3);
callback(null, 'Lambda test');
};
Note that callback function is called when there is error or success. If success, you can see Lambda test will get displayed.
Monitoring
Select the monitoring tab to view the execution details of Lambda function. The graphs show the details of the execution time, errors occured etc.
You can also view the logs in Cloudwatch. For this, go to AWS services and select cloudwatch as shown −
Now, select logs from left side and enter your function name in the filter −
AWS Lambda function executes a code when it is invoked. This chapter discusses all these steps involved in the life cycle of AWS Lambda function in detail.
Steps for Building a Lambda function
The lifecycle of Lambda function includes four necessary steps −
- Authoring
- Deploying
- Monitoring
- Troubleshooting
Authoring Lambda Code
AWS Lambda function code can be written in following languages −
- NodeJS
- Java,
- Python
- C#
- Go.
We can write code for AWS Lambda using the AWS console, AWS CLI, from Eclipse IDE, from Visual Studio IDE, serverless framework etc.
The following table shows a list of languages and the different tools and IDE that can be used to write the Lambda function −
Language | IDE for Authoring Lambda Code |
---|---|
NodeJS | AWS Lambda Console Visual Studio IDE |
Java | Eclipse IDE |
Python | AWS Lambda Console |
C# | Visual Studio IDE .NET core |
Go | AWS Lambda Console |
Deploying Lambda Code
Once you decide the language you want to write the Lambda function, there are two ways to deploy the code −
- Directly write the code in AWS console
- Zip or jar the files with all the files and dependencies
However, remember that proper permission has to given to be given to the zip file.
Testing Lambda Code
Lambda Code can be tested for events inside the AWS Lambda console. It is also possible to test the Lambda function from the AWS cli and serverless cli. AWS console has also event data which can be used as sample events while testing AWS Lambda function.
Monitoring Lambda function
Monitoring of Lambda function can be done using the AWS CloudWatch. We can add necessary log messages in languages we choose and see the same in AWS CloudWatch.
To start writing Lambda function, there is pattern to be followed. The following are the main core concepts to be followed for writing a Lambda function −
Handler
Handler is a name of the AWS lambda function from where the execution starts. It appears in AWS console as shown below −
Notice that here we have changed the default handler to another name and updated the same in the Handler −
Note that the way a handler is called differs from the languages selected as runtime.
Params passed to handler
If you observe the handler function, the params passed are event, context and call back function as shown below −
Event parameter has all the details for the trigger used.
Context parameter basically takes care of runtime details for the Lambda function to execute. We can interact with the Lambda function using the context param. It has the details like the time left before AWS Lambda terminates a function i.e, timeout specified while creating Lambda function, name of the Lambda function, cloudwatch group name, arn details etc.
Example
Let us understand the details obtained from AWS Lambda context object with the help of an example −
exports.lambdahandler = (event, context, callback) => {
// TODO implement
console.log("context object details");
console.log(JSON.stringify(context));
callback(null, 'Lambda test');
};
When you execute the Lambda function shown above, you can see the following output −
Output
The context details are given as follows −
{
"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"
}
Observe that it has details like functionName, memorylimit, requestId etc.
Logging
The logs added inside the Lambda function are displayed in AWS CloudWatch when the AWS function executes. The logs syntax will vary from the language selected. For Example in nodejs, it is console.log.
This is the output you can see in AWSCloudWatch −
Error Handling
AWS Lambda function provides a callback function which is used to notify to the Lambda function that an error or success has happened. Note that here we have used nodejs as the runtime. The error handling will differ as per the language selected.
Observe the Example given here for a better understanding −
exports.lambdahandler = (event, context, callback) => {
// TODO implement
var error = new Error("There is error in code");
callback(error);
};
Output
When you test the Lambda code, you can find the output as shown below −
The log details as follows −
Nodejs is one of the languages that AWS Lambda function supports. The version supported with nodejs are v6.10 and v8.10. In this chapter, we will learn about various functionalities of AWS Lambda function in NODEJS in detail.
Handler in NodeJS
To writeAWS Lambda function in nodejs, we should first declare a handler first. The handler in nodejs is name of the file and the name of the export function. For Example, the name of the file is index.js and the export function name is lambda handler, so its corresponding handler is index.lambdahandler
Observe a sample handler shown here −
exports.lambdahandler = function(event, context, callback) { //code goes here}
Params to Handler
Handler is the main core for building Lambda function. The handler takes three params: event, context and callback.
Event Parameter
It has all the details of the event triggered. For Example, if we are using Lambda function to be triggered on S3, the event will have details of the S3 object.
Context Parameter
It has the details of the context such as the properties and configuration details of the Lambda function.
Callback Function
It helps in giving details back to the caller. The structure of callback looks as follows −
callback(error, result);
The parameters of callback function are explained given below −
Error − This will have details if any error has occurred during the execution of Lambda function. If the Lambda function succeeds,null can be passed as the first param for callback function.
Result − This will give the details of the successful execution of the lambda function. If an error occurs, the result param is ignored.
Note − It is not mandatory to use the callback function in AWS Lambda. Incase if there is no callback function, the handler will return it as null.
The valid callback signatures are given below −
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
Whenever AWS Lambda gets executed the callback details such as error or success, are logged in AWS CloudWatch along with console messages, if any.
Working with AWS Lambda in Nodejs8.10
Let us understand how to work with AWS Lambda in nodejs8.10 and invoke the function in sync and async way.
Invoking Lambda Function in Sync Way
The following example gives you an idea about invoking Lambda function in sync way −
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);
};
You can observe the following output after testing this code in AWS console −
Note that the output from the above code is a promise object. It does not give the count, as the count is incremented inside a setTimeout and the function call does not wait for the execution inside setTimeout and returns the promise object.
If we had async/await on the handler function will get exact output of from the lambda function.
Invoking the Handler in an Async Way
The following example gives you an idea about invoking Lambda function in an async way −
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);
};
We have added async and await in above code. When we use await beside the function call, the execution pauses till the promise inside the function gets resolved. Note that await is valid only for async functions.
You can observe the following output after testing this code in AWS console −
ContextDetails in NodeJS
Context object gives details such as the name of the Lambda function, time remaining in milliseconds, request id, cloudwatch group name, timeout details etc.
The following tables shows the list of methods and attributes available with context object −
Method available for context object
Sr.No | Method Name & Description |
---|---|
1 | getRemainingTimeInMillis() This method gives the remaining time in milliseconds until the Lambda function terminates the function |
Attributes available for context object
Sr.No | Attribute name & Description |
---|---|
1 | functionName This gives AWS Lambda function name |
2 | functionVersion This gives the version of AWS Lambda function executing |
3 | nvokedFunctionArn This will gives ARN details. |
4 | memoryLimitInMB This shows the memory limit added while creating Lambda function |
5 | awsRequestId This gives the AWS request id. |
6 | logGroupName This will give the name of the cloudwatch group name |
7 | logStreamName This will give the name of the cloudwatch log stream name where the logs are written. |
8 | identity This will give details about amazon cognito identity provider when used with aws mobile sdk. Details given are as follows −
|
9 | clientContext This will details of the client application when used with aws mobile sdk. The details given are as follows −
|
Look at the following example to get a better idea about context object −
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);
};
You can observe the following output after testing this code in AWS console −
You can observe the following log output after testing this code in AWS console −
Logging in NodeJS
We can use console.log for logging in NodeJS.The log details can be fetched from CloudWatch service against the Lambda function.
Observe the following example for a better understanding −
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Logging for AWS Lamnda in NodeJS');
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
You can observe the following output after testing this code in AWS console −
You can observe the following screenshot from CloudWatch −
Error Handling in NodeJS
Let us understand how error notification is done in NodeJS. Observe the following code −
exports.handler = function(event, context, callback) {
// This Source code only throws error.
var error = new Error("something is wrong");
callback(error);
};
You can observe the following in the log output −
The error details are given in the callback as follows −
{
"errorMessage": "something is wrong",
"errorType": "Error",
"stackTrace": [ "exports.handler (/var/task/index.js:2:17)" ]
}
In this chapter, let us understand in detail how to create a simple AWS Lambda function in Java in detail.
Creating JAR file in Eclipse
Before proceeding to work on creating a lambda function in AWS, we need AWS toolkit support for Eclipse. For any guidance on installation of the same, you can refer to the Environment Setup chapter in this tutorial.
Once you are done with installation, follow the steps given here −
Step 1
Open Eclipse IDE and create a new project with AWS Lambda Java Project. Observe the screenshot given below for better understanding −
Step 2
Once you select Next, it will redirect you the screen shown below −
Step 3
Now, a default code is created for Input Type Custom. Once you click Finish button the project gets created as shown below −
Step 4
Now, right click your project and export it. Select Java / JAR file from the Export wizard and click Next.
Step 5
Now, if you click Next, you will be prompted save the file in the destination folder which will be asked when you click on next.
Once the file is saved, go back to AWS Console and create the AWS Lambda function for Java.
Step 6
Now, upload the .jar file that we created using the Upload button as shown in the screenshot given below −
Handler Details for Java
Handler is package name and class name. Look at the following example to understand handler in detail −
Example
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler
Observe that from the above code, the handler will be com.amazonaws.lambda.demo.LambdaFunctionHandler
Now, let us test the changes and see the output −
Context Object in Java
Interaction with AWS Lambda execution is done using the context. It provides following methods to be used inside Java −
Sr.No | Context Methods & Description |
---|---|
1 | getMemoryLimitInMB() this will give the memory limit you specified while creating lambda function. |
2 | getFunctionName() this will give the name of the lambda function. |
3 | getFunctionVersion() this will give the version of the lambda function running. |
4 | getInvokedFunctionArn() this will give the ARN used to invoke the function. |
5 | getAwsRequestId() this will give the aws request id. This id gets created for the lambda function and it is unique. The id can be used with aws support incase if you face any issues. |
6 | getLogGroupName() this will give the aws cloudwatch group name linked with aws lambda function created. It will be null if the iam user is not having permission for cloudwatch logging. |
7 | getClientContext() this will give details about the app and device when used with aws mobile sdk. It will give details like version name and code, client id, title, app package name. It can be null. |
8 | getIdentity() this will give details about the amazon cognito identity when used with aws mobile sdk. It can be null. |
9 | getRemainingTimeInMillis() this will give the remaining time execution in milliseconds when the function is terminated after the specified timeout. |
10 | getLogger() this will give the lambda logger linked with the context object. |
Now, let us update the code given above and observe the output for some of the methods listed above. Observe the Example code given below for a better understanding −
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!";
}
}
После того, как вы запустите приведенный выше код, вы сможете найти вывод, как показано ниже -
Журналы для контекста
Вы можете наблюдать следующий вывод, когда просматриваете вывод журнала -
Память, выделенная для лямбда-функции, составляет 512 МБ. Отведенное время - 25 секунд. Оставшееся время, как показано выше, составляет 24961 в миллисекундах. Итак, 25000 - 24961, что равно 39 миллисекундам, используется для выполнения лямбда-функции. Обратите внимание, что имя группы Cloudwatch и идентификатор запроса также отображаются, как показано выше.
Обратите внимание, что мы использовали следующую команду для печати журналов на Java -
System.out.println (“log message”)
То же самое доступно в CloudWatch. Для этого заходим в сервисы AWS, выбираемCloudWatchservices и нажмите Logs.
Теперь, если вы выберете функцию Lambda, она отобразит дату журналов, как показано ниже -
Вход в Java
Вы также можете использовать Lambdalogger в Java для регистрации данных. Обратите внимание на следующий пример, который показывает то же самое -
пример
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("Input: " + input);
logger.log("AWS Lambda function name: " + context.getFunctionName()+"\n");
logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n");
logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n");
logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n");
logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n");
// TODO: implement your handler
return "Hello from Lambda!";
}
}
Код, показанный выше, даст вам следующий результат -
Результат в CloudWatch будет таким, как показано ниже -
Обработка ошибок в Java для лямбда-функции
В этом разделе объясняется, как обрабатывать ошибки в Java для функции Lambda. Обратите внимание на следующий код, который показывает то же самое -
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 Error from AWS Lambda. Так жеErrorType и stackTrace дает более подробную информацию об ошибке.
Вывод и соответствующий вывод журнала кода, приведенного выше, будут такими, как показано на следующих снимках экрана, приведенных ниже -
В этой главе мы создадим простую функцию AWS Lambda на Python и разберемся с ее рабочими концепциями после подробностей.
Прежде чем приступить к созданию функции Lambda в AWS, нам понадобится поддержка инструментария AWS для Python. Для этого выполните шаги, указанные ниже, и просмотрите соответствующие приложенные скриншоты -
Шаг 1
Войдите в консоль AWS, создайте функцию Lambda и выберите язык как Python.
Шаг 2
Теперь нажмите Create functionи введите данные для создания простого AWS Lambda на Python. Этот код возвращает сообщениеHello from Lambda using Python и выглядит так, как показано здесь -
Шаг 3
Теперь сохраните изменения и протестируйте код, чтобы увидеть результат. Вы должны увидеть следующие выходные данные и журналы при тестировании в консоли AWS с помощью кнопки тестирования в пользовательском интерфейсе.
Шаг 4
Теперь вы можете писать код внутри любого редактора или IDE для Python. Здесь мы используем код Visual Studio для написания кода. Позже вам следует заархивировать файл и загрузить его в консоль AWS.
Здесь мы заархивировали код и использовали его в консоли AWS.
Шаг 5
Теперь выберите Upload a .ZIP file вариант, как показано ниже -
Детали обработчика для Python
Обратите внимание, что обработчик должен быть именем файла, за которым следует имя функции. В приведенном выше случае имя нашего файлаhellopython.py и имя функции my_handler; так что обработчик будет hellopython.my_handler.
После завершения загрузки и сохранения изменений подробные сведения о zip-файле отображаются в онлайн-редакторе консоли AWS Lambda. Теперь давайте протестируем код, чтобы увидеть результат и журналы.
Теперь давайте разберемся с деталями функции Lambda, используя следующий пример кода -
def my_handler(event, context):
return "aws lambda in python using zip file"
В приведенном выше коде имя функции my_handler имеет 2 параметра: событие и контекст.
Объект контекста в Python
Объект контекста предоставляет такие детали, как имя лямбда-функции, оставшееся время в миллисекундах, идентификатор запроса, имя группы облачного наблюдения, детали тайм-аута и т. Д.
Методы и атрибуты, доступные для объекта контекста, показаны в таблицах, приведенных ниже -
Старший Нет | Название и описание метода |
---|---|
1 | get_remaining_time_in_millis() Этот метод дает оставшееся время в миллисекундах, пока лямбда-функция не завершит функцию. |
Старший Нет | Атрибут и описание |
---|---|
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 Это даст имя группы облачных часов. |
7 | log_stream_name Это даст имя потока журнала cloudwatch, в который записываются журналы. |
8 | identity Это даст подробную информацию о поставщике идентификационных данных Amazon Cognito при использовании с aws mobile sdk. Подробности приведены ниже -
|
9 | 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, мы можем использовать доступную функцию печати или журнала. Давайте воспользуемся приведенным выше примером контекста и проверим в CloudWatch, печатаются ли журналы. Обратите внимание на следующий код -
def my_handler(event, context):
print("Log stream name:", context.log_stream_name)
print("Log group name:", context.log_group_name)
print("Request ID:",context.aws_request_id)
print("Mem. limits(MB):", context.memory_limit_in_mb)
print("Time remaining (MS):", context.get_remaining_time_in_millis())
return "aws lambda in python using zip file"
Результат этого кода в CloudWatch показан ниже -
Обратите внимание на следующий пример, чтобы понять, как использовать регистратор для печати журналов в CloudWatch:
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_handler(event, context):
logger.info('Using logger to print messages to cloudwatch logs')
return "aws lambda in python using zip file"
Результат для этого будет таким, как показано на скриншоте ниже -
Обработка ошибок в Python для лямбда-функции
В этом разделе давайте посмотрим на рабочий пример, который показывает, как обрабатывать ошибки в Python. Обратите внимание на приведенный здесь фрагмент кода -
def error_handler(event, context):
raise Exception('Error Occured!')
Отображение журнала показано на изображении здесь -
Поддержка Go Language - недавнее дополнение к AWS. Для работы с Go необходимо выбрать язык в консоли AWS при создании функции AWS Lambda. В этой главе давайте подробно узнаем о функции AWS Lambda на языке Go.
Установка Go
Для начала нам нужна поддержка Go Language. В этом разделе мы рассмотрим следующие детали, чтобы начать работу с AWS Lambda в Go. Это официальный сайт для загрузки Go:https://golang.org/dl/
Теперь загрузите пакет в соответствии с операционной системой. Следуйте приведенной здесь процедуре, чтобы установить Go в соответствующей операционной системе.
Установка в Windows
Обратите внимание, что для Windows доступны 32- и 64-разрядные версии для загрузки. Загрузите zip-файл, извлеките его содержимое и сохраните в выбранном вами каталоге.
Добавьте переменные среды, доступные в ControlPanel ---> System ---> Advanced system settings.
Теперь нажмите Environment Variables кнопку и добавьте путь к каталогу, как показано здесь -
Вы также можете отредактировать системную переменную, как показано здесь -
Как только эти шаги будут выполнены, вы сможете начать работу с 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 Lambda Function с использованием GO
Программа возвращается в Go, когда сборка дает исполняемый файл. Ниже представлена простая программа на 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программа начинается с main, где lambda. start вызывается функцией-обработчиком. Обратите внимание на код, показанный ниже -
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Теперь давайте выполним указанный выше файл с помощью команды Go, а затем заархивируем исполняемый файл.
Структура файла, который мы использовали, показана здесь -
С участием go build, он создает исполняемый файл с именем main.exe. Чтобы заархивировать файл и загрузить его в AWS Lambda, вы можете использовать следующую процедуру:
Чтобы скомпилировать код Windows / Linux / Mac, используйте следующие команды -
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
Затем войдите в консоль AWS и создайте функцию Lambda, используя Go как время выполнения -
После создания функции загрузите исполняемый zip-файл, созданный выше.
Обработчик лямбда-функции в Go
Обработчик - это место, где начинается выполнение программы Go. От основного звонка доlambda.start, выполнение вызывается функцией-обработчиком. Обратите внимание, что добавляемый обработчик будетmain.
Обратите внимание на код здесь для понимания -
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Следуйте приведенным ниже скриншотам -
Теперь сохраните функцию и проверьте ее. Вы можете увидеть результат выполнения, как показано здесь.
Соответствующий вывод журнала будет таким, как показано здесь -
Объект контекста с Go
AWS Lambda в Go предоставляет следующие глобальные переменные и свойства для контекста.
MemoryLimitInMB - Ограничение памяти в МБ, настроенное в лямбда-выражении aws.
FunctionName - имя лямбда-функции aws.
FunctionVersion - версия выполнения лямбда-функции aws.
LogStreamName - имя потока журнала cloudwatch.
LogGroupName - название группы cloudwatch.
Свойства, доступные в контексте, указаны в разделе -
AwsRequestID
Это идентификатор запроса AWS, который вы получаете при вызове функции AWS Lambda.
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)
}
Нам нужно импортировать log и lambda contextиспользовать его с 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 и нажмитеLogsс левой стороны. Теперь найдите в списке функцию Lambda, чтобы просмотреть журналы -
Функциональные ошибки
Вы можете создать собственную обработку ошибок в 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 #. Здесь мы собираемся использовать Visual Studio для написания и развертывания кода в AWS Lambda. Для получения любой информации и помощи по установке Visual studio и добавлению инструментария AWS в Visual Studio см.Introductionглаву в этом руководстве. После того, как вы закончите установку Visual Studio, выполните действия, указанные ниже. Обратитесь к соответствующим снимкам экрана для лучшего понимания -
Шаг 1
Откройте Visual Studio и следуйте инструкциям по созданию нового проекта. Нажмите наFile -> New -> Project.
Шаг 2
Теперь отображается следующий экран, на котором вы выбираете AWS Lambda for Visual C#. ВыбратьAWS Lambda Project (.NET Core).
При необходимости вы можете изменить имя, оставив здесь имя по умолчанию. НажмитеOK продолжать.
На следующем шаге вас попросят выбрать Blueprint.
Выбрать Empty function для этого примера и щелкните Finish. Это создаст новую структуру проекта, как показано ниже -
Теперь выберите Function.cs который является основным файлом, в котором создается обработчик с событием и контекстом для AWS Lambda.
Отображение файла Functions.cs выглядит следующим образом -
Вы можете использовать приведенную ниже команду для сериализации входных и выходных параметров в функцию AWS Lambda.
[assembly:
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
Подробности обработчика для C #
Обработчик отображается следующим образом -
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
Различные компоненты приведенного выше кода объясняются ниже -
FunctionHandler −Это отправная точка функции C # AWS Lambda.
String input − Параметры обработчика string input содержит все данные о событиях, такие как объект S3, детали шлюза API и т. д.
ILambdaContext context −ILamdaContext - это интерфейс с подробностями контекста. Он содержит такие детали, как имя лямбда-функции, детали памяти, детали тайм-аута и т. Д.
Обработчик Lambda можно вызывать синхронно и асинхронно. Если вызвать синхронизацию, как показано выше, вы можете получить возвращаемый тип. Если async, то возвращаемый тип должен быть недействительным.
Теперь давайте развернем AWS Lambda C # и протестируем то же самое. Щелкните проект правой кнопкой мыши и выберитеPublish to AWS Lambda как показано ниже -
Заполните Function Name и нажмите на Next. Следующий отображаемый экран - этоAdvanced Function Details как показано -
Введите Role Name, Memory и Timeout. подробности Обратите внимание, что здесь мы выбрали существующую роль, созданную и использовавшую память как 128 МБ, и время ожидания как 10 секунд. По завершении нажмитеUpload опубликовать в консоли AWS Lambda.
После загрузки функции AWS Lambda вы увидите следующий экран. НажмитеInvokeдля выполнения созданной функции AWS Lambda. В настоящее время он показывает ошибку, поскольку требует ввода данных в соответствии с написанным кодом.
Теперь давайте введем пример ввода и Invokeэто снова. Обратите внимание, что здесь мы ввели текст в поле ввода и то же самое при нажатииinvokeотображается в верхнем регистре в разделе ответов. Вывод журнала отображается ниже -
Теперь давайте также проверим консоль AWS, чтобы увидеть, создана ли функция, когда мы развернули функцию из Visual Studio.
Созданная выше лямбда-функция aws lambda using csharp и то же самое отображается в консоли AWS, как показано на скриншотах, приведенных ниже -
Подпись обработчика
Обработчик - это начальная точка для выполнения AWS. Имя обработчика должно быть определено как -
ASSEMBLY::TYPE::METHOD
Детали подписи поясняются ниже -
ASSEMBLY- Это имя сборки .NET для созданного приложения. По сути, это имя папки, в которой создается проект.
TYPE- Это имя обработчика. Это в основном namespace.classname.
METHOD - Это имя обработчика функции.
Код для подписи обработчика показан ниже -
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 и метод FunctionHandler. Таким образом, подпись обработчикаAWSLamda3::AWSLambda3.Function::FunctionHandler
Объект контекста в C #
Объект контекста предоставляет полезную информацию о среде выполнения в среде AWS. Свойства, доступные в объекте контекста, показаны в следующей таблице -
Старший Нет | Свойства и описание |
---|---|
1 | MemoryLimitInMB Это даст подробную информацию о памяти, настроенной для функции AWS Lambda. |
2 | FunctionName Имя функции AWS Lambda |
3 | FunctionVersion Версия функции AWS Lambda |
4 | InvokedFunctionArn ARN используется для вызова этой функции. |
5 | AwsRequestId Идентификатор запроса AWS для созданной функции AWS |
6 | LogStreamName Имя потока журнала Cloudwatch |
7 | LogGroupName Название группы Cloudwatch |
8 | ClientContext Информация о клиентском приложении и устройстве при использовании с AWS Mobile SDK |
9 | Identity Информация об идентификаторе amazon cogbnito при использовании с AWS Mobile SDK |
10 | RemainingTime Оставшееся время выполнения до завершения функции |
11 | Logger Регистратор, связанный с контекстом |
пример
В этом разделе давайте протестируем некоторые из указанных выше свойств в AWS Lambda на C #. Обратите внимание на пример кода, приведенный ниже -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace AWSLambda6 {
public class Function {
/// <summary>
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public void FunctionHandler(ILambdaContext context) {
LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");
}
}
}
Соответствующий вывод, который вы можете наблюдать, когда вызываете приведенный выше код в C# как показано ниже -
Соответствующий вывод, который вы можете наблюдать, когда вызываете приведенный выше код в AWS Console как показано ниже -
Ведение журнала с использованием C #
Для ведения журнала вы можете использовать две функции -
context.Logger.Log
LambdaLogger.Log
Обратите внимание на следующий пример, показанный здесь -
public void FunctionHandler(ILambdaContext context) {
LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");
}
Соответствующий вывод для кода, приведенного выше, показан здесь -
Вы можете получить журналы из CloudWatch, как показано ниже -
Обработка ошибок в C # для лямбда-функции
В этом разделе обсуждается обработка ошибок в C #. Для обработки ошибок,Exception class должен быть расширен, как показано в примере, показанном ниже -
пример
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. Однако есть и другие параметры для создания лямбда-функции. К ним относятся выделение памяти, тайм-аут и т. Д.
В этой главе мы подробно рассмотрим следующие свойства конфигурации AWS Lambda.
Выделение памяти
Войдите в консоль AWS и создайте или выберите существующую лямбда-функцию. Щелкните значокConfigurationВкладка, чтобы получить подробную информацию о выделенной памяти. Посмотрите на скриншот ниже -
Обратите внимание, что по умолчанию выделенная память 128MB. Если вы хотите увеличить объем памяти, вы можете щелкнуть ползунок.
Память будет увеличена до 64MBпри перемещении ползунка. Обратите внимание, что максимальный доступный объем памяти3008MB. Посмотрите на скриншот ниже -
Вы также можете использовать 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 Lambda для завершения работы в случае истечения тайм-аута. Функция AWS Lambda либо будет запущена в течение отведенного времени, либо завершится, если истечет указанный тайм-аут. Вам необходимо оценить время, необходимое для выполнения функции, и соответственно выбрать время вConfiguration вкладка в консоли AWS, как показано ниже -
Роль IAM
При создании функции AWS Lambda необходимо назначить роль или разрешение. Если вам нужен AWS Lambda для S3 или DynamoDB, необходимо назначить разрешение на использование лямбда-сервисов. В зависимости от назначенной роли AWS Lambda примет решение о необходимых действиях. Например, если вы предоставляете полный доступ к Dynamodb, вы можете добавлять, обновлять и удалять строки из таблицы Dynamodb.
Имя обработчика
Это начало выполнения функции AWS Lambda. Функция обработчика содержит сведения о инициированном событии, объекте контекста и обратном вызове, который необходимо отправить обратно.success или же error 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
Результат выполнения лямбда-функции будет таким, как показано:
Мы можем создать функцию Lambda и протестировать ее в консоли AWS. В этой главе это обсуждается подробно. Для этого вам нужно будет выполнить шаги, приведенные здесь, и просмотреть соответствующие снимки экрана -
Шаг 1
Войдите в Консоль AWS https://aws.amazon.com/console/. Теперь вы будете перенаправлены на экран, где отображаются сервисы AWS.
Шаг 2
Теперь нажмите на Lambdaсервис, как указано выше. Это перенаправит на создание функции, как показано ниже -
Шаг 3
Теперь нажмите Create functionи введите детали функции. Затем вы можете увидеть экран, как показано ниже -
Шаг 4
Вы можете написать свой код, выбрав язык по вашему выбору. Код должен быть написан в редакторе, если выбран вариант редактирования кода в строке. Доступны следующие другие варианты:
Шаг 5
После этого вам нужно сохранить изменения, для которых кнопка находится в правом верхнем углу, как показано ниже -
Шаг 6
Теперь нажмите Testкнопка. Это дает все детали выполнения функции лямбда, как показано ниже -
Шаг 7
Код для index.js выглядит следующим образом -
exports.handler = (event, context, callback) => {
// TODO implement
callback(null, 'Lambda test');
};
Это вызовет Callback functionи результатом может быть ошибка или успех. В случае успеха вы увидитеLambda test message; if error it will pass null.
Step 8
The Role details for Lambda function is a part of the configuration and is displayed as shown below −
Step 9
Now, you can update the role if required and save the Lambda function. Then, the memory and timeout details for lambda function are displayed as shown below −
Step 10
Now, we need to add trigger to the Lambda function so that it executes when the event occurs. The trigger details are displayed at the start of the AWS Lambda function screen as shown below −
From this, you can select the trigger you want your Lambda function to get triggered. When you select the trigger, the config details for the trigger has to be added.
For Example, for trigger on S3 the config details to be added are as follows −
Step 11
Now, select the bucket you want the trigger on. The event type has the following details −
Step 12
For the trigger, you can also mention the prefix type files or file pattern, the Lambda has to be trigger. The details are as shown −
Step 13
Now, fill up the required details for the trigger and click Add button .Save the Lambda function for the trigger to get added.Saving the function deploys the details, and from now onwards anytime files are added to the S3 bucket, the Lambda will get triggered.
Observe the following screenshot which shows S3 trigger added to AWS Lambda −
Step 14
Now, let us use S3 sample event to test the Lambda function. The code for the same is shown here −
Amazon S3 Put Sample Event
{
"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"
}]
}
You will have to use the following command to get the details of file uploaded from the S3 put event −
event.Records[0].s3.object.key //will display the name of the file
You will have to use the following command to get the bucket name −
event.Records[0].s3.bucket.name //will give the name of the bucket.
You will have to use the following command to get the EventName −
event.Records[0].eventName // will display the event name
Step 15
Now, let us update AWS Lambda code to print the S3 details as shown below −
exports.lambdahandler = (event, context, callback) => {
callback(null, "Bucket name: "+event.Records[0].s3.bucket.name+"
File name:"+event.Records[0].s3.object.key );
};
Step 16
Save the changes. Click Test and enter the S3 sample event −
Step 17
Now click Test and you can see the output as shown −
Step 18
To test the trigger on S3 using S3 AWS service, upload a file in S3 bucket: test bucket trigger. Update the role used with Lambda to take S3 and SES policy(to send mail) for permissions. This will update AWS Lambda code to send mail to see the trigger working −
The updated AWS Lambda code is as shown −
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.lambdahandler = function(event, context, callback) {
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "Bucket name: "+event.Records[0].s3.bucket.name+" File name:"+event.Records[0].s3.object.key
}
},
Subject: {
Data: "S3 and AWS Lambda"
}
},
Example: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
The corresponding screenshot is as shown here −
Step 19
Now, upload the file and check the mail id provided in AWS Lambda code −
AWS CLI is a command line tool which helps to work with AWS services. We can use it to create, update, delete, invoke aws lambda function. In this chapter, you will discuss about installation and usage of AWS CLI in detail.
Installation of AWS CLI
This section will guide you through the installation of AWS CLI on various operating systems. Follow the steps given and observe corresponding screenshots wherever attached.
For Windows
Check your Windows configuration and choose one of the following links for installing AWS CLI MSI −
For Windows 64 bit − AWS CLI MSI install for windows (64bit)
For Windows 32 bit − AWS CLI MSI install for windows (32)
Once you choose corresponding link and click it, you can find a Window as shown here −
Next, set the Environment path in windows as shown in the screenshots below −
Once done, you can use the following command on the command prompt, to see if aws cli is installed −
aws --version
It displays the details of aws-cli version as shown in the following screenshot −
For Linux / Mac
For installing on Linux and Mac, you need Python 2.6.3 or higher verison of it. Then, use following commands for further installation processes −
$ 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
Now, we need to configure AWS settings. You can use the following command for this purpose −
aws configure
For this purpose, it requires details such as −
- AWS Access Key ID
- AWS Secret Access Key
- Default region name
- Default output from format
You can obtain these details from your aws console. Go to you Account name at top right corner as shown −
Now, click My Security Credentials and select users from left side. Add user with details as asked.
Add the user and to get the access key and secret key. To see the new access key, choose Show. Your credentials will look like as shown below −
Access key ID − AOSAIOSFOCDD7Example
Secret access key − aJuirCVtnROUN/K7MDENG/bPxRfiCYExampleKEY
Reference Commands for AWS CLIS
The following table will give command references available to work with aws cli.
Name of aws cli command | Command reference |
---|---|
create-function | 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>] |
list-functions | list-functions [--master-region <value>] [--function-version <value>] [--max-items <value>] [--cli-input-json <value>] [--starting-token <value>] [--page-size <value>] [--generate-cli-skeleton <value>] |
get-function | get-function --function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
get-function-configuration | get-function-configuration --function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
get-account-settings | get-account-settings [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
update-function-configuration | update-function-configuration --function-name <value> [--role <value>] [--handler <value>] [--description <value>] [--timeout <value>] [--memory-size <value>] [--vpc-config <value>] [--environment <value>] [--runtime <value>] [--dead-letter-config <value>] [--kms-key-arn <value>] [--tracing-config <value>] [--revision-id <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
update-function-code | update-function-code --function-name <value> [--zip-file <value>] [--s3-bucket<value>] [--s3-key <value>] [--s3-object-version <value>] [--publish | --no-publish] [--dry-run | --no-dry-run] [--revision-id <value>][--cli-input-json <value>][--generate-cli-skeleton <value>] |
delete-function | delete-function --function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
Now, let us discuss these commands one by one in detail.
create-function
This api will create a new lambda function. The code needs to be given in zip format. If the function to be created already exists, the api will fail. Note that the function name is case-sensitive.
Commands Included
The list of commands that you can use with create-function is given here −
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>]
Options Included
Various options that you can use with the functions above are as follows −
--function-name (string) − This takes the name of the function. The name can be 64-bit characters.
--runtime(string) − Here you need to specify the runtime environment ie the language selection. The details of the runtime are as given below −
Options available | runtime |
---|---|
Python v3.6 | python3.6 |
Python v2.7 | python2.7 |
NodeJS v6.10 | nodejs6.10 |
NodeJS v8.10 | nodejs8.10 |
Java | java8 |
C# 1 | dotnetcore1.0 |
C# 2 | dotnetcore2.0 |
Go | go1.x |
--role(string) − This will be the name of the lambda policy ie the role to be given to the lambda function for accessing other services. It will have the permission as per the role specified.
--handler (string) − This is the name of the handler where the lambda code execution will start.
- For nodejs, handler name is the module name that we export.
- For java, it is package.classname :: handler or package.classname
- For python, handler is nameofthefile.
--code (structure) −AWS Lambda code
--description (string) − description for the AWS Lambda function
--timeout (integer) − timeout will have the time at which the lambda function has to terminate execution. The default is 3s.
--memory-size (integer) − This is the memory given to the aws lambda function. AWS will allocate the amount of CPU and memory allocation based on the memory given.
--environment (structure) - это объект с деталями среды, необходимыми в лямбда-функции 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 Lambda, используя среду выполнения как nodejs, и добавим несколько console.logs для печати.
Рассмотрим пример кода для понимания того же -
exports.handler = async (event) => {
console.log("Using aws cli");
return 'Hello from Lambda from aws cli!'
};
Теперь заархивируйте файл и сохраните его как awscli.zip.
Получение ARN
Для роли воспользуемся arnиз существующей роли, которую мы создали. Чтобы получить ARN, вам нужно будет выполнить шаги, показанные здесь. Обратите внимание на соответствующие скриншоты, где бы они ни были -
Шаг 1
Перейдите в IAM и выберите нужную роль Roles. Детали ARN для роли отображаются, как показано ниже. ИспользоватьRole ARN с участием create-function в aws cli.
Обратите внимание, что роль arn следующая: arn: aws: iam :: 625297745038: role / lambdaapipolicy
Команда со значениями для create-function выглядит следующим образом -
aws lambda create-function
--function-name "awslambdausingcli"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "awscli.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://awscli.zip"
Теперь, если вы запустите команду в aws cli, вы можете найти вывод, как показано ниже -
В консоли AWS функция Lambda отображается, как показано ниже -
Подробности функций показаны здесь -
Детали конфигурации приведены ниже -
Вы можете протестировать функцию и проверить вывод, как показано -
Соответствующий вывод журнала показан здесь -
список-функции
Этот api содержит список функций, созданных на данный момент в AWS Lambda.
Команды включены
Ниже приведены команды, связанные с этим API:
list-functions
[--master-region <value>]
[--function-version <value>]
[--max-items <value>]
[--cli-input-json <value>]
Параметры под списком функций
Ниже приведены различные параметры, которые вы можете использовать в этом API-интерфейсе списка функций:
--master-region(string)- необязательно. Регион, из которого должны отображаться функции.
--function-version(string)- необязательно. Это даст версию функции.
--max-items(integer)- необязательно. Это даст элементы в соответствии с указанным значением.
--cli-input-json(string)- необязательно. Выполняет операцию на основе предоставленного файла json.
Команда со значениями list-functions выглядит следующим образом -
aws lambda list-functions --max-items 3
Команда отображает подробности следующим образом -
get-функция
Этот api предоставит подробную информацию о функциях, а также URL-ссылку, в которую загружен zip-файл с помощью функции создания. URL с деталями zip будет действителен только в течение 10 минут.
Команды включены
Ниже приведены команды, связанные с этим api:
get-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Включенные опции
--function-name- Имя функции AWS Lambda. Вы также можете указать имя ресурса Amazon для функции.
--qualifier(string)- Необязательно. Версия функции может использоваться для получения подробных сведений о функции.
Команда со значениями для get-функции:
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>]
The following are the options used with
--function-name (string) −имя лямбда-функции aws. Вы также можете указать имя ресурса Amazon для функции.
--qualifier(string) − Необязательно. Версия функции может использоваться для получения сведений о функции.
Команда со значениями для get-функции:
aws lambda get-function-configuration --function-name awslambdausingcli
Команда отображает подробности следующим образом -
get-account-settings
Этот 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
--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 (string) −необязательный. Необходимо обновить ARN роли.
--handler (string) −необязательный. Детали обработчика лямбда-функции aws.
--description(string) −необязательный. Описание функции.
--timeout(integer) −необязательный. Время, необходимое для завершения лямбда-функции aws.
--memory-size(integer) −необязательный. Это память, предоставленная лямбда-функции aws. AWS будет выделять объем ЦП и памяти на основе предоставленной памяти.
--environment (structure) −необязательный. Это объект, детали окружения которого требуются в лямбда-функции aws.
e.g: Variables = {Name1 = string, Name2 = string}
--runtime(string) − Здесь вам нужно указать среду выполнения, то есть выбор языка.
Детали среды выполнения показаны в таблице, приведенной ниже -
Доступные варианты | время выполнения |
---|---|
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 (string) −необязательный. Это выполнит операцию с API, как указано в предоставленной строке json.
--generate-cli-skeleton (string) −необязательный. Это выведет скелет JSON со всеми деталями без выполнения api. Выход может использоваться как вход для--cli-input-json.
Теперь давайте изменим память и тайм-аут функции AWS Lambda, которые мы создали ранее. Следуйте инструкциям, приведенным ниже, и просмотрите соответствующие снимки экрана, прилагаемые для этой цели -
Шаг 1
Память и тайм-аут до того, как произошло изменение, следующие:
Шаг 2
Теперь с update-function-configuration, давайте изменим память и тайм-аут на 320 МБ и тайм-аут на 10 секунд. Для этого используйте следующую команду со значениями -
aws lambda update-function-configuration --function-name “awslambdusingcli”
--timeout 10 --memory-size 320
Шаг 3
Затем вы можете увидеть следующий вывод на дисплее -
Шаг 4
Отображение в консоли AWS после использования update-function-configuration выглядит следующим образом -
Код функции обновления
Этот api обновит код для существующей функции AWS Lambda.
Участвующие команды
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 кода функции обновления:
--function-name(string) − имя лямбда-функции aws
--zip-file (blob) −необязательный. Путь к zip-файлу, в котором содержится обновляемый код.
--s3-bucket(string) −необязательный. Имя сегмента S3, в который загружен zip-файл с кодом.
--s3-key(string) −необязательный. Имя ключа объекта AWS s3, которое необходимо загрузить.
--s3-object-version (string) −необязательный. Версия объекта AWS s3.
--cli-input-json (string) −необязательный. Это выполнит операцию с 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!'
};
Вы можете использовать следующие command with values for this purpose -
aws lambda update-function-code --function-name "awslambdausingcli"
--zip-file "fileb://awscli.zip"
Соответствующий вывод показан здесь -
Дисплей консоли AWS выглядит следующим образом -
Соответствующий вывод журнала показан ниже -
функция удаления
В delete aws cli api удалит указанную функцию.
Команды включены
Детали команды для этого же приведены здесь -
delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Включенные опции
Параметры, включенные в этот api, приведены ниже -
--function-name(string) − это примет имя лямбда-функции или arn лямбда-функции aws.
--qualifier (string) −Это необязательно. Здесь вы можете указать версию лямбда-выражения aws, которую необходимо удалить.
-- 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 -
AWS Lambda можно создать и развернуть с использованием бессерверной инфраструктуры. Он позволяет создавать триггеры AWS Lambda, а также развертывать их, создавая необходимые роли. Бессерверный фреймворк упрощает работу с большими проектами. Необходимые события и ресурсы записываются в одном месте, и всего несколько команд помогают развернуть полную функциональность на консоли AWS.
В этой главе вы подробно узнаете, как начать работу с бессерверной структурой AWS.
Установите Serverless Framework с помощью npm install
Для начала нужно сначала установить nodejs. Вы можете проверить nodejs следующим образом:
Вам нужно будет использовать следующую команду для установки без сервера с использованием пакета npm -
npm install -g serverless
После завершения npm выполните бессерверную команду, в которой отображается список команд, которые будут использоваться для создания и развертывания функции AWS Lambda. Обратите внимание на приведенные ниже скриншоты -
Вы также можете использовать sls вместо serverless. sls это сокращенная команда для бессерверного.
Если вам нужна помощь по команде sls, вы можете использовать следующую команду -
sls create --help
Для создания бессерверной структуры вы должны выполнить следующие шаги:
Шаг 1
Чтобы начать использовать бессерверную структуру, нам нужно добавить учетные данные. Таким образом, вы можете сначала ввести пользователя в консоль AWS следующим образом:
Шаг 2
Нажмите на Next:Permissionsкнопку, чтобы добавить разрешения. Вам нужно будет прикрепить существующие политики или доступ администратора к этому пользователю.
Шаг 3
Нажмите Create Userдобавить пользователя. Он отобразит ключ доступа и секретный ключ, который нам нужен для настройки бессерверной структуры -
Настроить AWS Serverless Framework
Давайте посмотрим, как настроить бессерверную структуру AWS. Для этой цели вы можете использовать следующую команду -
sls config credentials --provider aws --key accesskey --secret secretkey
Обратите внимание, что сведения о введенных учетных данных, то есть access key и secret key хранятся в file /aws/credentials.
Сначала создайте папку, в которой вы хотите хранить файлы вашего проекта.
Далее мы начнем работу в aws-serverless папка.
Создайте AWS Lambda с помощью Serverless Framework
Теперь давайте создадим лямбда-функцию с бессерверной структурой, используя шаги, указанные ниже:
Шаг 1
Ниже приведены сведения о бессерверном create команда -
Шаг 2
Теперь нам нужно назначить шаблон, который выглядит следующим образом:
AWS-nodejs, aws-nodejs-typescript, aws-nodejs-ecma-script, aws-python, aws-python3, aws-groovy-gradle etc.
Шаг 3
Мы будем использовать aws-nodejsшаблон для создания нашего первого проекта с использованием бессерверной среды. Команда для той же цели показана здесь -
sls create --template aws-nodejs
Обратите внимание, что эта команда создает шаблон для шаблона aws-nodejs.
Шаг 4
Теперь откройте папку, созданную в IDE. Здесь мы используем код Visual Studio, а структура папок выглядит следующим образом:
Шаг 5
Создано 2 файла: handler.js и Serverless.yml
Подробные сведения об основных функциях AWS Lambda показаны на handler.js следующим образом -
'use strict';
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!',
input: event,
}),
};
callback(null, response);
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};
Этот файл Serverless.yml имеет детали конфигурации бессерверной структуры, как показано ниже -
# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config Examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
# docs.serverless.com
#
# Happy Coding!
service: aws-nodejs # NOTE: update this with your service name
# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"
provider:
name: aws
runtime: nodejs6.10
# you can overwrite defaults here
# stage: dev
# region: us-east-1
# you can add statements to the Lambda function's IAM Role here
# iamRoleStatements:
# - Effect: "Allow"
# Action:
# - "s3:ListBucket"
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
# - Effect: "Allow"
# Action:
# - "s3:PutObject"
# Resource:
# Fn::Join:
# - ""
# - - "arn:aws:s3:::"
# - "Ref" : "ServerlessDeploymentBucket"
# - "/*"
# you can define service wide environment variables here
# environment:
# variable1: value1
# you can add packaging information here
#package:
# include:
# - include-me.js
# - include-me-dir/**
# exclude:
# - exclude-me.js
# - exclude-me-dir/**
functions:
hello:
handler: handler.hello
# The following are a few example events you can configure
# NOTE: Please make sure to change your handler code to work with those events
# Check the event documentation for details
# events:
# - http:
# path: users/create
# method: get
# - s3: ${env:BUCKET}
# - schedule: rate(10 minutes)
# - sns: greeter-topic
# - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
# - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
# - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
# - iot:
# sql: "SELECT * FROM 'some_topic'"
# - cloudwatchEvent:
# event:
# Example:
# - "aws.ec2"
# detail-type:
# - "EC2 Instance State-change Notification"
# detail:
# state:
# - pending
# - cloudwatchLog: '/aws/lambda/hello'
# - cognitoUserPool:
# pool: MyUserPool
# trigger: PreSignUp
# Define function environment variables here
# environment:
# variable2: value2
# you can add CloudFormation resource templates here
#resources:
# resources:
# NewResource:
# Type: AWS::S3::Bucket
# Properties:
# BucketName: my-new-bucket
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
Теперь нам нужно внести изменения в файл serverless.yml в соответствии с нашими требованиями. Вы можете использовать команды, указанные ниже -
Вы можете использовать следующую команду для Service -
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. Нам нужно добавитьregion в котором мы будем работать и stage, то есть dev or prodсреда для проекта. Итак, вот обновленные сведения о поставщике: поставщик -
name: aws
runtime: nodejs6.10
# you can overwrite defaults here
stage: prod
region: us-east-1
Роль IAM
В iam role, то есть код для разрешения работы с 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.jsпривет. Таким образом, обработчик - это имя файла, за которым следует имя экспорта.
functions:
hello:
handler: handler.hello
Сведения о ресурсе о службе s3 добавлены, как показано ниже здесь -
# you can add CloudFormation resource templates here
#resources:
# resources:
# NewResource:
# Type: AWS::S3::Bucket
# Properties:
# BucketName: my-new-bucket
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
Развертывание AWS Lambda с помощью Serverless Framework
Давайте развернем указанную выше лямбда-функцию на консоли AWS. Для этой цели вы можете использовать следующие шаги -
Шаг 1
Во-первых, вам нужно будет использовать следующую команду -
sls deploy
Шаг 2
Теперь вы должны увидеть функцию в консоли AWS, как показано. Детали бессерверного AWS регистрируются в формировании облака AWS. Для этого перейдите в сервис AWS и выберитеCloudFormation. Подробности AWS Lambda отображаются следующим образом:
Обратите внимание, что данное имя - это имя проекта, за которым следует используемый этап.
Шаг 3
Он создает роль iam для AWS Lambda и группу журналов для AWS cloudwatch. Создается корзина S3, в которой хранятся детали кода и детали конфигурации.
Это создается командой sls deploy. Вам не нужно указывать роль iam, вместо этого она создается по умолчанию во времяdeploy этап.
Шаг 4
Подробный поток событий отображается ниже в сервисе формирования облака.
Код AWS Lambda
Код AWS Lambda и параметры его выполнения показаны на скриншоте ниже -
Когда вы тестируете лямбда-функцию, вы можете найти следующий результат:
Вывод журнала для вышеуказанной функции показан здесь -
Мы также можем протестировать функцию AWS Lambda с помощью бессерверной команды, как показано ниже -
sls invoke --function hello
Синтаксис команды вызова показан здесь -
sls invoke --function hello
Эта команда вызова запускает функцию AWS Lambda и отображает вывод в командной строке, как показано ниже:
Вы также можете протестировать функцию Lambda перед развертыванием и команду для того же, используя следующую команду -
sls invoke local --function hello
Обратите внимание, что не всегда можно протестировать локально, поскольку такие ресурсы, как S3 и DynanoDB, не могут быть смоделированы в локальной среде. Локально можно протестировать только вызовы основных функций.
Использование API Gateway и AWS Lambda с Serverless Framework
Давайте посмотрим, как создать новый проект для работы с Lambda и API-шлюзом. Для этой цели вы можете использовать следующую команду -
sls create --template aws-nodejs
Теперь откройте aws-apiпроект в визуальном коде. Вы можете видеть, чтоhandler.js и serverless.ymlфайлы созданы. Давайте внесем в него изменения для добавления шлюза api.
Вам нужно будет внести следующие изменения в serverless.yml -
Теперь подробности событий добавлены для активации шлюза API с помощью AWS Lambda -
Здесь добавлена новая вещь, которая называется events. Мы указали событие какhttp, а также его путь и метод.
Путь - это конечная точка, которую мы будем использовать при создании пути шлюза api и используемом методе GET.
Обратите внимание, что обработчик handler.hello, а hello - это имя экспорта из handler.js.
Обратите внимание, что вам не нужно развертывать здесь шлюз api, так как это будет выполнять бессерверная структура.
Теперь мы запустим sls deploy команда для создания функции AWS Lambda с триггером как api gateway.
sls deploy
Обратите внимание, что детали развертывания перечислены выше. Это даетGeturl с конечной точкой в качестве подробностей пути. Сцена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 имеют значение null, поскольку в строке запроса ничего не передается. Подробная информация о мероприятии предоставляетсяinput который мы указали в обработчике AWS Lambda -
Вывод, который мы получаем от шлюза api, - это только body детали, такие как message и input. Ответ полностью контролируется шлюзом api и способом его отображения в качестве вывода.
Теперь давайте передадим входные данные URL-адресу GET в строке запроса и посмотрим на дисплей -
Затем вы можете увидеть вывод строки запроса, как показано ниже -
{"message":"Go Serverless v1.0! Your function executed
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate,
br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":"https",
"CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false",
"CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false",
"CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.amazonaws.com",
"upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36","Via":"2.0
8b1d3263c2fbd0a2c270b174d7aa3d61.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"JIBZw3I-blKbnpHP8LYXPVolCgdW5KmEukZS4at9mi4vrWBMI-UKNw==",
"X-Amzn-Trace-Id":"Root=1-5b13ff90-7d6e38d4c0e4a5d4e6184f30","X-Forwarded-For":
"157.33.133.217, 54.182.242.127","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"queryString
Parameters":{"displaymessage":"Hello"},"pathParameters":null,"stageVariables":null,
"requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
"GET","extendedRequestId":"H6TeiG34oAMFguA=","requestTime":"03/Jun/2018:14:47:44 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
"stage":"prod","requestTimeEpoch":1528037264252,"requestId":"12e5dca3-
673d-11e8-8966-69fcf43bd4db","identity":{"cognitoIdentityPoolId":null,"accountId":null,
"cognitoIdentityId":null,"caller":null,"exmpleIp":"157.33.133.217","accessKey":null,
"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":
null,"isBase64Encoded":false}}
Давайте изменим функцию AWS Lambda, чтобы просто отображать детали строки запроса, как показано ниже -
'use strict';
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message:(event.queryStringParameters && event.queryStringParameters.displaymessage!="") ? event.queryStringParameters.displaymessage : 'Go Serverless v1.0! Your function executed successfully!'
}),
};
callback(null, response);
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};
Обратите внимание, что мы изменили сообщение на основе строки запроса display message. Это снова развернет функцию и проверит вывод. Он отображает сведения, представленные в сообщении отображения переменной строки запроса, как показано ниже.
Давайте теперь добавим post метод к событиям, созданным, как показано ниже -
Теперь разверните внесенные изменения, и вы увидите следующий вывод команды развертывания:
Обратите внимание, что тестирование URL-адреса публикации в браузере напрямую не дает подробностей. Вы должны проверить URL-адрес сообщения вpostman.
Чтобы получить почтальона, перейдите в https://www.getpostman.com/apps. Загрузите приложение для своей ОС. После установки вы сможете проверить URL-адрес своего сообщения, как показано ниже -
Это отображает сообщение, которое мы добавили в функцию Lambda.
В этой главе подробно объясняется процесс выполнения и вызова лямбда-функции, а также этапы его выполнения.
Модель выполнения AWS Lambda
Выполнение AWS зависит от деталей конфигурации, добавленных для AWS Lambda Function. Когда функция создана, появляетсяmemory и time allotted, который используется для выполнения функции AWS Lambda.
С помощью подробностей конфигурации AWS Lambda создает контекст выполнения. Контекст выполнения - это временная среда выполнения, которая подготовлена с учетом любых внешних зависимостей, таких как соединение с базой данных, конечные точки http, сторонние библиотеки и т. Д., Если таковые имеются.
Когда функция AWS Lambda вызывается в первый раз или если лямбда-функция обновляется, добавляется небольшая задержка из-за настройки контекста выполнения. Однако последующие вызовы выполняются быстрее по сравнению с первым. AWS Lambda пытается повторно использовать контекст выполнения, если функция Lambda вызывается с меньшим временем.
Повторное использование контекста выполнения имеет следующие последствия:
Если для выполнения Lambda установлено какое-либо соединение с базой данных, соединение сохраняется для повторного использования. Таким образом, лямбда-код должен быть таким, чтобы сначала нужно было проверить соединение, если оно существует и используется повторно; в противном случае нам придется установить новое новое соединение.
Контекст выполнения поддерживает дисковое пространство 500 МБ в /tmpкаталог. Необходимые данные кэшируются в этом каталоге. Вы можете дополнительно проверить код, чтобы узнать, существуют ли данные.
Если обратные вызовы или некоторые фоновые процессы, если они не были завершены при вызове лямбда-функции, выполнение начнется при повторном вызове лямбда-функции. Если вам не нужно, чтобы это происходило, убедитесь, что все ваши процессы завершены правильно, когда выполнение функции завершено.
Вы должны использовать контекст выполнения и данные, хранящиеся в каталоге tmp. Вам нужно будет добавить необходимые проверки в код, чтобы увидеть, существуют ли требуемые данные, прежде чем создавать новые. Это сэкономит время во время выполнения и сделает его более быстрым.
Вызов функции AWS Lambda
Мы можем вызвать AWS вручную, используя aws cli. Мы уже видели, как создать и развернуть AWS Lambda с помощьюcli. Здесь мы сначала создадим функцию, используяaws cli и призываем то же самое.
Создание AWS Lambda Function с помощью AWS CLI
Вы можете использовать следующие команды для создания функции AWS Lambda с помощью aws cli -
Commands
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>]
Command with values
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>
Options
--function-name − Укажите имя функции, которую вы хотите вызвать.
--invocation-type(string) − по умолчанию тип вызова requestresponse. Доступные значения для использования с типом вызова:RequestResponse, Event и DryRun.
Тип вызова события должен использоваться для асинхронного ответа.
DryRun следует использовать, если вы хотите проверить функцию Lambda без необходимости ее выполнения.
--log-type − Это будет Tailесли тип вызова - RequestResponse. Он дает последние 4 КБ данных журнала в кодировке base64. Возможные значения:Tail и None.
--client-context −Вы можете передать специфические данные клиента в функцию Lambda. Клиентский контекст должен быть в формате json и закодирован в base64. Максимальный размер файла - 3583 байта.
--payload − json вход в лямбда-функцию.
--qualifier −Вы можете указать версию лямбда-функции или имя псевдонима. Если вы передадите версию функции, тогда api будет использовать квалифицированную функцию arn для вызова функции Lambda. Если вы укажете псевдоним, api использует псевдоним ARN для вызова функции Lambda.
outfile − Это имя файла, в котором будет сохранен контент.
Command with values
aws lambda invoke --function-name "lambdainvoke" --log-type
Tail C:\nodeproject\outputfile.txt
Вы можете использовать опцию полезной нагрузки для отправки фиктивного события в лямбда-функцию в формате json, как показано ниже.
Соответствующий код AWS Lambda выглядит следующим образом:
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);
};
Обратите внимание, что в коде есть console 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"
}]
}
Чтобы получить details of the file from the s3 put event, вы можете использовать следующую команду -
event.Records[0].s3.object.key //will display the name of the file
Чтобы get the bucket name, вы можете использовать следующую команду -
event.Records[0].s3.bucket.name //will give the name of the bucket.
Чтобы see the EventName, вы можете использовать следующую команду -
event.Records[0].eventName // will display the eventname
Amazon S3 Delete Sample Event
{
"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 Simple Notification
AWS Lambda может помочь обработать уведомление, созданное в Simple Notification Service (SNS). Всякий раз, когда в SNS публикуется сообщение, лямбда-функция может запускаться с помощью события SNS, которое содержит подробную информацию о сообщениях. Эти сообщения могут обрабатываться внутри лямбда-функции и могут быть отправлены в другие службы в соответствии с требованиями.
После ввода сообщения SNS активирует функцию лямбда. Если какая-либо ошибка пытается вызвать лямбда-функцию, SNS повторяет попытку вызова лямбда-функции до трех раз.
Пример события Amazon SNS
Пример события, в котором есть все подробности, доступные в функции AWS Lambda для выполнения дальнейшего процесса, показан ниже.
{
"Records": [{
"EventVersion": "1.0",
"EventSubscriptionArn": eventsubscriptionarn,
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": topicarn,
"Subject": "TestInvoke"
}
}]
}
Amazon Simple Mail Service
Amazon Simple Mail Service можно использовать для отправки сообщений, а также для получения сообщений. Функцию AWS Lambda можно вызвать в Simple Mail Service при получении сообщения.
Пример события получения электронной почты Amazon SES
Подробности события SES при использовании внутри AWS Lambda показаны ниже -
{
"Records": [{
"eventVersion": "1.0",
"ses": {
"mail": {
"commonHeaders": {
"from": [
"Jane Doe <[email protected]>"
],
"to": [
"[email protected]"
],
"returnPath": "[email protected]",
"messageId": "<0123456789Source.com>",
"date": "Wed, 7 Oct 2015 12:34:56 -0700",
"subject": "Test Subject"
},
"example": "[email protected]",
"timestamp": "1970-01-01T00:00:00.000Z",
"destination": [
"[email protected]"
],
"headers": [{
"name": "Return-Path",
"value": "<[email protected]>"
},
{
"name": "Received",
"value": "from mailer.example.com (mailer.example.com [203.0.113.1]) by inbound-smtp.us-west-2.amazonaws.com with SMTP id o3vrnil0e2ic for [email protected]; Wed, 07 Oct 2015 12:34:56 +0000 (UTC)"
},
{
"name": "DKIM-Signature",
"value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=example; h=mime-version:from:date:message-id:subject:to:content-type; bh=jX3F0bCAI7sIbkHyy3mLYO28ieDQz2R0P8HwQkklFj4=; b=sQwJ+LMe9RjkesGu+vqU56asvMhrLRRYrWCbV"
},
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "From",
"value": "Jane Doe <[email protected]>"
},
{
"name": "Date",
"value": "Wed, 7 Oct 2015 12:34:56 -0700"
},
{
"name": "Message-ID",
"value": "<0123456789example.com>"
},
{
"name": "Subject",
"value": "Test Subject"
},
{
"name": "To",
"value": "[email protected]"
},
{
"name": "Content-Type",
"value": "text/plain; charset=UTF-8"
}],
"headersTruncated": false,
"messageId": "o3vrnil0e2ic28tr"
},
"receipt": {
"recipients": [
"[email protected]"
],
"timestamp": "1970-01-01T00:00:00.000Z",
"spamVerdict": {
"status": "PASS"
},
"dkimVerdict": {
"status": "PASS"
},
"processingTimeMillis": 574,
"action": {
"type": "Lambda",
"invocationType": "Event",
"functionArn": "arn:aws:lambda:us-west-2:012345678912:function:example"
},
"spfVerdict": {
"status": "PASS"
},
"virusVerdict": {
"status": "PASS"
}
}
},
"eventexample": "aws:ses"
}]
}
Журналы Amazon Cloudwatch
AWS Lambda можно запустить из Amazon CloudWatch Logs с помощью CloudWatch Logs Subscriptions. Подписки 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 Lambda можно вызвать на httpsURL. Это можно сделать наGET, POST, PUT. Когда вызывается URL-адрес https, также запускается функция 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 Gateway
{
"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 Lambda приведет к удалению AWS Lambda из консоли AWS. Есть 2 способа удалить функцию AWS Lambda.
- С помощью консоли AWS.
- Использование команды AWS CLI
В этой главе подробно рассматриваются эти два способа.
Использование Консоли AWS
Чтобы удалить функцию Lambda с помощью консоли AWS, выполните следующие действия:
Шаг 1
Войдите в консоль AWS и перейдите в сервис AWS Lambda. Вы можете обнаружить, что созданные на данный момент лямбда-функции AWS перечислены в консоли AWS, как показано ниже -
В списке показано, что на данный момент создано 23 функции AWS Lambda. Вы можете просмотреть их, используя приведенную сверху нумерацию страниц, или выполнить поиск в AWS Lambda с помощью окна поиска.
Шаг 2
Обратите внимание на наличие переключателя для каждой функции AWS Lambda. Выберите функцию, которую хотите удалить. Обратите внимание на снимок экрана, показанный ниже -
Шаг 3
После выбора функции AWS Lambda Actionраскрывающийся список, который ранее был затенен серым, теперь выделен. Теперь откройте поле со списком, и оно отобразит параметры, как показано -
Шаг 4
Выберите Deleteкнопку, чтобы удалить функцию AWS Lambda. Как только вы нажметеDelete, он отображает следующее сообщение -
Шаг 5
Внимательно прочтите сообщение, а затем нажмите Delete кнопку, чтобы навсегда удалить лямбда-функцию AWS.
Note- Удаление лямбда-выражения aws не приведет к удалению связанной роли. Чтобы удалить роль, вам нужно перейти в IAM и удалить роль.
Шаг 6
Список созданных на данный момент ролей показан ниже. Обратите внимание, что естьCreate role кнопка и Delete role кнопка.
Установите флажок напротив роли, которую хотите удалить. Вы также можете выбрать несколько ролей для удаления одновременно.
Шаг 7
Вы увидите подтверждающее сообщение, как показано ниже, после того, как нажмете кнопку Удалить -
Теперь внимательно прочтите упомянутые детали, а затем нажмите Yes, delete кнопка.
Использование команды AWS CLI
Давайте сначала создадим лямбда-функцию с помощью aws cli и удалим ее с помощью той же команды. Для этого следуйте инструкциям, приведенным ниже -
Шаг 1
Команда со значениями для create-function выглядит следующим образом:aws lambda create-function
--function-name "lambdatestcli"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "index.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://C:\demotest\index.zip"
Соответствующий вывод показан здесь -
Шаг 2
Созданная функция AWS Lambda lambdatestcli. Мы использовали существующую роль arn для создания лямбда-функции.
Затем вы можете найти эту функцию, отображаемую в консоли AWS, как показано ниже -
Шаг 3
Теперь давайте вызовем функцию для проверки вывода, используя показанную команду -aws lambda invoke --function-name "lambdatestcli" --log-type Tail
C:\demotest\outputfile.txt
Эта команда даст вам результат, как показано -
Шаг 4
Вы можете наблюдать журналы из cloudwatch для лямбда-функции lambdatestcliШаг 5
Теперь перейдем к собственно части удаления функции AWS. Delete aws cli apiудалит указанную функцию. Детали команды, используемой для этой цели, приведены ниже -Command
delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Options
--function-name(string) - Это примет имя функции Lambda или arn функции AWS Lambda.
--qualifier (string)- Это необязательно. Здесь вы можете указать версию AWS Lambda, которую необходимо удалить.
-- cli-input-json(string)- Выполняет служебную операцию на основе предоставленной строки JSON. Строка JSON соответствует предоставленному форматуby --generate-cli-skeleton. Если в командной строке указаны другие аргументы, значения CLI переопределят значения, предоставленные JSON.
--generate-cli-skeleton(string) - выводит скелет json на стандартный вывод без отправки запроса API.
Command with values
aws lambda delete-function --function-name "lambdatestcli"
Соответствующий вывод показан ниже -
Шаг 6
Если вы проверите сейчас, вы увидите, что функция не будет отображаться в списке функций AWS Lambda, как показано на скриншоте ниже -Работа с Amazon API Gateway
Функцию AWS Lambda можно вызвать на HTTPSURL. Это можно сделать с помощью GET, POST, PUT. Когда вызывается URL-адрес HTTPS, также может срабатывать функция 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 и выберите Roles из левой части, как показано ниже -
Нажмите Create role для лямбда-функции.
Выберите Lambda и нажмите Permissionsвнизу. Выберите разрешение, необходимое для API Gateway и Lambda.
Найдите шлюз API в поиске, и он перечислит вам все соответствующие разрешения. Здесь мы выбрали полный доступ к шлюзу API, как показано ниже -
Теперь найдите шлюз API, и он перечислит вам все соответствующие разрешения. Здесь мы выбрали полный доступ к шлюзу API, как показано ниже -
Вы должны повторить тот же процесс и для политик.
Когда вы закончите выбор необходимых политик, нажмите Reviewдля следующего шага. Введите название роли по вашему выбору, как показано ниже -
Он отображает политики, привязанные к роли. НажмитеCreate role и мы закончили с созданием роли и можем перейти к лямбда-функции.
Создать функцию AWS Lambda
Перейдите в сервисы AWS и щелкните лямбда-сервис, чтобы создать функцию для его подключения к шлюзу API.
Экран пользовательского интерфейса для лямбда-функции показан ниже. НажмитеCreate function кнопку, чтобы продолжить создание лямбда-функции.
Введите имя функции и выберите существующую роль, которую мы создали выше.
Мигает сообщение, что функция с названием lambdawithapigateway создан успешно.
Обратите внимание, что здесь мы будем использовать nodejsвремя выполнения для написания кода. Код AWS сhelloworld сообщение, как показано ниже -
Код AWS Lambda присутствует в index.jsфайл. Функция, называемая обработчиком, имеет параметры, а именноevents, context и callback.
Функция обратного вызова в основном содержит сообщение об ошибке и сообщение об успехе. Обратите внимание, что здесь у нас нет кода, связанного с ошибкой, поэтому передается null и отображается сообщение об успешном завершении.HelloWorld from lambda.
Наконец, сохраните добавленные изменения и давайте приступим к добавлению функции Lambda в шлюз API.
Создать API-шлюз
Войдите в свою учетную запись AWS и откройте API Gateway, как показано ниже -
Нажмите API Gateway, и вы попадете на экран, где можно создать новый API-шлюз.
Нажмите Create API и добавьте детали, как показано ниже -
Щелкните значок Create APIкнопку в правой части экрана. Это отобразит недавно созданный API в левой части экрана.
Щелкните значок Actions раскрывающийся список, чтобы создать новый ресурс для API.
Теперь создайте новый ресурс, как показано ниже -
Введите Resource Nameкак показано ниже. Вы увидите имя ресурса, введенное в URL-адрес, созданный в конце. НажмитеCreate Resource и вы увидите это на экране следующим образом -
Добавить GET/POSTметоды к ресурсу, созданному, как показано ниже. Выберите метод изActions падать.
Щелкните значок GET метод для добавления метода в API.
Следующим шагом является интеграция, которая объединит его с функцией Lambda. Теперь добавьте к нему функцию Lambda, как показано ниже -
Связывание лямбда-функции со шлюзом API
Выберите лямбда-функцию, созданную ранее.
Сохраните изменения, и вы увидите диалоговое окно с запросом разрешения, как показано ниже -
Нажмите OKдля разрешения. Это детали выполнения между HTTP-запросом шлюза API и функцией Lambda -
Теперь давайте развернем изменения шлюза API. Для этого нам нужно выбратьDeploy API из Actions раскрывающийся список, как показано ниже -
Выбрать Deploy API. Он запросит состояние развертывания. ВыбратьNew Stage из раскрывающегося списка этапа развертывания и добавьте название этапа как Production.
Нажмите Deploy кнопку, и он перенаправит вас на URL-адрес, как показано ниже -
Выберите GETметод слева, чтобы получить URL-адрес. Откройте URL-адрес в новой вкладке, чтобы увидеть сообщение от функции Lambda.
Это базовый пример работы с AWS Lambda и AWS API Gateway. В приведенном выше примере мы жестко запрограммировали сообщение в лямбда-функции.
Теперь давайте возьмем детали сообщения из API Gateway. В случае, если вызов HTTPS должен быть вызван из другого домена, например, вызов AJAX для API, нам необходимо включить CORS для созданного шлюза API.
Выберите ресурс, созданный для API, и нажмите Actions раскрывающийся список -
В настоящее время, Enable CORS откроется следующий экран -
Вы можете использовать несколько методов для ВКЛЮЧЕНИЯ CORS. Access-Control-Allow-Origin отмечен знаком *, что означает, что он позволит получать содержимое из шлюза API из любого домена.
Вы также можете указать доменное имя, с которым хотите работать с API. НажмитеEnable CORS and replace existing CORS headers кнопку и отобразит подтверждающее сообщение, как показано ниже -
Нажмите Yes, replace existing valuesкнопку, чтобы включить его. ВEnable CORS экран выглядит как показано ниже -
Передача данных в API-шлюз
Откройте API, созданный в API Gateway displayhelloworld как показано ниже -
Нажмите Integration Request для отправки данных, как показано ниже -
выберите Body Mapping Templates и добавить Content-Type для этого примера как application/json. Нажмите на добавленный тип контента, добавьте детали следующим образом -
Теперь добавьте шаблон в формате JSON, как показано ниже -
Обратите внимание, что мы использовали сообщение в качестве параметра для получения данных из API Gateway и передачи их AWS Lambda. Синтаксис для получения подробностей показан выше.
Теперь разверните API, чтобы изменения были доступны в URL-адресе шлюза API. Для этого нам нужно изменить функцию Lambda, чтобы отображать данные на основе URL-адреса шлюза API. Код лямбда-функции приведен ниже. Обратите внимание, что мы берем сообщение от события и переходим к обратному вызову.
exports.handler = (event, context, callback) => {
let message = event.message;
callback(null, message);
};
Теперь сохраните изменения в Lambda и нажмите URL-адрес, чтобы увидеть изменения. Обратите внимание на снимок экрана, приведенный ниже -
Щелкните URL-адрес, как показано ниже -
https://rw2ek1xung.execute-api.us-east-
1.amazonaws.com/prod/hello?message=hello%20from%20api%20gateway
Обратите внимание, что здесь мы передаем сообщение в виде строки запроса на URL-адрес GET. Затем вы можете наблюдать результат, как показано ниже -
Он считывает сведения, отправленные в сообщение с URL-адреса, и отображает их в браузере.
Использование лямбда-функции в Amazon S3
Сервис Amazon S3 используется для хранения файлов, куда вы можете загружать или удалять файлы. Мы можем активировать AWS Lambda на S3 при загрузке любых файлов в сегменты S3. AWS Lambda имеет функцию-обработчик, которая действует как отправная точка для функции AWS Lambda. В обработчике есть детали событий. В этой главе давайте посмотрим, как использовать AWS S3 для запуска функции AWS Lambda, когда мы загружаем файлы в корзину S3.
Шаги по использованию функции AWS Lambda с Amazon S3
Чтобы начать использовать AWS Lambda с Amazon S3, нам понадобится следующее:
- Создать корзину S3
- Создайте роль, у которой есть разрешение на работу с s3 и лямбда
- Создайте лямбда-функцию и добавьте s3 в качестве триггера.
пример
Давайте посмотрим эти шаги на примере, который показывает базовое взаимодействие между Amazon S3 и AWS Lambda.
Пользователь загрузит файл в корзину Amazon S3
После загрузки файла в фоновом режиме запускается функция AWS Lambda, которая отображает вывод в виде консольного сообщения о том, что файл загружен.
Пользователь сможет увидеть сообщение в журналах Cloudwatch после загрузки файла.
Блок-схема, которая объясняет поток примера, показана здесь -
Создание сегмента S3
Давайте начнем сначала с создания корзины s3 в консоли AWS, используя шаги, указанные ниже:
Шаг 1
Зайдите в сервисы Amazon и нажмите S3 в разделе хранилища, как показано на изображении ниже -
Шаг 2
Щелкните Хранилище S3 и Create bucket в котором будут храниться загруженные файлы.
Шаг 3
Как только вы нажмете Create bucket кнопку, вы можете увидеть следующий экран -
Шаг 4
Введите детали Bucket name, Select the Region и нажмите Createкнопка внизу слева. Таким образом, мы создали ведро с именем:workingwithlambdaands3.
Шаг 5
Теперь щелкните имя корзины, и она попросит вас загрузить файлы, как показано ниже -
Таким образом, мы закончили создание корзины в S3.
Создайте роль, которая работает с S3 и Lambda
Чтобы создать роль, которая работает с S3 и Lambda, выполните шаги, указанные ниже -
Шаг 1
Перейдите в сервисы AWS и выберите IAM, как показано ниже -
Шаг 2
Теперь нажмите IAM -> Roles как показано ниже -
Шаг 3
Теперь нажмите Create roleи выберите службы, которые будут использовать эту роль. Выберите Lambda и нажмитеPermission кнопка.
Шаг 4
Добавьте разрешение снизу и нажмите Review.
Шаг 5
Обратите внимание, что мы выбрали следующие разрешения -
Обратите внимание, что выбранные нами политики AmazonS3FullAccess, AWSLambdaFullAccess и CloudWatchFullAccess.
Шаг 6
Теперь введите имя роли, описание роли и нажмите Create Role кнопку внизу.
Таким образом, наша роль под названием lambdawiths3service создано.
Создать лямбда-функцию и добавить триггер S3
В этом разделе давайте посмотрим, как создать лямбда-функцию и добавить к ней триггер S3. Для этого вам нужно будет выполнить шаги, указанные ниже -
Шаг 1
Перейдите в сервисы AWS и выберите Lambda, как показано ниже -
Шаг 2
Нажмите Lambda и следуйте процессу добавления Name. ВыбратьRuntime, Roleи т.д. и создайте функцию. Созданная нами лямбда-функция показана на скриншоте ниже -
Шаг 3
Теперь добавим триггер S3.
Шаг 4
Выберите триггер сверху и добавьте детали, как показано ниже -
Шаг 5
Выберите сегмент, созданный в раскрывающемся списке сегментов. Тип события имеет следующие детали -
Выбрать Object Created (All), поскольку нам нужен триггер AWS Lambda при загрузке, удалении файла и т. д.
Шаг 6
Вы можете добавить префикс и шаблон файла, которые используются для фильтрации добавленных файлов. Например, чтобы активировать лямбда только для изображений .jpg. Пока оставим это поле пустым, так как нам нужно активировать Lambda для всех загруженных файлов. НажмитеAdd кнопку, чтобы добавить триггер.
Шаг 7
Вы можете найти экран триггера для функции лямбда, как показано ниже -
Добавим подробности лямбда-функции 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
Нажмите Upload кнопку, чтобы добавить файлы, как показано -
Шаг 13
Нажмите Add filesдобавить файлы. Вы также можете перетащить файлы. Теперь нажмитеUpload кнопка.
Таким образом, мы загрузили одно изображение в нашу корзину S3.
Шаг 14.
Чтобы просмотреть сведения о триггере, перейдите в сервис AWS и выберите CloudWatch. Откройте журналы для функции Lambda и используйте следующий код -
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
Результат, который вы можете наблюдать в Cloudwatch, выглядит следующим образом:
Функция AWS Lambda запускается, когда файл загружается в корзину S3, и сведения регистрируются в Cloudwatch, как показано ниже -
Использование лямбда-функции с Amazon DynamoDB
DynamoDB может запускать AWS Lambda, когда данные добавляются в таблицы, обновляются или удаляются. В этой главе мы будем работать над простым примером, который добавит элементы в таблицу DynamoDB и AWS Lambda, которые будут читать данные и отправлять почту с добавленными данными.
Реквизиты
Чтобы использовать Amazon DB и AWS Lambda, нам нужно выполнить шаги, как показано ниже -
Создайте таблицу в DynamoDB с первичным ключом
Создайте роль, которая будет иметь разрешение на работу с DynamoDBand AWS Lambda.
Создать функцию в AWS Lambda
AWS Lambda Trigger для отправки почты
Добавить данные в DynamoDB
Давайте подробно обсудим каждый из этих шагов.
пример
Мы собираемся поработать на следующем примере, который показывает базовое взаимодействие между DynamoDB и AWS Lambda. Этот пример поможет вам понять следующие операции -
Создание таблицы под названием customer в таблице Dynamodb и способ ввода данных в эту таблицу.
Запуск функции AWS Lambda после ввода данных и отправка почты с помощью сервиса Amazon SES.
Базовая блок-схема, объясняющая поток примера, показана ниже -
Создать таблицу в DynamoDB с первичным ключом
Войдите в консоль AWS. Перейдите в AWS Services и выберите DynamoDB, как показано ниже. Выберите DynamoDB.
DynamoDB показывает параметры, как показано ниже -
Теперь нажмите Create tableчтобы создать таблицу, как показано. Мы назвали эту таблицуcustomer с первичным ключом для этой таблицы как cust_id. Нажмите наCreate кнопку, чтобы добавить таблицу в Dynamodb.
Созданная таблица выглядит так, как показано ниже -
Мы можем добавлять элементы в таблицу, созданную следующим образом:
Нажмите Items и нажмите Create item кнопка, как показано -
Создание роли с разрешениями для работы с DynamoDB и AWS Lambda
Чтобы создать роль, перейдите в сервисы AWS и щелкните IAM.
Давайте создадим политику, которая будет использоваться только для таблицы DynamoDB, созданной ранее -
Теперь выберите Service. Обратите внимание, что выбранная нами услугаDynamoDB. ЗаActions мы взяли все Dynamodbдействия, т.е. доступ к списку, чтение и запись. Заresources, мы выберем действия типа ресурса таблицы. Когда вы щелкнете по нему, вы увидите следующий экран -
Теперь выберите table и Add ARNк нему, как показано. Мы получимARN детали из customer table создан, как показано ниже -
Войти arn подробности здесь -
Нажмите Addкнопку, чтобы сохранить изменения. Когда-то сделалиClick on Review policy. Введите название политики, описание и т. Д., Как показано ниже -
Нажмите на create policyчтобы спасти его. Добавьте политику к создаваемой роли. ВыбратьRole с левой стороны и введите детали.
Обратите внимание, что добавленные политики newpolicyfordynamdb, awslambdafullaccess, cloudwatchfullaccess и amazonsesfullaccess. Добавьте роль и будем использовать ее при создании функции AWS Lambda.
Создать функцию в AWS Lambda
Таким образом, мы создали лямбда-функцию с именем newlambdafordynamodb как показано.
Теперь давайте добавим триггер DynamodDB к созданной AWS Lambda. Мы будем использовать среду выполнения - Node.js.
В триггере Dynamodb вы можете найти следующие сведения, которые необходимо настроить для AWS Lambda:
Теперь просто нажмите Add чтобы добавить триггер в AWS Lambda.
AWS Lambda Trigger для отправки почты
AWS Lambda срабатывает, когда данные вставляются вAWS Lambda. В параметр события будут вставлены данные Dynamodb. Это прочитает данные о мероприятии и отправит электронное письмо.
Отправка электронного письма
Чтобы отправить электронное письмо, вам необходимо выполнить следующие действия:
Шаг 1
Перейдите в сервис AWS и выберите SES (простой почтовый сервис). Подтвердите адрес электронной почты, на который нам нужно отправить электронное письмо, как показано -
Шаг 2
Нажмите кнопку Verify a New Email Address чтобы добавить адрес электронной почты.
Шаг 3
Введите адрес электронной почты, чтобы подтвердить его. На адрес электронной почты будет отправлено письмо с активацией от Amazon, которое необходимо щелкнуть. После завершения активации идентификатор электронной почты проверяется и может использоваться с сервисами AWS.
Шаг 4
Код AWS Lambda, который считывает данные из события и отправляет электронную почту, приведен ниже:
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log(event);
let tabledetails = JSON.parse(JSON.stringify(event.Records[0].dynamodb));
console.log(tabledetails.NewImage.address.S);
let customerid = tabledetails.NewImage.cust_id.S;
let name = tabledetails.NewImage.name.S;
let address = tabledetails.NewImage.address.S;
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "The data added is as follows:\n CustomerId:"+customerid+"\n Name:"+name+"\nAddress:"+address
}
},
Subject: {
Data: "Data Inserted in Dynamodb table customer"
}
},
Source: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
}
Теперь сохраните функцию Lambda и данные в таблице DynamoDB.
Добавить данные в DynamoDB
Используйте следующую последовательность для добавления данных в DynamoDB.
Шаг 1
Иди к столу customer создан в Dynamodb.
Шаг 2
Нажмите Create item.
Шаг 3
Нажмите Save и проверьте идентификатор электронной почты, указанный в AWS Lambda, чтобы узнать, было ли письмо отправлено AWS Lambda.
Использование лямбда-функции с запланированными событиями
Предполагается, что запланированные события происходят через регулярные промежутки времени в соответствии с набором правил. Запланированные события используются для выполнения лямбда-функции после интервала, определенного в службах облачного наблюдения. Их лучше всего использовать для работы с заданиями 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 Сервис, как показано -
Нажмите Email Addresses с левой стороны, как показано -
На нем отображается кнопка Verify a New Email Address. Щелкните по нему.
Войти Email Addressвы хотите проверить. НажмитеVerify This Email Addressкнопка. Вы получите письмо от AWS на этот идентификатор электронной почты с темой электронной почты: Amazon Web Services - запрос проверки адреса электронной почты в регионе Восток США (Северная Вирджиния)
Щелкните ссылку в письме, чтобы подтвердить адрес электронной почты. После проверки он отобразит идентификатор электронной почты следующим образом:
Создайте роль для использования AWS SES, Cloudwatch и AWS Lambda
Вы также можете создать роль, которая дает разрешение на использование служб. Для этого перейдите в IAM и выберите Роль. Добавьте необходимые политики и создайте роль. Обратите внимание, что здесь создана рольevents with lambda.
Создайте лямбда-функцию для отправки электронной почты
Вам нужно будет выполнить шаги, чтобы создать функцию Lambda, используя среду выполнения как nodejs.
Теперь добавьте триггер в Lambda, как показано -
Добавить детали в CloudWatch Events Trigger как показано ниже -
Обратите внимание, что событие будет запускаться каждые 5 минут в соответствии с созданным триггером правила.
Лямбда-код для отправки электронного письма приведен ниже -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Теперь нам нужен сервис AWS SES. Вы можете добавить это, используя код, показанный ниже -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
Для отправки почты от nodejs, мы создали eParams объект, который имеет такие детали, как example mail, to mail id и the body with message следующим образом -
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
Лямбда-код для отправки электронной почты выглядит следующим образом:
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
Теперь давайте сохраним эту функцию Lambda и проверим идентификатор электронной почты на наличие писем. На приведенном ниже снимке экрана показано, что письмо отправляется из AWS Lambda каждые 5 минут.
Использование лямбда-функции в Amazon SNS
Amazon SNS - это сервис, используемый для push-уведомлений. В этой главе мы объясним работу AWS Lambda и Amazon SNS с помощью примера, где будем выполнять следующие действия:
Создайте тему в сервисе SNS и используйте AWS Lambda Добавить темы в CloudWatch
Отправить текстовое сообщение SNS на указанный номер телефона.
Реквизиты
Чтобы создать тему в сервисе SNS и использовать AWS Lambda для добавления тем в CloudWatch, нам не нужно выполнять шаги, указанные ниже:
- Создать тему в соцсети
- Создать роль для разрешения в IAM
- Создать функцию AWS Lambda
- Опубликуйте в теме, чтобы активировать триггер
- Проверьте детали сообщения в сервисе CloudWatch.
Чтобы отправить текстовое сообщение SNS на указанный номер телефона, нам необходимо сделать следующее:
- Добавьте код в AWS Lambda для отправки сообщения на свой телефон.
пример
В этом примере мы создадим тему в соцсети. Когда данные вводятся в тему для публикации, запускается AWS Lambda. Подробная информация о теме регистрируется в CloudWatch, а AWS Lambda отправляет сообщение на телефон.
Вот базовая блок-схема, которая объясняет то же самое -
Создать тему в соцсети
Вам нужно будет выполнить шаги, указанные ниже, чтобы создать тему в SNS -
Шаг 1
Войдите в консоль AWS и перейдите в сервис SNS в Amazon, как показано ниже -
Шаг 2
Нажмите Simple Notification Сервис и Create topic в этом.
Шаг 3
Затем вам нужно нажать Create new topic кнопка, как показано -
Шаг 4
Введите Topic name и Display name и нажмите на Create topic. Вы должны увидеть название темы на дисплее следующим образом -
Создать роль для разрешения в IAM
Чтобы создать роль для работы с AWS Lambda и сервисом SNS, нам необходимо войти в консоль AWS. Затем выберите IAM из сервисов Amazon и щелкните роль слева, как показано ниже.
Обратите внимание, что мы добавили политики для SNS, Lambda и CloudWatch. Добавьте имя роли и нажмите кнопку «Создать роль», чтобы завершить процесс создания роли.
Создать функцию AWS Lambda
В этом разделе давайте поймем, как создать функцию AWS Lambda с использованием nodejs в качестве среды выполнения.
Для этого войдите в консоль AWS и выберите AWS Lambda из сервисов AWS. Добавьте имя функции, сведения о роли и т. Д. И создайте функцию AWS Lambda, как показано.
Добавить триггер SNS
Чтобы добавить триггер SNS, введите данные конфигурации SNS, как показано -
Затем выберите SNS topic и Add триггер для функции AWS Lambda, как показано -
Затем добавьте лямбда-код AWS, указанный ниже -
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const sns = event.Records[0].Sns.Message;
console.log(sns)
callback(null, sns);
};
В приведенном выше коде event.Records[0].Sns.Messageдает добавленные детали сообщения. Мы добавили журналы консоли, чтобы видеть их в CloudWatch. Теперь сохраните лямбда-функцию с требуемой памятью и выделением времени.
Опубликовать в теме, чтобы активировать триггер
Напомним, что мы уже создали тему в SNS на шаге 1. Теперь мы опубликуем тему и посмотрим подробности в CloudWatch, которые будут инициированы AWS Lambda -
Опубликовать в теме
Сначала выберите название темы, которую хотите опубликовать. Нажмите наPublish to topic кнопка -
Введите Subject и Message детали, как показано ниже -
Вы также можете выбрать JSON формат сообщения для отправки JSONстиль. НажмитеPublish the message кнопку в конце экрана.
Проверьте сведения о сообщении в службе CloudWatch
Войдите в консоль AWS и откройте сервис CloudWatch. Щелкните журналы слева и выберите журналы, созданные для функции AWS Lambda. Вы можете найти следующий дисплей для журналов с сообщениями, созданными, как показано выше:
Добавьте код в AWS Lambda для отправки сообщения на свой телефон
Здесь будет использоваться текстовые сообщения SNS для отправки сообщения по телефону с помощью AWS Lambda. Вы можете использовать следующий код для обновления кода AWS Lambda следующим образом:
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.publish({
Message: snsmessage,
PhoneNumber: '+911212121212'
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, data);
}
});
Войдите в тему сейчас, чтобы увидеть сообщение в облачных часах и номер телефона, указанный выше.
Нажмите Publish messageопубликовать сообщение. Вы видите сообщение по номеру телефона следующего содержания:
Использование лямбда-функции с 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. Давайте создадим тему в соцсетях и опубликуем ее. Для этого действия журналы будут введены в виде файла в S3. Сработает AWS lambda, который отправит почту с помощью сервиса Amazon SES.
Блок-схема для объяснения этого процесса показана ниже -
Создайте корзину S3 для хранения журналов CloudTrail
Перейдите в консоль AWS и щелкните Сервис S3. НажмитеCreate bucket и введите имя сегмента, в котором вы хотите хранить журналы Cloudtrail, как показано -
Обратите внимание, что здесь мы создали корзину S3 cloudtraillogsaws для хранения журналов.
Создать сервис SNS
Перейдите в консоль AWS и нажмите Simple notification Service. Выберите темы слева и нажмите кнопку Создать новую тему.
Мы создали тему под названием displaytrailопубликовать тему. Его детали будут сохранены в созданном выше S3bucket.
Создайте трейл в Cloudtrail и назначьте ведро S3 и сервис SNS
Перейдите в консоль AWS и нажмите CloudTrail сервис из инструментов управления, как показано -
Нажмите Trails с левой стороны, как показано ниже -
Нажмите Create Trailкнопка. ВведитеTrail name, Apply trail to all regions и выберите Yes. Тогда логи будут применяться для всего региона.
За Read/Write events, выберите All. ДобавитьS3 bucket и SNS topicдетали, как показано ниже. Вы можете создать здесь новый или добавить уже существующий.
Обратите внимание, что есть параметры, доступные для encrypt log files, enable log file validation, send sns notification for every log file deliveryи т.д. Здесь я использовал значения по умолчанию. Вы можете разрешить шифрование файла, и он запросит ключ шифрования. После добавления деталей нажмите кнопку «Создать след».
Создать роль IAM с разрешением
Перейдите в консоль AWS и выберите IAM. Создайте роль с разрешением для S3, Lambda, CloudTrail и SES для отправки электронной почты. Созданная роль показана ниже -
Создать функцию AWS Lambda
Перейдите в сервис AWS и нажмите Lambdaслужба. Добавьте имя функции, выберите время выполнения какnodejsи выберите роль, созданную для лямбда-функции. Ниже приводится созданная лямбда-функция.
Конфигурация AWS Lambda
Затем нам нужно добавить S3 в качестве триггера для созданной лямбды AWS.
Добавьте детали корзины S3, чтобы добавить триггер, и добавьте следующий код AWS Lambda -
const aws = require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const s3message = "Bucket Name:"+event.Records[0].s3.bucket.name+"\nLog details:"+event.Records[0].s3.object.key;
console.log(s3message);
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data:s3message
}
},
Subject: {
Data: "cloudtrail logs"
}
},
Source: "[email protected]"
};
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Обратите внимание, что мы берем ведро S3 и данные журнала из события и отправляем почту с помощью службы SES, как показано выше.
Всякий раз, когда в консоли AWS происходит какое-либо действие, журналы отправляются в корзину S3, и в то же время срабатывает лямбда-функция AWS, и письмо будет отправлено на адрес электронной почты, указанный в коде.
Обратите внимание, что вы можете обрабатывать журналы в соответствии с вашими потребностями в AWS Lambda.
Использование лямбда-функции с Amazon Kinesis
AWS KinesisСервис используется для сбора / хранения данных отслеживания в реальном времени, поступающих от кликов на веб-сайтах, журналов, каналов социальных сетей. Мы можем активировать AWS Lambda для выполнения дополнительной обработки этих журналов.
Реквизиты
Основные требования для начала работы с Kinesis и AWS Lambda следующие:
- Создать роль с необходимыми разрешениями
- Создать поток данных в Kinesis
- Создайте функцию AWS Lambda.
- Добавить код в AWS Lambda
- Добавить данные в поток данных Kinesis
пример
Давайте поработаем над примером, в котором мы будем запускать AWS Lambda для обработки потока данных от Kinesis и отправки почты с полученными данными.
Простая блок-схема для объяснения процесса показана ниже -
Создать роль с необходимыми разрешениями
Перейдите в консоль AWS и создайте роль.
Создать поток данных в Kinesis
Зайдите в консоль AWS и создайте поток данных в kinesis.
Как показано, есть 4 варианта. В этом примере мы будем работать над созданием потока данных.
Нажмите Create data stream. Введите имя в поле имени потока Kinesis, указанное ниже.
Введите количество шардов для потока данных.
Детали осколков показаны ниже -
Введите имя и щелкните значок Create Kinesis stream кнопку внизу.
Обратите внимание, что для активации потока требуется определенное время.
Создать функцию AWS Lambda
Перейдите в консоль AWS и щелкните Lambda. Создайте функцию AWS Lambda, как показано -
Нажмите Create functionкнопку в конце экрана. Добавьте Kinesis в качестве триггера в AWS Lambda.
Добавьте детали конфигурации в триггер Kinesis -
Добавьте триггер, а теперь добавьте код в AWS Lambda.
Добавление кода в AWS Lambda
Для этого мы будем использовать nodejs в качестве среды выполнения. Мы отправим письмо, как только AWS Lambda будет запущена с потоком данных kinesis.
const aws = require("aws-sdk");
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
let payload = "";
event.Records.forEach(function(record) {
// Kinesis data is base64 encoded so decode here
payload = new Buffer(record.kinesis.data, 'base64').toString('ascii');
console.log('Decoded payload:', payload);
});
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data:payload
}
},
Subject: {
Data: "Kinesis data stream"
}
},
Source: "[email protected]"
};
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
Параметр события содержит данные, введенные в поток данных кинезиса. Вышеупомянутый лямбда-код aws активируется после ввода данных в поток данных kinesis.
Добавить данные в поток данных Kinesis
Здесь мы будем использовать AWS CLI для добавления потока данных кинезиса данных, как показано ниже. Для этого мы можем использовать следующую команду -
aws kinesis put-record --stream-name kinesisdemo --data "hello world" --
partition-key "789675"
Затем активируется AWS Lambda и отправляется письмо.
Использование лямбда-функции с пользовательскими приложениями
Мы можем использовать лямбда-функцию AWS для обработки событий, сгенерированных пользовательским приложением, следующими двумя способами:
- Использование Консоли AWS
- Использование AWS CLI
Использование Консоли AWS
Из консоли 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, вы можете сделать это с помощью тестового события в консоли AWS и AWS CLI. Пример события для службы SNS показан ниже -
{
"Records": [{
"EventVersion": "1.0",
"EventSubscriptionArn": "arnid",
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": "topicarn",
"Subject": "TestInvoke"
}
}]
}
Давайте добавим пример события, показанного выше, и протестируем его, как показано -
В AWS Lambda код распечатает сообщение SNS, как показано в примере, приведенном ниже:
exports.handler = (event, context, callback) => {
// TODO implement
console.log(event.Records[0].Sns.Message);
callback(null, event.Records[0].Sns.Message);};
Давайте вызовем то же самое с помощью AWS CLI. Давайте сохраним событие в файл и используем его для полезной нагрузки, используя показанную команду -
aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\sns.txt C:\clioutput\snsoutput.txt
Использование AWS Lambda @ Edge с CloudFront
Lambda @ Edge - это дополнение к сервису вычислений AWS Lambda, которое используется для настройки контента, предоставляемого Cloudfront.
Блок-схема, показывающая работу AWS Lambda с облачным интерфейсом от AWS, показана ниже -
AWS Lambda можно использовать четырьмя способами:
Viewer Request − Конечный пользователь отправляет в CloudFront запрос Viewer Request.
Origin Request − CloudFront перенаправляет запрос источнику
Origin Response − CloudFront получает ответ от источника
Viewer Response − CloudFront отправляет ответ зрителю
Мы можем использовать Lambda @ Edge для следующих целей -
Для изменения заголовков во время запроса и ответа.
Добавьте в заголовки сведения о файлах cookie. Проведите AB-тестирование на основе запроса и ответа.
Перенаправьте URL-адрес на другой сайт, основываясь на деталях заголовка.
Мы можем извлечь пользовательский агент из заголовков и узнать подробности браузера, ОС и т. Д.
Реквизиты
Чтобы начать работу с CloudFront и Lambda @ Edge, нам понадобится следующее:
Создание корзины хранилища S3 с подробными сведениями о файлах
Создайте роль, которая позволит разрешить работу с CloudFront и Lambda @ Edge
Создать распространение CloudFront
Создать лямбда-функцию
Добавить детали лямбда-функции в Cloudfront
Проверьте URL-адрес облачного интерфейса в браузере
Мы будем работать над примером с CloudFront и Lambda @ Egde, где мы разместим страницу и изменим ответ при обнаружении как настольных компьютеров и устройств.
Создание сегмента хранилища S3 с подробными сведениями о файле
Войдите в консоль AWS, создайте корзину в S3 и добавьте . html файл, который вы хотите отобразить.
Нажмите на S3 и Create bucket как показано ниже -
Теперь нажмите Create bucket и добавьте детали ведра, как показано ниже -
Нажмите на Create кнопку и загрузите в нее .html.
Создать роль
Перейдите в консоль AWS и нажмите IAM.
Теперь нажмите Roles -> Create role кнопка, как показано -
Выберите разрешение для S3, Lambda и Cloudfront. Рекомендуется создать политику, дающую разрешение только на требуемую функцию, хранилище, с использованием сведений ARN.
В примере, обсуждаемом ниже, мы показываем Full Accessразрешение. Политики для имени ролиrole for cloudfrontдобавляется, как показано выше. Щелкните Создать роль.
Вся политика, необходимая для lambda @ edge и cloudfront, показана выше. Здесь необходимо сделать дополнительный шаг, поскольку в случае облачного интерфейса URL-адрес будет доступен во всем регионе, и для этого требуются доверительные отношения между службами, которые мы используем.
Теперь для созданной роли нажмите на Trust relationships вкладка, как показано -
Нажмите на Edit Trust Relationship как показано ниже -
Он отображает документ политики. Нам нужно добавить другие службы вPrincipal -> Serviceкоторые мы планируем использовать. Окончательный документ политики доверительных отношений показан ниже -
Нажмите Update Trust Policy кнопку, чтобы сохранить изменения.
Создать CloudFront Distribution
Перейдите в службу CloudFront, как показано ниже -
Щелкните сервис CloudFront и щелкните Create Distribution -
Настройки Origin, Настройки поведения и Настройки распространения
Давайте рассмотрим эти настройки одну за другой -
Origin Settings
Различные параметры настроек Origin описаны ниже -
Origin Domain Name −Это имя корзины S3, в которой мы храним html-файлы. Мы также можем хранить изображения, если они есть, в корзине S3, создавая папки по нашему выбору.
Origin Path −Здесь нужно ввести название папки, в которой хранятся файлы. В настоящее время у нас нет этой папки, поэтому мы пока оставим ее пустой.
Origin ID −Он заполняется при выборе имени исходного домена. Вы можете изменить идентификатор по своему выбору.
Restrict Bucket Access − В этом мы выберем вариант yes. Здесь нам нужна безопасность для корзины S3, чтобы никто не имел доступа к корзине S3. Для этого варианта есть еще несколько вариантов, напримерOrigin Access Identity, Comment and Grant Read Permission on Bucket.
Origin Access Identity −Мы использовали опцию создания новой идентичности. Вы также можете выбрать существующую личность. Это создает новое удостоверение, которое используется CloudFront для чтения сведений из корзины S3.
Grand Read Permission on Bucket − Для этого выберите вариант Yes.
Origin Custom Headers − Мы будем оставлять заголовки пустыми, так как сейчас нам не нужны подробности.
Далее давайте обсудим и пополним Behaviour Settings для распространения Cloudront -
Теперь выберите протокол - https или http и опцию кеширования. Обратите внимание, что кэширование по умолчанию составляет 86400 или 24 часа. Вы можете изменить это значение в соответствии с требованиями.
Нажмите Object Caching(параметр настройки), чтобы изменить кеширование. Вы можете использоватьsmooth streamingна случай, если на вашей странице есть видео. Здесь мы оставляем вариант по умолчанию. После создания лямбда-функции будут добавлены ее подробности.
Подробные сведения о настройках распространения показаны ниже -
Ниже описаны различные параметры настройки распределения -
Price class −Он содержит такие детали, как происхождение пользовательского трафика. Обратите внимание, что здесь мы выбрали вариант по умолчанию -Use All Edge Locations.
AWS WAF Web ACL −Это для выбора брандмауэра веб-приложения. Здесь есть вариант какNone. Во-первых, нам нужно создать брандмауэр в AWS. Это обеспечивает безопасность сайта.
Alternate Domain Names − Здесь вы можете указать доменное имя, если оно у вас есть.
SSL Certificate −Здесь есть все детали, которые нужно выбрать для сертификата SSL. Мы оставим стандартные.
Default Root Object −Здесь мы укажем имя файла, которое мы загрузили в S3. Для этого нам нужно, чтобы содержимое из .html отображалось по умолчанию.
В остальном оставим настройку по умолчанию.
Нажмите Create Distribution кнопку, чтобы добавить раздачу.
Обратите внимание, что для отображения статуса развертывания дистрибутиву потребуется некоторое время.
Создать функцию AWS Lambda
Перейдите в консоль AWS и создайте функцию Lambda.
В коде AWS Lambda мы возьмем заголовки запроса и проверим user-agent. Если пользовательский агент находится с рабочего стола, мы изменим ответ, чтобы отображать сообщение как“DESKTOP : Welcome to AWS Lambda with Cloudfront!” и если устройство, сообщение будет“MOBILE DEVICES : Hello from Lambda@Edge!”
Соответствующий код AWS Lambda показан ниже -
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, чтобы ее можно было использовать со всеми регионами. Для публикации нам нужно сделать следующее -
В раскрывающемся списке Действия выберите Publish new version как показано ниже -
Если вы, щелкните Publish new version, он отображает следующий экран -
Теперь введите описание версии и нажмите Publish. ARN отобразит версию функции AWS Lambda, созданную, как показано ниже -
Добавьте триггер CloudFront в новую версию, созданную, как показано ниже -
Теперь добавьте сведения о конфигурации CloudFront. У события CloudFront есть опция дляViewer request, Origin request, Origin response, и Viewer response.
Затем выберите созданный ранее дистрибутив CloudFront. Изevents, мы выберем Viewer request. На основе запроса зрителя будет выбран рабочий стол / устройство от пользовательского агента, и ответ будет изменен. Затем добавьте детали триггера.
После добавления триггера нам нужно дождаться развертывания раздачи из CloudFront.
Как только статус изменится на Deployed, мы можем протестировать URL-адрес CloudFront и проверить доменное имя в браузере.
Отображение в браузере рабочего стола показано ниже. Здесь мы распечатали user-agent из события viewer-request.
Это дисплей мобильного устройства.
Таким образом, в приведенном выше примере мы использовали Lambda @ Edge для изменения ответа на настольном компьютере и мобильном устройстве.
Мониторинг и устранение неисправностей с помощью Cloudwatch
Функции, созданные в AWS Lambda, отслеживаются Amazon CloudWatch. Это помогает регистрировать все запросы к функции лямбда, когда она запускается.
Учтите, что следующий код загружен в AWS Lambda с именем функции как lambda and cloudwatch.
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
callback(null, 'Hello from Lambda');
};
Когда функция проверяется или запускается, вы должны увидеть запись в Cloudwatch. Для этого перейдите в сервисы AWS и нажмите CloudWatch.
Выберите журналы с левой стороны.
Когда вы нажимаете Logs, он имеет Log Groupsфункции AWS Lambda, созданной в вашем аккаунте. Выберите любую функцию AWS Lambda и проверьте подробности. Здесь мы имеем в виду лямбда-функцию с именем:lambdaandcloudwatch. Журналы, добавленные к функции лямбда, отображаются здесь, как показано ниже -
Теперь давайте добавим триггер S3 к функции Lambda и посмотрим подробности журналов в CloudWatch, как показано ниже -
Давайте обновим код AWS Lambda, чтобы отобразить загруженный файл и имя сегмента, как показано в приведенном ниже коде -
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
const bucket = event.Records[0].s3.bucket.name;
const filename = event.Records[0].s3.object.key;
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, 'Hello from Lambda');
};
Теперь добавьте файл в s3storetestlambdaEventbucket как показано -
Когда файл загружен, срабатывают функции AWS Lambda, и сообщения журнала консоли из кода Lambda отображаются в CloudWatch, как показано ниже:
Если есть какая-либо ошибка, CloudWatch предоставляет подробную информацию об ошибке, как показано ниже -
Обратите внимание, что мы неправильно указали имя сегмента в коде AWS Lambda, как показано:
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
Введенные данные будут храниться в таблице DynamodDB. Мы будем использовать шлюз API для обмена данными, введенными с AWS Lambda, а позже AWS Lambda добавит детали в DynamoDB.
Вы можете использовать следующие сведения для создания таблицы DynamodDB в консоли AWS. Сначала перейдите в AWS Service и нажмитеDynamoDB. НажмитеTable чтобы создать таблицу, как показано ниже -
ARN можно использовать для создания политики DynamoDB, которая будет использоваться с AWS Lambda.
Перейдите в IAM и выберите Policies. НажмитеCreate policy, выберите службу DynamodDB, как показано ниже -
Нажмите All DynamoDBдействия, как показано выше. Выберите ресурс и введите ARN для таблицы, как показано ниже -
Теперь нажмите Add как показано ниже.
Если вы нажмете Review policy кнопку в конце экрана, вы увидите следующее окно -
Введите название политики и нажмите Create policyкнопку в конце страницы. Теперь нам нужно создать роль, которая будет использоваться с Lambda. Нам нужны разрешения для DynamoDB, APIGateway и Lambda.
Перейдите в сервисы AWS и выберите IAM. Выберите Роли слева и добавьте необходимые роли.
Введите название роли и нажмите Create role. Созданная рольroleforlambdaexample.
Создать форму для регистрации пользователя
Вот отображение формы регистрации пользователя для входа и чтения данных из таблицы Dynamodb.
Создайте AWS Lambda и API Gateway для отправки OTP-сообщения на телефон с помощью службы SNS
Если вы видите форму регистрации пользователя, там есть кнопка validate phone. Пользователь должен ввести номер телефона и нажатьvalidate phone кнопку для подтверждения номера телефона.
Для этого -
Когда пользователь нажимает эту кнопку, вызывается метод отправки шлюза API, содержащий сведения о телефоне, и срабатывает внутренняя AWS Lambda.
Затем AWS Lambda отправляет OTP на номер телефона, введенный с помощью службы AWS SNS.
Пользователь получает OTP и должен ввести этот номер OTP.
Текстовое поле для ввода OTP появится, когда будет введен номер телефона и validate phone нажата кнопка.
OTP, полученный от AWS Lambda, и OTP, введенный пользователем, должны совпадать, чтобы пользователь мог отправить форму регистрации пользователя.
Простая блок-схема, объясняющая работу проверки телефона, показана здесь -
Созданная функция AWS Lambda выглядит так, как показано здесь -
Соответствующий код AWS Lambda приведен ниже -
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, созданный для указанной выше проверки телефона, выглядит следующим образом:
Дана лямбда-функция: phonevalidationexample. Здесь мы берем сведения о мобильном телефоне для использования в AWS Lambda. Затем AWS Lambda отправит код OTP на указанный номер мобильного телефона.
Создание AWS Lambda и API Gateway для данных формы POST и вставки в таблицу DynamoDB
Для формы регистрации пользователя все поля обязательны. Выполняется вызов AJAX, при котором данные, введенные в форму, отправляются на URL-адрес шлюза API.
Здесь показана простая блок-схема, которая объясняет работу кнопки отправки -
После заполнения формы кнопка отправки вызовет шлюз API, который запустит AWS Lambda. AWS Lambda получит сведения о форме из события или шлюза API, и данные будут вставлены в таблицу DynamodDB.
Давайте разберемся с созданием API Gateway и AWS Lambda.
Сначала перейдите в сервисы AWS и нажмите Lambda. Созданная лямбда-функция показана здесь -
Теперь, чтобы создать шлюз API, перейдите в сервис AWS и выберите API Gateway. Нажмите наCreate API кнопка, показанная ниже.
Введите API name и нажмите на Create API кнопку, чтобы добавить API.
Теперь создается API под названием registeruser. Выберите API и нажмитеActions раскрывающийся список для создания Resource.
Нажмите Create Resource. Теперь давайте добавимPOSTметод. Для этого нажмите на ресурсы, созданные слева и изActions выпадающий выбор create method. Это отобразит раскрывающийся список, как показано ниже -
Выберите метод POST и добавьте созданную выше лямбда-функцию.
Нажмите Saveкнопку, чтобы добавить метод. Чтобы отправить детали формы в функцию Lambdalambdaexample нам нужно добавить Integration Request как показано ниже -
Чтобы опубликовать детали формы, вам нужно будет нажать Integration Request. Ниже будут отображены подробности.
Нажмите Body Mapping Templates чтобы добавить поля формы для публикации.
Далее нажмите Add mapping templateи введите тип контента. Здесь мы добавилиapplication/jsonкак тип контента. Нажмите на нее, и здесь вам нужно ввести поле в формате json, как показано ниже -
Теперь нажмите на Save кнопку и разверните API, как показано ниже -
Вот API, созданный для POST, который будет использоваться внутри нашего .html файла. Обратите внимание, что нам нужно включить CORS для созданного ресурса. Будет использоваться URL-адрес шлюза api для выполнения вызова ajax, поэтому CORS должен быть включен.
Выберите методы, для которых вы хотите включить CORS. Нажмите наEnable CORS and replace existing CORS headers.
Он отображает экран подтверждения следующим образом -
Нажмите Yes, replace existing values чтобы включить CORS.
Код AWS Lambda для POST API Gateway показан здесь:
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 Lambda будет содержать все сведения, добавленные ранее в запрос интеграции 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 Gateway для чтения данных из таблицы DynamodDB
Теперь мы создадим функцию AWS Lambda для чтения данных из таблицы DynamoDB. Мы вызовем APIGateway для функции AWS Lambda, которая отправит данные в html-форму.
Созданная функция AWS Lambda выглядит так, как показано ниже -
Соответствующий код AWS Lambda выглядит следующим образом:
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.
Добавлена лямбда-функция lambdareaddataexample. НажмитеSave чтобы сохранить метод и развернуть api.
Окончательная доработка формы регистрации пользователя
Окончательное отображение формы показано ниже -
Теперь введите данные, как показано выше. Обратите внимание, что кнопка отправки отключена. Он будет включен, только когда все данные будут введены, как показано -
Теперь введите номер мобильного телефона и нажмите validate phoneкнопка. Он отобразит предупреждающее сообщение, в котором говорится“OTP is send to the mobile, please enter the OTP to continue”. OTP, отправленный на мобильный номер, выглядит следующим образом -
Введите одноразовый пароль и оставшиеся данные и отправьте форму.
Данные в DynamoDB registeruser таблица после отправки, как показано здесь -
Детали кода приведены ниже -
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);
}
});
}
Когда вы нажимаете кнопку подтверждения номера мобильного телефона, вызывается следующий код и отправляет номер мобильного телефона -
var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate";
var otpsend = "";
$("#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 the OTP to continue"); console.log(data); otpsend = data; }, error : function(err) { $("#otpdiv").css("display", "none");
alert("Invalid mobile no.");
}
});
});
// Validate otp
$("#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;
}
}