Подключение к Cloud SQL: Compute Engine, частный IP-адрес и прокси-сервер Cloud SQL

1. Введение

Последнее обновление: 06.05.2021

Размышляя о связи

Существует множество типов приложений и фреймворков. В этом практическом занятии мы рассмотрим подключение к Cloud SQL из приложения, работающего на управляемой виртуальной машине в Google Compute Engine, через внутренний частный IP-адрес с использованием Cloud SQL Proxy. Это невероятно безопасный способ запуска приложения с сохранением состояния в облаке. Вы минимизируете свою уязвимость перед интернетом, используя только частный IP-адрес и SQL Proxy, который обрабатывает SSL-соединение за вас.

Одним из распространенных примеров использования этого подхода может быть, например, перенос локального приложения для работы в облаке вместо локального развертывания.

Что вы построите

Этот практический пример очень минималистичен. Идея состоит в том, чтобы пошагово объяснить основные моменты подключения, не слишком углубляясь в детали самого приложения. В идеальном мире подключение к Cloud SQL ничем не отличается от подключения к любой другой базе данных SQL, поэтому вы сможете применить полученные в этом примере знания в любом рабочем приложении.

Инструкции будут включать как пошаговое описание действий в консоли GCP, так и эквиваленты команд gcloud для использования в командной строке или при автоматизации.

Отдельные этапы следующие:

  • Создайте минимальную учетную запись службы, чтобы обеспечить подключение к экземпляру Cloud SQL.
  • Создайте виртуальную машину в Google Compute Engine (GCE).
  • Создайте экземпляр Cloud SQL (в этом руководстве используется PostgreSQL, но аналогичные методы применимы и для MySQL или SQL Server).
  • Загрузите и запустите Cloud SQL Proxy на экземпляре GCE.

Что вам понадобится

  • В учетной записи GCP у вас есть разрешения на включение API и создание сервисов.

2. Создайте учетную запись службы.

Сервисные учетные записи используются для предоставления разрешений на использование различных сервисов в вашем проекте GCP. Для этой практической работы нам нужна такая учетная запись, чтобы предоставить Cloud SQL Proxy разрешение на подключение к нашему экземпляру Cloud SQL.

На консоли

Перейдите на страницу учетных записей службы IAM и нажмите f8393a08b37a422c.png кнопка вверху страницы.

Присвойте своей учетной записи уникальное имя и идентификатор, затем нажмите «СОЗДАТЬ».

На следующей странице щелкните раскрывающийся список «Выберите роль». Отфильтруйте результаты по «Cloud SQL» и выберите роль «Клиент Cloud SQL». Нажмите «ПРОДОЛЖИТЬ».

Нажмите кнопку ГОТОВО.

Используя gcloud

Создайте учетную запись службы:

gcloud iam service-accounts create <SERVICE_ACCOUNT_NAME> --display-name "<SERVICE_ACCOUNT_NAME> service account"

Это создаст учетную запись службы, но в данный момент ей не назначены никакие роли/права доступа. Чтобы назначить соответствующую роль, выполните:

gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client

Например, если при создании вашей учетной записи службы она называлась sa-test , а ваш проект — my-project-test то команда будет выглядеть так:

gcloud projects add-iam-policy-binding my-project-test --member serviceAccount:sa-test@my-project-test.iam.gserviceaccount.com --role roles/cloudsql.client
gcloud iam service-accounts keys create service-account.json --iam-account <SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com

3. Создание виртуальной машины Compute Engine

Google Compute Engine — это управляемый сервис, на котором будет работать виртуальная машина, содержащая наше приложение, к которому мы хотим подключиться. В этом практическом занятии мы не будем создавать приложение, но подтвердим подключение, запустив psql.

На консоли

Перейдите на страницу Google Compute Engine и нажмите на 77c46cd1f51bed5c.png кнопка.

Здесь много вариантов, вам нужно сделать только следующее:

  1. Присвойте вашему экземпляру имя.
  2. Измените Machine type на f1-micro
  3. В разделе «Идентификация и доступ к API» измените значение в раскрывающемся списке для Service account с Default compute service account на ту, которую вы создали на предыдущем шаге.
  4. Нажмите кнопку «Создать» в самом низу страницы.

Используя gcloud

Имя учетной записи службы — это полное имя учетной записи службы, которую вы создали ранее, поэтому оно будет иметь формат: <NAME>@<PROJECT>.iam.gserviceaccount.com .

gcloud compute instances create <INSTANCE NAME> --machine-type=f1-micro --zone=us-central1-b --service-account=<SERVICE ACCOUNT FULL NAME>
gcloud compute zones list

4. Создание экземпляра Cloud SQL

Cloud SQL — это наше решение для управления реляционными базами данных. Оно поддерживает MySQL, PostgreSQL и SQL Server. В этом практическом занятии мы создадим базу данных PostgreSQL, но инструкции аналогичны для всех трех.

На консоли

Перейдите на страницу Cloud SQL и нажмите на 241836b315e11bf5.png кнопка.

Как я уже упоминал, большая часть этого практического занятия универсальна и подходит для любой версии SQL, но для этого занятия выберите PostgreSQL.

  1. Присвойте вашему экземпляру идентификатор.
  2. Введите пароль для пользователя по умолчанию (имя пользователя будет соответствовать имени пользователя выбранной базы данных, например, root для MySQL или postgres для PostgreSQL).
  3. Если вы изменили регион своего вычислительного экземпляра, вам также следует изменить регион здесь соответствующим образом.
  4. Прокрутите вниз и нажмите « show configuration options
  5. Разверните раздел Connectivity .
  6. Снимите флажок с опции Public IP и установите флажок Private IP
  7. Убедитесь, что в раскрывающемся списке, который появляется после выбора параметра «Частный IP-адрес», выбран default
  8. Прокрутите вниз и нажмите «Создать».

Обычно запуск занимает несколько минут.

Используя gcloud

Поскольку здесь нет удобных подсказок для включения API, нам придётся сделать это вручную.

gcloud services enable servicenetworking.googleapis.com

Далее нам необходимо включить подключение к частным сервисам в нашей сети VPC по умолчанию. Первым шагом для этого является выделение именованного диапазона IP-адресов для использования нашим экземпляром.

gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default

Далее мы назначим этот диапазон IP-адресов нашим внутренним сервисам (это займет около минуты).

gcloud services vpc-peerings update --service=servicenetworking.googleapis.com  --network=default     --project=<PROJECT ID> --ranges=sql-codelab-allocation --force

И наконец, создание самого экземпляра в настоящее время доступно только в бета-версии. Комбинация параметров --no-assign-ip и --network=default включает частное IP-подключение. На данный момент нет возможности включить одновременно и частный, и публичный IP-адрес, поэтому, если вам нужен публичный доступ, вам потребуется отредактировать экземпляр после его создания. Это займет несколько минут.

gcloud beta sql instances create test-sql-codelab-00 --no-assign-ip --database-version=POSTGRES_11 --tier=db-f1-micro --region=us-central1 --network=default --root-password=<PASSWORD>

5. Настройте и запустите Cloud SQL Proxy.

После подключения к виртуальной машине нам понадобится строка подключения к экземпляру. Сначала мы её получим, а затем подключимся к самой виртуальной машине через SSH. Инструкции по этим этапам будут в соответствующих разделах для консоли и gcloud, а остальные команды будут выполняться из командной строки на виртуальной машине в отдельном разделе.

На консоли

Перейдите сюда и щелкните по имени вашего экземпляра Cloud SQL.

Прокрутите немного вниз и скопируйте Connection name куда-нибудь для дальнейшего использования.

Перейдите на страницу со списком экземпляров Google Compute Engine и найдите строку с вашей виртуальной машиной.

В столбце Connect нажмите кнопку SSH , и откроется отдельное окно, обеспечивающее безопасное подключение к виртуальной машине.

Пропустите раздел Using gcloud , чтобы ознакомиться с остальными инструкциями, поскольку они одинаковы для обоих случаев.

Используя gcloud

Замените <INSTANCE NAME> на имя вашего экземпляра Cloud SQL:

gcloud sql instances describe <INSTANCE NAME> | grep connectionName

Сохраните имя подключения к экземпляру для последующего использования.

Вам нужно заменить <ZONE> на зону, которая использовалась при создании экземпляра. Если вы её не меняли, значит, она была установлена ​​на us-central1-b . А также замените <INSTANCE_NAME> на то, что вы указали ранее.

gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>

После подключения к виртуальной машине

Для начала нам нужно загрузить прокси. Это зависит от вашей операционной системы. Если вы не меняли ОС при создании виртуальной машины, то это будет Linux, и вы можете использовать:

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy

Если вы сменили операционную систему, вы можете перейти сюда , чтобы найти правильную команду для получения прокси-сервера для вашей ОС.

Для запуска прокси-сервера возьмите имя подключения к экземпляру, скопированное из сведений об экземпляре Cloud SQL, и замените им <INSTANCE_CONNECTION_NAME> . Также обратите внимание, что номер TCP-порта может измениться, если вы не используете базу данных Postgres или если вы изменили порт по умолчанию, на котором база данных прослушивает запросы.

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &

6. Проверьте соединение и завершите процесс.

Как уже упоминалось ранее, если у вас есть приложение, которое вы хотите запустить в экземпляре GCE для тестирования, это, конечно, тоже допустимо. Для этой практической работы мы установим psql и будем использовать этот клиент, чтобы убедиться, что мы можем подключиться к нашей базе данных.

Из SSH-сессии на виртуальной машине:

sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"

Затем укажите пароль пользователя по умолчанию, который вы установили при создании экземпляра Cloud SQL.

Поздравляем! Если все прошло успешно, у вас должна появиться командная строка Postgres, и вы сможете выполнять команды в своей базе данных.

Что дальше?

Посмотрите некоторые из этих практических занятий по программированию...

Справочная документация