Введение
Приложению заказов нужна реляционная база, чтобы сохранять заказы клиентов. В этой работе вы создадите частную базу PostgreSQL через Amazon RDS, подключитесь стандартным SQL-клиентом и настроите приложение на новую конечную точку.
Вы должны знать подсети VPC, группы безопасности и подключения приложений из предыдущих курсов VPC и EC2. Сеть, приложение и настроенная AWS CLI предоставлены. Личный аккаунт AWS не нужен. В конце вы удалите базу.
Связь с сертификацией
Эта работа даёт вводную практику по следующим темам экзаменов.
- Cloud Practitioner (CLF-C02) · Задача 3.4: Определять Amazon RDS как управляемый сервис реляционных баз.
- Solutions Architect – Associate (SAA-C03) · Задача 3.3: Понимать движки баз и подключения приложений к ним.
Создать базу приложения
На этом шаге вы создадите частный экземпляр PostgreSQL в подготовленной сети баз данных.
Amazon RDS управляет экземплярами реляционных баз. PostgreSQL — движок, который хранит таблицы и выполняет SQL. AWS CLI управляет ресурсом RDS, а SQL-клиент подключается к движку для работы с данными. Создание экземпляра RDS и запрос таблицы — разные операции.
AWS Management Console удобна для изучения сервисов и просмотра ресурсов. CLI подходит для точных запросов, повторяемых операций и автоматизации, хотя её синтаксис требует практики. Курс использует подготовленные Terminal и AWS View. AWS View показывает ресурсы этой работы и результаты приложения; это отдельный от AWS Management Console интерфейс.
Перейдите в рабочую папку и загрузите предоставленные параметры подключения:
cd /home/labex/project
source database.env
DB_SECURITY_GROUP_ID обозначает подготовленные правила сетевого доступа к базе. PGSERVICEFILE и PGPASSFILE сообщают клиенту PostgreSQL расположение обычных файлов подключения и паролей. Сохраняйте файлы паролей закрытыми; выводить их содержимое не нужно.
Проверьте подготовленную группу подсетей DB:
aws rds \
describe-db-subnet-groups \
--db-subnet-group-name orders-subnets \
--query 'DBSubnetGroups[].{Name:DBSubnetGroupName,VPC:VpcId,Subnets:Subnets[].SubnetIdentifier}'
Группа подсетей DB определяет подсети VPC, доступные для размещения RDS. Эта группа содержит частные подсети баз в двух зонах доступности. Наличие двух подсетей само по себе не включает развёртывание Multi-AZ.
Создайте экземпляр:
aws rds \
create-db-instance \
--db-instance-identifier orders-db \
--db-instance-class db.t3.micro \
--engine postgres \
--engine-version 16.15 \
--allocated-storage 20 \
--master-username orders_admin \
--master-user-password "$(cat db-password.txt)" \
--db-name orders \
--db-subnet-group-name orders-subnets \
--vpc-security-group-ids "$DB_SECURITY_GROUP_ID" \
--no-publicly-accessible \
--backup-retention-period 0 \
--query 'DBInstance.{Identifier:DBInstanceIdentifier,Status:DBInstanceStatus,Engine:Engine}'
Идентификатор экземпляра orders-db называет ресурс RDS; имя базы orders называет базу PostgreSQL внутри него. db.t3.micro выбирает класс экземпляра, а 20 задаёт запрошенный объём хранения в GiB. Частный доступ оставляет подключения приложения внутри подготовленной сети. Хранение автоматических резервных копий отключено для этого короткого упражнения; отдельная работа научит создавать ручной снимок.
$(cat db-password.txt) передаёт подготовленный пароль без вывода на экран. Не вставляйте пароли в заметки или снимки экрана.
Дождитесь доступности и проверьте конечную точку подключения:
aws rds \
wait db-instance-available \
--db-instance-identifier orders-db
aws rds \
describe-db-instances \
--db-instance-identifier orders-db \
--query 'DBInstances[0].{Identifier:DBInstanceIdentifier,Database:DBName,Status:DBInstanceStatus,Endpoint:Endpoint}'
Ожидаются база orders, состояние available и порт PostgreSQL 5432. Конечная точка — адрес, по которому клиенты выбирают этот экземпляр. AWS View должна показать orders-db как основную базу. Таблица заказов ещё не создана.
Подключить SQL-клиент и приложение
На этом шаге вы проверите движок и направите приложение на его конечную точку.
psql — стандартный клиент командной строки PostgreSQL. Подготовленный сервис orders-db хранит параметры подключения созданного экземпляра. Имя сервиса — удобная запись конфигурации клиента, а не ресурс AWS.

Концептуальная схема: Приватное подключение PostgreSQL требует доступной конечной точки и разрешённого порта.
Выполните запрос к движку:
psql \
"service=orders-db" \
--command 'SELECT current_database(), current_user;'
Ожидаются база orders и пользователь orders_admin. Результат получен через подключение к базе, а не из метаданных ресурса RDS. RDS управляет хостом базы; приложения используют протокол базы данных, а не SSH-доступ к хосту.
Получите конечную точку из RDS. --query выбирает поле, --output text выдаёт простое значение, а конструкция оболочки $(...) сохраняет его в DB_ENDPOINT:
DB_ENDPOINT=$(aws rds \
describe-db-instances \
--db-instance-identifier orders-db \
--query 'DBInstances[0].Endpoint.Address' \
--output text)
Просмотрите предоставленную конфигурацию приложения:
cat app-config.json
read_host выбирает базу для запросов, а write_host — для изменений. Пока оба должны использовать основной экземпляр. password_file ссылается на закрытый файл вместо размещения пароля в JSON-документе.
Используйте редактор JSON jq, чтобы задать оба поля хоста. Запишите новый файл, а после успешного изменения замените конфигурацию:
jq \
--arg host "$DB_ENDPOINT" \
'.read_host = $host | .write_host = $host' \
app-config.json > app-config.new
mv app-config.new app-config.json
Проверьте соединение приложения:
curl \
--silent \
--show-error \
--fail \
http://127.0.0.1:8080/application/connection
Ожидаются database со значением orders, user со значением orders_admin и read_only со значением false. Основной экземпляр принимает запись, но эта работа только устанавливает соединение. Список заказов AWS View останется недоступным до создания таблицы в следующей работе.

Пример показывает приложение, подключённое к основной базе orders, и нативную конечную точку RDS. Таблица заказов ещё не создана. Ваши идентификаторы ресурсов могут отличаться.

Пример официальной Console: Endpoint и Port в Connectivity & security соответствуют Endpoint.Address и Endpoint.Port из CLI. Пример показывает MySQL и 3306; лаборатория использует PostgreSQL и 5432 с адресом из вашей команды. Не копируйте имя хоста и порт примера. Продолжайте в Terminal и AWS View без входа в AWS.
Source: AWS RDS guide.
Удалить экземпляр базы
На этом шаге вы удалите временную базу, сохранив подготовленные приложение и сеть.
Удалите экземпляр без сохранения финального снимка:
aws rds \
delete-db-instance \
--db-instance-identifier orders-db \
--skip-final-snapshot \
--query 'DBInstance.DBInstanceIdentifier'
--skip-final-snapshot удаляет учебную базу без сохранения копии для восстановления. Для важных данных заранее решите, как сохранить резервную копию перед удалением экземпляра.
Дождитесь удаления и проверьте список ресурсов:
aws rds \
wait db-instance-deleted \
--db-instance-identifier orders-db
aws rds \
describe-db-instances \
--query 'DBInstances[].DBInstanceIdentifier'
Ожидается []. AWS View не должна показывать базу. За старой конечной точкой приложения больше нет базы, поэтому после удаления ожидается ошибка подключения. Сохраните предоставленные группу подсетей, группы безопасности и файлы приложения.
Итоги
Вы создали частный экземпляр RDS PostgreSQL, отличили идентификатор ресурса от имени базы и проверили конечную точку. Вы выполнили запрос к движку через psql и подключили приложение к тому же основному экземпляру. Затем удалили экземпляр, сохранив подготовленную сеть.
Следующая работа создаёт таблицу заказов и использует SQL для сохранения и чтения заказов клиентов.



