Настройка подключения к Yandex Managed Service for PostgreSQL из контейнера Serverless Containers
Чтобы подключиться к кластеру Managed Service for PostgreSQL из контейнера Serverless Containers:
- Подготовьте файлы для Docker-образа.
- Создайте Docker-образ в реестре.
- Создайте и настройте контейнер Serverless Containers.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
- Если у вас не установлен Docker, установите его
. Убедитесь, что Docker Engine запущен. - Если у вас нет кластера Managed Service for PostgreSQL, создайте его. Настройки публичного доступа к хостам кластера не влияют на возможность подключения из контейнера Serverless Containers.
Подготовьте файлы для Docker-образа
-
В локальной директории создайте Dockerfile на основе Ubuntu. Настройка окружения в контейнере зависит от наличия публичного доступа к хостам кластера:
Без публичного доступаС публичным доступомFROM ubuntu:latest RUN apt-get update && \ apt-get install postgresql-client --yes COPY pg-version.sh pg-version.sh RUN chmod +x pg-version.sh ENTRYPOINT ["/pg-version.sh"]
FROM ubuntu:latest RUN apt-get update && \ apt-get install wget postgresql-client --yes && \ mkdir --parents ~/.postgresql && \ wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \ --output-document ~/.postgresql/root.crt && \ chmod 0600 ~/.postgresql/root.crt COPY pg-version.sh pg-version.sh RUN chmod +x pg-version.sh ENTRYPOINT ["/pg-version.sh"]
-
В ту же рабочую директорию поместите скрипт
pg-version.sh
. Скрипт подключается к базе данных и запрашивает версию PostgreSQL. Строка подключения в скрипте зависит от наличия публичного доступа к хостам кластера:Без публичного доступаС публичным доступом#!/bin/bash echo "$0: Start: $(date)" echo "Viewing the PostgreSQL Server Version" export PGPASSWORD='<пароль>' psql -h <FQDN_хоста> -p 6432 -U <имя_пользователя> -d <имя_БД> -c 'select version();' echo "$0: End: $(date)"
#!/bin/bash echo "$0: Start: $(date)" echo "Viewing the PostgreSQL Server Version" export PGPASSWORD='<пароль>' psql -h <FQDN_хоста> -p 6432 --set=sslmode=require -U <имя_пользователя> -d <имя_БД> -c 'select version();' echo "$0: End: $(date)"
Укажите в скрипте:
- FQDN хоста вашего кластера.
- Имя пользователя, от имени которого выполняется подключение.
- Пароль пользователя.
- Имя базы данных для подключения.
Создайте Docker-образ в реестре
-
Создайте реестр в сервисе Yandex Container Registry.
-
Соберите Docker-образ, выполнив в рабочей директории с Docker-файлом команду:
docker build . \ -t cr.yandex/<идентификатор_реестра>/ubuntu:pgconnect
Проверьте, что в локальном репозитории появился образ с указанным именем:
docker images
-
Аутентифицируйтесь в реестре:
-
Выполните команду:
docker login \ --username iam \ --password <IAM-токен> \ cr.yandex
Другие способы см. в разделе Аутентифицироваться в Container Registry.
-
Загрузите Docker-образ в реестр:
docker push cr.yandex/<идентификатор_реестра>/ubuntu:pgconnect
Создайте и настройте контейнер Serverless Containers
-
Создайте сервисный аккаунт с именем
docker-puller
и рольюcontainer-registry.images.puller
. -
Создайте контейнер Serverless Containers с именем
demo-pg-connect
. -
В настройках ревизии контейнера укажите:
- Ссылку на созданный ранее образ в реестре в поле URL образа.
- Сервисный аккаунт
docker-puller
в поле Сервисный аккаунт. - Сеть, в которой расположен кластер Managed Service for PostgreSQL, в поле Сеть. Если к кластеру настроен публичный доступ, сеть указывать не обязательно.
-
Нажмите Создать ревизию.
-
Скопируйте ссылку для вызова контейнера из раздела Общая информация в консоли управления.
-
Вызовите контейнер командой:
curl --header "Authorization: Bearer $(yc iam create-token)" <ссылка_для_вызова>
-
Перейдите в раздел Логи и убедитесь, что в логи контейнера попадает информация о версии PostgreSQL.
Удалите созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- Удалите контейнер Serverless Containers.
- Удалите Docker-образы из реестра.
- Удалите реестр.
- Удалите сервисный аккаунт.
- Удалите кластер Managed Service for PostgreSQL.
Чтобы удалить созданный Docker-образ из локального репозитория, выполните команду:
docker rmi cr.yandex/<идентификатор_реестра>/ubuntu:pgconnect