Подключите Google Cloud Build к Google Cloud SQL
Google Cloud Run позволяет использовать Cloud SQL. Но что, если вам понадобится Cloud SQL при создании контейнера в Google Cloud Build? Это возможно?
Задний план
У меня есть проект Next.js, который работает в контейнере в Google Cloud Run. Отправка моего кода в Cloud Build (установка материалов, создание статических страниц и размещение всего в контейнере) и развертывание в Cloud Run отлично работает. 👌
Cloud SQL
Но я просто добавил некоторые функции, в которых также необходимы некоторые данные из моего экземпляра PostgreSQL, который работает в Google Cloud SQL. Эти данные используются при построении проекта (генерации статических страниц).
Локально, на моем компьютере, это работает нормально, поскольку проект может подключаться к моему прокси-серверу CloudSQL. При работе в CloudRun это также должно работать, поскольку Cloud Run позволяет подключаться к моему экземпляру Postgres в Cloud SQL .
Моя проблема
При создании моего проекта с помощью Cloud Build мне нужен доступ к моей базе данных, чтобы я мог создавать свои статические страницы. Я ищу способ подключить мой облачный конструктор Docker к Cloud SQL, возможно, так же, как Cloud Run (полностью управляемый) предоставляет механизм, который подключается с помощью прокси-сервера Cloud SQL.
Таким образом, я мог подключиться /cloudsql/INSTANCE_CONNECTION_NAME
при создании своего проекта!
Вопрос
Итак, мой вопрос: как мне подключиться к моему экземпляру PostgreSQL в Google Cloud SQL через прокси-сервер Cloud SQL при создании моего проекта в Google Cloud Build?
Такие вещи, как мои учетные данные для базы данных и т. Д., Уже находятся в диспетчере секретов, поэтому я должен иметь возможность использовать эти данные, я думаю 🤔
Ответы
Вы можете использовать контейнер, который вы хотите (и вам нужен) для создания своих статических страниц, и загрузить облачный прокси-сервер sql, чтобы открыть туннель с базой данных.
- name: '<YOUR CONTAINER>'
entrypoint: 'sh'
args:
- -c
- |
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
chmod +x cloud_sql_proxy
./cloud_sql_proxy -instances=<my-project-id:us-central1:myPostgresInstance>=tcp:5432 &
<YOUR SCRIPT>
В движке приложений есть оболочка exec, которая позволяет вам проксировать ваш Cloud SQL, поэтому я использую ее для подключения к БД в облачной сборке (как и некоторые учебники Google ).
Однако имейте в us-central1
виду, что впереди проблемы: Cloud Build работает исключительно *, что означает патологически медленное подключение из любого другого места. Для одной или двух операций мне все равно, но если вы запускаете целый набор интеграционных тестов, это просто не сработает.
Кроме того, вам необходимо предоставить GCB разрешение на доступ к GCSQL.
steps:
- id: 'Connect to DB using appengine wrapper to help'
name: gcr.io/google-appengine/exec-wrapper
args:
[
'-i', # The image you want to connect to the db from
'$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME:$SHORT_SHA',
'-s', # The postgres instance
'${PROJECT_ID}:${_POSTGRES_REGION}:${_POSTGRES_INSTANCE_NAME}', '-e', # Get your secrets here... 'GCLOUD_ENV_SECRET_NAME=${_GCLOUD_ENV_SECRET_NAME}',
'--', # And then the command you want to run, in my case a database migration
'python',
'manage.py',
'migrate',
]
substitutions:
_GCLOUD_ENV_SECRET_NAME: mysecret
_GCR_HOSTNAME: eu.gcr.io
_POSTGRES_INSTANCE_NAME: my-instance
_POSTGRES_REGION: europe-west1
* если вы не готовы заплатить больше и вас сильно заинтересует бета-версия программного обеспечения, в этом случае вы можете использовать воркеры облачной сборки (на момент написания все равно находятся в бета-версии ... Я вернусь и обновлю, если они сделают его в производство и исправить проблемы)