Skip to content

Latest commit

 

History

History
242 lines (179 loc) · 17.1 KB

part28-rus.md

File metadata and controls

242 lines (179 loc) · 17.1 KB

Как создать продакшен БД в AWS RDS

Оригинал

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

AWS RDS

RDS - это сервис, позволяющий управлять реляционными базами данных в AWS. Он поддерживает несколько видов реляционных баз данных и автоматически развертывается и управляется Amazon Web Service, поэтому нам не нужно особо заботиться о том, как поддерживать или масштабировать БД кластер. Его также очень легко настроить. Давайте нажмем кнопку Create database, чтобы создать новую базу данных!

Существует 2 способа создания БД: Standard create и Easy create. Easy create будет использовать рекомендуемую лучшими практиками конфигурацию для вашей БД, тогда как Standard create позволит вам настроить все параметры конфигурации самостоятельно. Для нашего примера я собираюсь использовать этот метод.

Сейчас нам нужно выбрать тип движка БД. Как видите на рисунке, существует шесть различных типов движков. Я выберу Postgres для нашего простого банковского приложения. В качестве версии давайте выберем 12.6, потому что мы используем Postgres 12 для разработки.

Далее давайте выберем шаблон с настройками. Нам предлагают выбор из Production, Dev/Test или Free Tier. Для демонстрационных целей я буду использовать Free Tier.

Далее мы должны ввести названием для нашего инстанса БД. Назовем его simple-bank. В качестве Master username, я буду использовать root, как мы это делали для локальной разработки. Затем для пароля я установлю этот флажок (Auto generate a password), чтобы RDS автоматически сгенерировал для меня случайный пароль.

Далее нужно выбрать DB instance class. Поскольку мы выбрали шаблон Free Tier, доступен только один тип инстанса: db.t2.micro. Если вы выберете шаблон Production или Dev/Test, тогда будут доступны различные другие более мощные инстансы на выбор.

Пока что для хранения нам будет доступно 20 ГБ бесплатного пространства на SSD, а также возможность включить автомасштабирование, которое позволит увеличить хранилище после превышения указанного предела. Нам не нужна такая возможность для нашего демонстрационного примера, поэтому я отключу эту функцию.

Для использования в продакшен у вас также будет возможность настроить несколько зон доступности или резервный инстанс в другой зоне, чтобы обеспечить избыточность данных и минимизировать задержку. Но поскольку мы используем Free Tier, эта опция недоступна. Итак, давайте перейдём к следующему разделу!

Здесь, в разделе Connectivity мы укажем каким образом можно получить доступ к нашей БД. По умолчанию БД будет развернута внутри стандартного виртуального частного облака (или VPC). Мы подробнее расскажем о VPC в другой раз. А пока давайте просто воспользуемся этим значением по умолчанию. Subnet group для БД — это способ указать подсети и диапазоны IP-адресов, которые инстанс БД может использовать в VPC. Оставим пока значения по умолчанию. Затем следует одна важная настройка. Вы хотите, чтобы ваша БД была общедоступной или нет? Если вы выберете Yes, все инстансы и устройства EC2 за пределами VPC смогут подключаться к вашей базе данных. Но нам нужно будет настроить VPC security group для этого. Если вы выберете No, то RDS не будет назначать общедоступный IP-адрес базе данных, поэтому к ней могут подключаться только инстансы и устройства EC2 внутри одного и того же VPC. Для нашего примера, я хочу получить доступ к БД с моего локального компьютера, поэтому выберу Yes.

Это гарантирует, что БД будет иметь общедоступный IP-адрес, но чтобы действительно иметь доступ к ней извне, мы должны настроить соответствующую VPC security group. Уже доступна VPC security group по умолчанию, но она не предоставляет доступ к порту БД откуда угодно, поэтому я создам новую. Назовем её access-postgres-anywhere. Затем выберем Availability Zone. Вы можете выбрать одну из этих зон на рисунке или использовать значение по умолчанию No preference.

Теперь перейдите в Additional configurations. При желании мы можем установить другой порт для БД или оставить всё как есть, то есть порт по умолчанию 5432.

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

Далее у нас есть возможность создать базу данных по умолчанию. Если вы не укажете здесь название, Amazon RDS не создаст за вас базу данных. Я хочу, чтобы он создал для меня базу данных simple_bank, поэтому я впишу это название в этом поле.

Не нужно что-то менять в DB parameter group. Вы также можете Enable automatic backup («Включить автоматическое резервное копирование») для своей БД или настроить некоторые параметры для мониторинга и логирования.

Установите этот флажок, если вы хотите включить автоматическое обновление до минорных версии (Enable auto minor version upgrade). И выберите интервал (Select window) в течении которого будет проводиться сервисное обслуживание БД, если хотите.

Если это продакшен БД, вы также можете включить защиту от удаления (Enable deletion protection). Это поможет защитить БД от случайного удаления.

В конце формы мы увидим примерную ежемесячную стоимость нашего инстанса БД. Поскольку мы пользуемся тарифом Free Tier, нам предоставляют 750 часов бесплатного использования и 20 ГБ хранилища общего назначения. А также 20 ГБ для хранилища резервных копий, создаваемых автоматически, и копий, которые создаются пользователем вручную. Если вы выходите за предел, будет сниматься стандартная стоимость за использование сервиса. Более подробно о стоимости услуг можно узнать по этой ссылке.

Хорошо, теперь давайте нажмём Create database.

Как видите, сейчас создается база данных. Потребуется несколько минут прежде, чем мы сможем её использовать. В ожидании этого давайте нажмем эту кнопку, чтобы увидеть учетные данные для доступа к БД.

Поскольку я ранее указал, чтобы RDS автоматически сгенерировала для меня случайный пароль, здесь, во всплывающем окне, мы можем увидеть и скопировать Master password.

Теперь я открою TablePlus и создам новое соединение для доступа к нашей удаленной БД. Давайте назовём наше соединение AWS Postgres. У нас еще нет URL-адреса хоста, поэтому пока оставим его пустым. Имя пользователя должно быть root и давайте вставим пароль. Имя базы данных simple_bank. Вот и всё что нужно сделать.

Теперь нам просто нужно дождаться создания БД и получить URL-адрес её хоста. Вернемся в консоль AWS. Закройте это всплывающее окно и обновите страницу. База ещё не готова. Но здесь в таблице Networking мы видим, что наша БД находится в зоне eu-west-1b, она использует VPC security group и subnet group по умолчанию. Давайте сейчас просмотрим VPC security group access-postgres-anywhere, которую мы указали в процессе создания БД.

Если мы перейдем по ссылке в эту группу, то увидим, что одно Inbound rule типа PostgreSQL.

Для которого протокол равен TCP, а порт 5432. IP-адрес в строке Source на самом деле - мой текущий. Я могу быстро убедиться в этом, выполнив поиск своего IP-адреса в браузере. Итак, по сути, это правило разрешает доступ к базе данных через порт 5432 только для моего IP-адреса. Но он не статический, и я не хочу обновлять это правило каждый раз, когда IP-адрес меняется. Поэтому я изменю Source на Anywhere («Откуда угодно»).

Это гарантирует, что любой IP-адрес сможет получить доступ к базе данных. Конечно, если это продакшен БД, вы не захотите открывать к ней доступ кому угодно в Интернете. Итак, давайте сохраним правило и вернемся на страницу с базами данных RDS.

Как видно на рисунке, теперь база данных успешно создана.

Давайте посмотрим на параметры подключения. На этот раз у нас есть конечная точка для доступа к ней. Итак, давайте скопируем этот URL,

и вставим его в поле Host нашего нового подключения в TablePlus. Затем нажмите Test. Как видно на рисунке все поля отмечаны зелёным цветом. Это означает, что соединение успешно установлено.

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

Запускаем миграции БД

Итак, давайте сделаем это сейчас. В репозитории нашего простого банковского приложения давайте откроем Makefile. Там есть команда migrate up, которую мы используем для локальной миграции БД.

migrateup:
	migrate -path db/migration -database "postgresql://root:secret@localhost:5432/simple_bank?sslmode=disable" -verbose up

Все, что нам нужно сделать сейчас, это изменить этот URL postgresql://root:secret@localhost:5432/simple_bank?sslmode=disable на URL-адрес удаленной БД. Имя пользователя по-прежнему root, но пароль другой. Итак, давайте скопируем его из консоли AWS и вставим сюда. localhost также следует изменить на удаленный хост, который AWS RDS предоставляет нам в консоли. Порт и название базы данных совпадают, поэтому их не нужно менять. Но мы должны удалить параметр sslmode=disable, поскольку мы подключаемся к удаленной БД, то лучше использовать защищенное соединение. Итак, теперь команда должна выполниться без проблем.

migrateup:
    migrate -path db/migration -database "postgresql://root:tupExr0Gp4In4Ww4WHKR@simple-bank.czutruo2pa5q.eu-west-1.rds.amazonaws.com:5432/simple_bank" -verbose up

Сохраним файл, затем откроем терминал и запустим make migrate up.

Как видно из рисунка, все миграции успешно выполнены! Итак, давайте откроем TablePlus, чтобы просмотреть БД. Я обновлю соединение с базой. Как видите, все таблицы успешно созданы.

Потрясающе! Итак, теперь вы знаете, как настроить инстанс базы данных, которым можно управлять из консоли, используя AWS RDS. Я надеюсь, что приобретенные из этой лекции знания будут вам полезны.

Большое спасибо за время, потраченное на чтение! Желаю вам получать удовольствие от обучения и до встречи на следующей лекции.