Проекты на AWS

Разработка современного интернет‑приложения

Развертывание интернет‑приложения, подключение к базе данных и анализ поведения пользователей

Модуль 4: настройка регистрации пользователей

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

Обзор

Чтобы добавить более интересные возможности на веб-сайт Mythical Mysfits, например позволить пользователям выбирать любимых изгоев или брать их под опеку, нам необходимо реализовать регистрацию пользователей на веб-сайте. Для поддержки регистрации и аутентификации пользователей веб-сайта мы создадим пул пользователей в AWS Cognito, полностью управляемом сервисе управления удостоверениями пользователей.

Затем, чтобы только зарегистрированные пользователи могли выбирать любимых изгоев и брать их под опеку, мы развернем REST API в Amazon API Gateway, который будет размещен перед нашим NLB. Amazon API Gateway также является управляемым сервисом, которые предоставляет в базовой конфигурации типичный набор возможностей REST API, таких как поддержка подключения SSL, запрос авторизации, регулирование, этапы и версии API и многое, многое другое.

Здесь вы снова примените CLI AWS для развертывания нужных ресурсов в AWS.

Схема архитектуры

схема настройки архитектуры для регистрации пользователей

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

60 минут

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

 Попробуйте на GitHub

Инструкции по реализации

  • А. Создание пула пользователей Cognito

    Чтобы создать пул пользователей Cognito, в котором будут храниться все посетители сайта Mythical Mysfits, выполните следующие команды CLI, которые создают пул с именем MysfitsUserPool и указывают, что все зарегистрированные в этом пуле пользователи должны автоматически проходить проверку адреса электронной почты через отправку подтверждающего электронного сообщения, прежде чем считаться подтвержденными пользователями.

    aws cognito-idp create-user-pool --pool-name MysfitsUserPool --auto-verified-attributes email

    Скопируйте ответ приведенной выше команды с уникальным идентификатором пула пользователей, который вам потребуется на следующих шагах. Например: Id: us-east-1_ab12345YZ)

    Б. Создание клиента пула пользователей Cognito

    Теперь нам нужно создать клиент пула пользователей для интеграции нашего интерфейсного веб-сайта с Cognito через этот пул пользователей. В результате вы получите уникальный идентификатор клиента, который позволит выполнять авторизацию веб-сайта для вызова API Cognito, не требующих аутентификации, через которые пользователи смогут выполнять вход и регистрацию в пуле пользователей для сайта Mythical Mysfits. Чтобы создать новый клиент через AWS CLI для ранее созданного пула пользователей, выполните следующую команду, заменив заполнитель --user-pool-id скопированным ранее значением:

    aws cognito-idp create-user-pool-client --user-pool-id REPLACE_ME --client-name MysfitsUserPoolClient
  • Теперь мы переключимся на создание API RESTful, который будет располагаться перед уже существующим сервисом Flask для авторизации запросов перед тем, как запросы будут переданы в наш NLB. Мы будем это выполнять через Amazon API Gateway, как описано выше в обзоре модуля.

    Чтобы интегрировать частный API Gateway с нашим NLB, мы настроим подключение VPC в API Gateway, который позволит нашим API в API Gateway напрямую интегрироваться в веб-сервисы серверной части, размещенные частным образом в этом VPC. Примечание. Для целей нашего курса мы создали подключенный к Интернету NLB, чтобы его можно было напрямую вызывать из предыдущих модулей. Благодаря этому наш NLB предоставляется в открытый доступ через API в API Gateway, хотя мы и не требуем токены авторизации в API после этого модуля.

    В реальной системе следует сразу сделать NLB полностью внутренним (или создать новый внутренний балансировщик нагрузки вместо существующего), так как стратегия авторизации API для подключений из Интернета будет основана на API Gateway. Но здесь для экономии времени мы применим тот NLB, который ранее создали, и оставим его общедоступным.

    Создайте подключения VPC для предстоящих REST API с помощью следующих команд CLI, заменив в них предложенное значение реальным значением ARN для Load Balancer, которое вы сохранили при создании NLB в модуле 2:

    aws apigateway create-vpc-link --name MysfitsApiVpcLink --target-arns REPLACE_ME_NLB_ARN > ~/environment/api-gateway-link-output.json

    Приведенная выше команда создаст файл с именем api-gateway-link-output.json, в который сохранит идентификатор создаваемого подключения VPC. Также она отобразит состояние PENDING (Ожидание), как показано ниже.

    Завершение создания потребует от 5 до 10 минут, а после этого вы можете скопировать идентификатор из этого файла и переходить к следующему шагу.

    {
        "status": "PENDING",
        "targetArns": [
            "YOUR_ARN_HERE"
        ],
        "id": "abcdef1",
        "name": "MysfitsApiVpcLink"
    }

    После создания подключения VPC мы можем переходить к созданию реального API REST в Amazon API Gateway.

    Б. Создание API REST с помощью Swagger

    API REST MythicalMysfits мы определяем с помощью **Swagger**, которая является популярной платформой с открытым кодом для описания API в формате JSON. Определение Swagger для нашего API размещается в файле `~/environment/aws-modern-applicaiton-workshop/module-4/aws-cli/api-swagger.json`. Откройте этот файл, где вы сможете изучить сам API REST и все его ресурсы, методы и конфигурации.

    В этом JSON-файле есть несколько мест, которые нужно обновить значениями параметров для конкретного пула пользователей Cognito и конкретного Network Load Balancer.

    Объект `securityDefinitions` в определении API указывает, что мы настроили механизм авторизации apiKey с использованием заголовка Authorization. Вы также заметите, что AWS предоставила настраиваемые расширения для Swagger с помощью префикса `x-amazon-api-gateway-`. Именно в этих расширениях добавляется функциональность для конкретного API Gateway, чтобы в обычных Swagger-файлах можно было использовать возможности этого API Gateway.

    Сочетанием клавиш CTRL-F найдите в файле все вхождения строки `REPLACE_ME` и замените их ожидаемыми параметрами. Завершив редактирование файла, сохраните его и выполните следующие команды CLI AWS:  

    aws apigateway import-rest-api --parameters endpointConfigurationTypes=REGIONAL --body file://~/environment/aws-modern-application-workshop/module-4/aws-cli/api-swagger.json --fail-on-warnings

    Скопируйте ответ, полученный от этой команды, и сохраните значение идентификатора (`id`) для использования на следующем шаге:

    {
        "name": "MysfitsApi",
        "endpointConfiguration": {
            "types": [
                "REGIONAL"
            ]
        },
        "id": "abcde12345",
        "createdDate": 1529613528
    }
    В. Развертывание API

    Теперь наш API готов, но его еще нужно где-то развернуть. Чтобы развернуть готовый API, необходимо создать развертывание и указать, для какой сцены (**stage**) предназначено это развертывание. Сценой здесь называется именованная ссылка на развертывание, содержащее моментальный снимок API.

    Значение Stage позволяет администрировать и оптимизировать конкретное развертывание. Например, вы можете настроить параметры сцены для поддержки кэширования, регулирования запросов, ведения журналов, использования переменных и (или) добавления канареечных выпусков для целей тестирования. В нашем примере мы присвоим сцене имя `prod`. Чтобы создать развертывание для сцены prod, выполните следующую команду CLI :

    aws apigateway create-deployment --rest-api-id REPLACE_ME_WITH_API_ID --stage-name prod

    Эта команда развертывает наш API REST, который поддерживает авторизацию пользователей, и он становится доступным из Интернета... Но где?! Расположение вашего API выглядит так:

    https://REPLACE_ME_WITH_API_ID.execute-api.REPLACE_ME_WITH_REGION.amazonaws.com/prod

    Скопируйте приведенное выше значение URI, замените в нем соответствующие параметры, и добавьте в конце путь `/mysfits`. Введя полученный результат в адресную строку браузера, вы снова увидите страницу с ответом JSON сайта Mysfits. Но мы уже добавили несколько возможностей, которые пока не поддерживает наш сервис внутренней части Flask, например опека и отметка любимых изгоев.

    Теперь мы устраним это расхождение.

    Пока наши сервисы проходят автоматический конвейер CI/CD, можно переходить к следующему шагу.

  • А. Обновление внутренней части сервиса Flask

    Чтобы реализовать поддержку новой функции просмотра профилей изгоев, отметки любимых и взятия под опеку, мы предоставляем обновленный код Python для веб-сервиса Flask внутренней части.

    Обновите существующую базу кода, заменив ее этими файлами, и передайте их в репозиторий:

    cd ~/environment/MythicalMysfitsService-Repository/
    cp -r ~/environment/aws-modern-application-workshop/module-4/app/* .
    git add .
    git commit -m "Update service code backend to enable additional website features."
    git push

    Пока наши сервисы проходят автоматический конвейер CI/CD, можно переходить к следующему шагу.

    Б. Обновление веб-сайта Mythical Mysfits в S3

    Откройте новую версию файла index.html для сайта Mythical Mysfits, который мы скоро передадим в сервис Amazon S3. Его можно найти по адресу ~/environment/aws-modern-application-workshop/module-4/app/web/index.html. В этом файле index.html вы увидите новый код HTML и JavaScript, который отвечает за процессы регистрации и входа пользователей.

    Этот код взаимодействует с пакетом SDK JavaScript для AWS Cognito, который помогает управлять регистрацией, аутентификацией и авторизацией для всех вызовов API, где требуются эти возможности.

    Замените все вхождения REPLACE_ME в этом файле, заключенные в одиночные кавычки, значениями выходных данных из описанных выше команд, и сохраните файл:

    before-replace2

    Также у вас есть два новых HTML-файла для процесса регистрации (register.html и confirm.html), в которые также нужно вставить эти значения. Вставьте скопированные значения вместо строк REPLACE_ME в этих файлах.

    Теперь скопируйте все эти HTML-файлы вместе с пакетом SDK JavaScript для Cognito в корзину S3, где размещается содержимое сайте Mythical Mysfits, чтобы опубликовать версию с поддержкой новых возможностей.

    aws s3 cp --recursive ~/environment/aws-modern-application-workshop/module-4/web/ s3://YOUR-S3-BUCKET/

    Обновите веб-сайт Mythical Mysfits в браузере и проверьте, как работают наши новые функции!

    На этом мы завершаем модуль 4.

Теперь мы будем запоминать поведение пользователя