Модуль 3. Серверная часть бессерверного сервиса

Вы будете использовать AWS Lambda и Amazon DynamoDB для создания серверного процесса для обработки запросов в интернет-приложении

Обзор

В этом модуле вы будете использовать AWS Lambda и Amazon DynamoDB для создания серверного процесса для обработки запросов в интернет-приложении. Браузерное приложение, которое вы развернули в первом модуле, дает пользователям возможность запрашивать отправку единорога в любое место по их выбору. Чтобы выполнить эти запросы, код JavaScript, работающий в браузере, должен вызвать облачный сервис.

Обзор архитектуры

Обзор архитектуры

Вы внедрите функцию Lambda, которая будет вызываться каждый раз, когда пользователь запрашивает единорога. Функция выберет единорога из группы, запишет запрос в таблицу DynamoDB, а затем направит в интерфейс приложения сведения об отправляемом единороге.

Функция вызывается из браузера благодаря использованию Amazon API Gateway. Эту связь вы внедрите в следующем модуле. А в этом модуле протестируете функцию в изолированной среде.

 Время выполнения

30 минут

 Используемые сервисы

Реализация

  • Используйте консоль Amazon DynamoDB, чтобы создать новую таблицу DynamoDB. Назовите таблицу Rides, затем создайте для нее ключ секции с именем RideId и типом «Строка». Для имени таблицы и ключа секции учитывается регистр. Необходимо точно ввести предоставленные идентификаторы. Используйте значения по умолчанию для всех остальных настроек.

    После того как вы создали таблицу, сохраните имя ARN, оно пригодится в следующем шаге.

    а) В Консоли управления AWS в разделе баз данных выберите Сервисы, а затем – DynamoDB.
    б) Выберите Создать таблицу.
    в) Введите Rides в поле Имя таблицы. В этом поле учитывается регистр.
    г) Введите RideId в поле Ключ секции и выберите для него тип Строка. В этом поле учитывается регистр.
    д) Установите флажок Использовать настройки по умолчанию и выберите Создать.
    е) Прокрутите до конца раздела обзора своей новой таблицы и сохраните себе имя ARN. Оно пригодится при выполнении задания из следующего раздела.

  • С каждой функцией Lambda связанна роль IAM. Она определяет, с какими другими сервисами AWS будет взаимодействовать функция. В рамках этого семинара вам потребуется создать роль IAM, которая предоставит функции Lambda разрешение на запись журналов в Amazon CloudWatch Logs и доступ к таблице DynamoDB для записи данных в ней.

    Используйте консоль IAM, чтобы создать новую роль. Назовите ее WildRydesLambda и выберите AWS Lambda в качестве ее типа. Вам нужно будет подключить политики, которые предоставят функции разрешений на запись в Amazon CloudWatch Logs и добавление данных в таблицу DynamoDB.

    Подключите управляемую политику с именем AWSLambdaBasicExecutionRole к этой роли, чтобы предоставить необходимые разрешения CloudWatch Logs. Кроме того, создайте специальную встроенную политику для своей роли, которая разрешит действие ddb:PutItem для таблицы, созданной в предыдущем разделе.

    а) В Консоли управления AWS нажмите Сервисы, а затем выберите IAM в разделе безопасности, идентификации и соответствия требованиям.

    б) Найдите Роли на панели навигации слева и выберите Создать новую роль.

    в) В качестве типа роли выберите Lambda из группы Сервис AWS, а затем нажмите Далее: разрешения.

    Примечание. При выборе типа роли для нее автоматически создается политика доверия, благодаря которой сервисы AWS используют эту роль, чтобы действовать от вашего имени. Если бы вы создавали эту роль посредством интерфейса командной строки CLI, AWS CloudFormation или другого механизма, потребовалось бы указать политику доверия непосредственно.

    г) Начните вводить AWSLambdaBasicExecutionRole в текстовом поле Фильтр и установите флажок рядом с этой ролью.

    д) Выберите Следующий шаг.

    е) Введите WildRydesLambda в поле Имя роли.

    ж) Выберите Создать роль.

    з) Введите WildRydesLambda в поле фильтра на странице ролей и выберите только что созданную вами.

    и) Чтобы создать новую встроенную политику, на вкладке разрешений нажмите ссылку Добавить встроенную политику в нижнем правом углу.

    к) Нажмите Выбрать сервис.

    л) Начните вводить DynamoDB в поле поиска Найти сервис и выберите DynamoDB при его появлении.

    м) Выберите Выбрать действия.

    н) Начните вводить PutItem в поле поиска Фильтровать действия и установите флажок рядом с PutItem при его появлении.

    о) Выберите раздел Ресурсы.

    п) Выберите опцию Определенный, а затем выберите ссылку «Добавить ARN» в разделе Таблица.

    р) Вставьте ARN таблицы, созданной в предыдущем разделе, в поле Указать ARN для таблицы и выберите Добавить.

    с) Выберите Проверить политику.

    т) Введите DynamoDBWriteAccess в качестве названия политики и выберите Создать политику.

  • AWS Lambda запускает код в ответ на определенные события, например запроса HTTP. В этом шаге вы создадите основную функцию, которая будет обрабатывать запросы API на отправку единорога, полученные от веб-приложения. В следующем модуле вы будете использовать Amazon API Gateway для создания интерфейса RESTful API. Он предоставит HTTP-адрес, который можно вызывать из браузера пользователя. Затем вы подключитесь к функции Lambda, которую создадите в этом шаге для данного API, и получите полнофункциональный сервер для веб-приложения.

    Используйте консоль AWS Lambda для создания новой функции Lambda с именем RequestUnicorn, которая будет обрабатывать запросы API. Используйте код функции из предоставленного примера реализации requestUnicorn.js. Просто скопируйте и вставьте его из этого файла в редактор консоли AWS Lambda.

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

    а) Выберите Сервисы, а затем – Lambda в разделе вычислений.
    б) Щелкните Create function (Создать функцию).
    в) Оставьте выбранную по умолчанию карточку Создать с нуля.
    г) Введите имя RequestUnicorn в поле Имя.
    д) Выберите Node.js 6.10 в качестве параметра Среда выполнения.
    е) Убедитесь, что в раскрывающемся списке Роль выбран пункт Выбрать существующую роль.
    ж) Выберите WildRydesLambda в раскрывающемся списке Существующая роль.
    з) Нажмите Создать функцию.
    и) Пролистайте вниз до раздела Код функции и замените существующий код в редакторе index.js содержимым файла requestUnicorn.js.
    к) Нажмите Сохранить в верхнем правом углу страницы.

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

    а) На главном экране редактирования функции выберите Настроить тестовое событие из раскрывающегося списка Выбрать тестовое событие….
    б) Оставьте выбранной опцию Создать новое тестовое событие.
    в) Введите TestRequestEvent в поле Имя события.
    г) Скопируйте и вставьте указанное ниже тестовое событие в редактор.

    {
        "path": "/ride",
        "httpMethod": "POST",
        "headers": {
            "Accept": "*/*",
            "Authorization": "eyJraWQiOiJLTzRVMWZs",
            "content-type": "application/json; charset=UTF-8"
        },
        "queryStringParameters": null,
        "pathParameters": null,
        "requestContext": {
            "authorizer": {
                "claims": {
                    "cognito:username": "the_username"
                }
            }
        },
        "body": "{\"PickupLocation\":{\"Latitude\":47.6174755835663,\"Longitude\":-122.28837066650185}}"
    }

    д) Нажмите кнопку Create (Создать).
    е) На главном экране редактирования функции нажмите Тестировать, выбрав TestRequestEvent в раскрывающемся списке.
    ж) Пролистайте страницу вверх и разверните пункт Сведения раздела Результат выполнения.
    з) Убедитесь, что удалось выполнить операцию и результат тестирования функции выглядит следующим образом:

    {
        "statusCode": 201,
        "body": "{\"RideId\":\"SvLnijIAtg6inAFUBRT+Fg==\",\"Unicorn\":{\"Name\":\"Rocinante\",\"Color\":\"Yellow\",\"Gender\":\"Female\"},\"Eta\":\"30 seconds\"}",
        "headers": {
            "Access-Control-Allow-Origin": "*"
        }
    }

Был ли полезен этот модуль?

Развертывание интерфейса API RESTful