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

Serverless_Web_App_LP_assets-04

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

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

Время на выполнение модуля: 30 минут

Используемые сервисы: AWS Lambda, Amazon DynamoDB


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

  • Шаг 1. Создание таблицы Amazon DynamoDB

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

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


    1. Выберите в Консоли управления AWS «Services» (Сервисы) и затем DynamoDB в разделе «Databases» (Базы данных).

    2. Выберите «Create table» (Создать таблицу).

    3. Введите Rides в поле «Table name» (Имя таблицы). В этом поле учитывается регистр.

    4. Введите RideId в качестве «Partition key» (Ключ раздела) и выберите тип ключа «String» (Строка). В этом поле учитывается регистр.

    5. Установите флажок «Use default settings» (Использовать параметры по умолчанию) и выберите «Create» (Создать).

    6. Прокрутите до конца раздела «Overview» (Обзор) своей новой таблицы и запишите ARN. Это имя понадобится в следующем разделе.

  • Шаг 2. Создание роли IAM для функции Lambda

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

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

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


    1. Нажмите в Консоли управления AWS «Services» (Сервисы) и затем выберите «IAM» в разделе «Security, Identity & Compliance» (Безопасность и соответствие требованиям).

    2. Выберите на панели навигации слева «Roles» (Роли), а затем «Create New Role» (Создать новую роль).

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

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

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

    5. Выберите «Next Step» (Следующий шаг).

    6. Введите WildRydesLambda в поле «Role Name» (Имя роли).

    7. Выберите «Create Role» (Создать роль).

    8. Введите WildRydesLambda в поле фильтра на странице «Roles» (Роли) и выберите только что созданную вами роль.

    9. Чтобы создать новую встроенную политику, на вкладке «Permissions» (Разрешения) выберите ссылку «Add inline policy» (Добавить встроенную политику) в нижнем правом углу.

    10. Нажмите «Choose a service» (Выбрать сервис).

    11. Начните вводить DynamoDB в поле поиска «Find a service» (Найти сервис) и выберите DynamoDB при его появлении.

    12. Выберите «Select actions» (Выбрать действия).

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

    14. Выберите раздел «Resources» (Ресурсы).

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

    16. Вставьте ARN таблицы, созданной в предыдущем разделе, в поле «Specify ARN for table» (Указать ARN для таблицы) и выберите «Add» (Добавить).

    17. Выберите «Review Policy» (Проверить политику).

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

  • Шаг 3. Создание функции Lambda для обработки запросов

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

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

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


    1. Выберите «Services» (Сервисы) и затем «Lambda» в разделе «Compute» (Вычисления).

    2. Нажмите «Create function» (Создать функцию).

    3. Оставьте выбранную по умолчанию карточку «Author from scratch» (Создать с нуля).

    4. Введите имя RequestUnicorn в поле «Name» (Имя очереди).

    5. Выберите Node.js 6.10 в качестве параметра «Runtime» (Среда выполнения).

    6. Убедитесь, что в раскрывающемся списке «Role» (Роль) выбран пункт «Choose an existing role» (Выбрать существующую роль).

    7. Выберите WildRydesLambda в раскрывающемся списке «Existing Role» (Существующая роль).

    8. Нажмите «Create function» (Создать функцию).

    9. Пролистайте вниз до раздела «Function code» (Код функции) и замените существующий код в редакторе index.js содержимым файла requestUnicorn.js.

    10. Нажмите «Save» (Сохранить) в верхнем правом углу страницы.

  • Шаг 4. Тестирование внедрения

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


    1. На главном экране редактирования функции выберите «Configure test event» (Настроить тестовое событие) из раскрывающегося списка «Select a test event...» (Выбрать тестовое событие...).

    2. Оставьте выбранным «Create new test event» (Создать новое тестовое событие).

    3. Введите TestRequestEvent в поле «Event name» (Название события).

    4. Скопируйте и вставьте указанное ниже тестовое событие в редактор:

    {
        "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}}"
    }
    1. Нажмите кнопку «Create» (Создать).

    2. На главном экране редактирования функции нажмите «Test» (Тест) и выберите TestRequestEvent в раскрывающемся списке.

    3. Пролистайте страницу вверх и разверните пункт «Details» (Подробнее) раздела «Execution result» (Результат выполнения).

    4. Убедитесь, что действие выполнено, а результат функции выглядит приблизительно так:

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