Проекты на AWS

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

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

Модуль 3. Сохранение информации о вымышленных существах

В этом модуле вы настроите базу данных Amazon DynamoDB для сохранения информации о вымышленных существах в центральной таблице базы данных.

Обзор

Теперь, когда у вас есть развернутый сервис и работающий конвейер CI/CD для автоматической доставки изменений в этот сервис при каждом обновлении репозитория кода, вы можете быстро перемещать новые функции приложения из концепции и предоставлять посетителям веб-сайта Mythical Mysfits доступ к ним. Благодаря этой повышенной динамичности в архитектуру веб-сайта Mythical Mysfits можно добавить еще один базовый элемент функциональности – уровень данных.

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

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

Схема архитектуры сервисов Fargate и DynamoDB

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

20 минут

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

 Попробуйте сервис Github

Инструкции по внедрению

  • A. Создайте таблицу DynamoDB

    Чтобы добавить таблицу DynamoDB в архитектуру, мы включили еще один входной файл JSON CLI, который определяет таблицу с именем MysfitsTable. У этой таблицы будет первичный индекс, определенный атрибутом хэш-ключа под названием MysfitId, и еще два вторичных индекса. Первый вторичный индекс будет иметь хэш-ключ Species и ключ типа «диапазон» MysfitId, а второй вторичный индекс будет иметь хэш-ключ Alignment и ключ типа «диапазон» MysfitId.

    Эти два вторичных индекса позволят нам выполнить запросы к таблице, чтобы получить все вымышленные существа, которые соответствуют заданным ключам Species или Alignment, и включить функцию фильтра, которая, как вы, возможно, заметили, еще не работает на веб-сайте. Этот файл находится в следующем расположении: ~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json. Этот файл не требует изменений и готов к выполнению. Подробнее об индексах в базе DynamoDB и других основных понятиях см. на этой странице. 

    Чтобы создать таблицу с помощью интерфейса командной строки AWS, выполните следующую команду в терминале Cloud9:

    aws dynamodb create-table --cli-input-json file://~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json

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

    aws dynamodb describe-table --table-name MysfitsTable

    Если выполнить следующую команду для извлечения всех элементов, сохраненных в таблице, последняя отобразится пустой:

    aws dynamodb scan --table-name MysfitsTable
    {
        "Count": 0,
        "Items": [],
        "ScannedCount": 0,
        "ConsumedCapacity": null
    }
    B: Добавьте элементы в таблицу DynamoDB

    Также предоставляется файл JSON, который можно использовать для пакетной вставки нескольких элементов Mysfit в эту таблицу. Эта операция выполняется через интерфейс API BatchWriteItem базы данных DynamoDB.

    Чтобы открыть этот интерфейс API с помощью предоставленного файла JSON, выполните в терминале следующую команду (в ответе сервиса должно быть указано, что все элементы обработаны):

    aws dynamodb batch-write-item --request-items file://~/environment/aws-modern-application-workshop/module-3/aws-cli/populate-dynamodb.json

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

    aws dynamodb scan --table-name MysfitsTable
  • A. Скопируйте обновленный код сервиса Flask

    Данные добавлены в таблицу. Теперь следует изменить код приложения, чтобы считывать их в таблице, не вызывая статический файл JSON, который использовался в модуле 2. Мы добавили новый набор файлов Python для вашего микросервиса Flask, но сейчас вместо считывания статический файл JSON выполнит запрос в базу DynamoDB.

    Запрос формируется с помощью набора средств AWS SDK для Python под названием boto3. Набор SDK – это мощное и простое средство взаимодействия с сервисами AWS через код Python. Он позволяет использовать определения и функции клиентов сервиса, сочетающиеся с интерфейсами API и командами в интерфейсе командной строки AWS, которые вы уже выполняли в ходе этого семинара. Использование набора boto3 облегчает перевод этих команд в рабочий код Python.

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

    cp ~/environment/aws-modern-application-workshop/module-3/app/service/* ~/environment/MythicalMysfitsService-Repository/service/
    B. Скопируйте обновленный код сервиса Flask

    Теперь необходимо проверить эти изменения кода в репозитории CodeCommit с помощью клиента командной строки git.

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

    cd ~/environment/MythicalMysfitsService-Repository
    git add .
    git commit -m "Add new integration to DynamoDB."
    git push

    Всего через 5–10 минут, вы увидите изменения кода, выполненные через весь конвейер CI/CD сервиса CodePipeline в развернутом сервисе Flask для ядра AWS Fargate в Amazon ECS.

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

  • В завершение требуется опубликовать новую страницу index.html в корзине S3, чтобы включить новые функции интерфейса API, использующие строки запросов для фильтрации ответов. Новый файл index.html находится в следующем расположении: ~/environment/aws-modern-application-workshop/module-3/web/index.html.

    Откройте этот файл в сервисе Cloud9 IDE и замените строку с текстом REPLACE_ME, как и в модуле 2, соответствующим адресом NLB. Не забудьте добавить путь /mysfits.

    При необходимости просмотрите файл, уже отредактированный в каталоге модуля 2 (/module-2/). После замены заполнителя адресом NLB загрузите новый файл index.html, выполнив следующую команду (с заменой именем корзины, созданной в модуле 1):

    aws s3 cp --recursive ~/environment/aws-modern-application-workshop/module-3/web/ s3://your_bucket_name_here/

    Снова зайдите на веб-сайт Mythical Mysfits, чтобы увидеть, как новые вымышленные существа загружаются из таблицы DynamoDB, и узнать, как работают функции фильтрации!

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

Следующая тема – «Настройка регистрации пользователей»