1. Обзор
Коннектор Cloud SQL для Node.js — это самый простой способ безопасно подключить ваше приложение Node.js к базе данных Cloud SQL. Cloud Run — это полностью управляемая бессерверная платформа, позволяющая запускать контейнеры без сохранения состояния, вызываемые через HTTP-запросы. В этом руководстве мы продемонстрируем, как безопасно подключить приложение Node.js на Cloud Run к базе данных Cloud SQL для PostgreSQL с помощью сервисной учетной записи, используя аутентификацию IAM.
Что вы узнаете
В этой лабораторной работе вы научитесь выполнять следующие действия:
- Создайте экземпляр Cloud SQL для базы данных PostgreSQL.
- Разверните приложение Node.js в Cloud Run.
- Подключите ваше приложение к базе данных с помощью библиотеки Cloud SQL Node.js Connector.
Предварительные требования
- Для выполнения этой лабораторной работы предполагается знакомство со средами Cloud Console и Cloud Shell.
2. Прежде чем начать
Настройка облачного проекта
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Google, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы можете изменить её в любое время.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он останется неизменным на протяжении всего проекта. - К вашему сведению, существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить весь проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Настройка среды
Активируйте Cloud Shell, нажав на значок справа от строки поиска.

В Cloud Shell включите API:
gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
run.googleapis.com artifactregistry.googleapis.com \
cloudbuild.googleapis.com servicenetworking.googleapis.com
Если появится запрос на авторизацию, нажмите «Авторизовать», чтобы продолжить.

Выполнение этой команды может занять несколько минут, но в итоге должно отобразиться сообщение об успешном завершении, похожее на это:
Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
3. Создайте учетную запись службы.
Создайте и настройте учетную запись службы Google Cloud для использования Cloud Run, чтобы она имела необходимые разрешения для подключения к Cloud SQL.
- Для создания новой учетной записи службы выполните команду
gcloud iam service-accounts createследующим образом:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account" - Чтобы добавить роль клиента Cloud SQL в созданную учетную запись службы Google Cloud, выполните команду gcloud projects add-iam-policy-binding следующим образом. В Cloud Shell выражение
${GOOGLE_CLOUD_PROJECT}будет заменено именем вашего проекта. При желании вы также можете выполнить эту замену вручную.gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.client" - Чтобы добавить роль пользователя экземпляра Cloud SQL к только что созданной учетной записи службы Google Cloud, выполните команду gcloud projects add-iam-policy-binding следующим образом.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.instanceUser" - Чтобы добавить роль Log Writer к только что созданной учетной записи службы Google Cloud, выполните команду gcloud projects add-iam-policy-binding следующим образом.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/logging.logWriter"
4. Настройка Cloud SQL
Выполните команду gcloud sql instances create , чтобы создать экземпляр Cloud SQL.
-
--database-version: Тип и версия механизма базы данных. Если не указано, используется значение по умолчанию API. См. документацию по версиям баз данных gcloud, чтобы узнать о доступных версиях. -
--cpu: Желаемое количество ядер в системе. -
--memory: Целочисленное значение, указывающее, какой объем памяти требуется на компьютере. Должна быть указана единица измерения (например, 3072 МБ или 9 ГБ). Если единица измерения не указана, предполагается использование ГБ. -
--region: Региональное расположение экземпляра (например: us-central1, asia-east1, us-east1). -
--database-flags: Позволяет устанавливать флаги. В данном случае мы включаемcloudsql.iam_authentication, чтобы Cloud Run мог подключаться к Cloud SQL, используя учетную запись службы, которую мы создали ранее.gcloud sql instances create quickstart-instance \ --database-version=POSTGRES_18 \ --tier=db-custom-1-3840 \ --region=us-central1 \ --edition=ENTERPRISE \ --database-flags=cloudsql.iam_authentication=on
Выполнение этой команды может занять несколько минут.
Выполните команду gcloud sql databases create , чтобы создать базу данных Cloud SQL в quickstart-instance .
gcloud sql databases create quickstart_db \
--instance=quickstart-instance
Создайте пользователя базы данных PostgreSQL для учетной записи службы, которую вы создали ранее, чтобы получить доступ к базе данных.
gcloud sql users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
--instance=quickstart-instance \
--type=cloud_iam_service_account \
--database-roles=postgres
Внимание: Не используйте --database-roles=postgres в производственных приложениях. Он используется для предоставления необходимых привилегий для программного создания и удаления таблиц в коде этой лабораторной работы.
5. Подготовьте заявление.
Подготовьте Node.js-приложение, которое обрабатывает HTTP-запросы.
- В Cloud Shell создайте новую директорию с именем
helloworld, затем перейдите в эту директорию:mkdir helloworld cd helloworld - Инициализируйте файл
package.jsonкак модуль.npm init -y npm pkg set type="module" npm pkg set main="index.mjs" npm pkg set scripts.start="node index.mjs" - Установите зависимость коннектора Cloud SQL для Node.js.
npm install @google-cloud/cloud-sql-connector - Установите
pgдля взаимодействия с базой данных PostgreSQL.npm install pg - Установите Express для приема входящих HTTP-запросов.
npm install express - Создайте файл
index.mjsс кодом приложения. Этот код способен:- Принимать HTTP-запросы
- Подключитесь к базе данных
- Сохраните время HTTP-запроса в базе данных.
- Возвращает время выполнения последних пяти запросов.
cat > index.mjs << "EOF" import express from 'express'; import pg from 'pg'; import {Connector} from '@google-cloud/cloud-sql-connector'; const {Pool} = pg; const connector = new Connector(); const clientOpts = await connector.getOptions({ instanceConnectionName: process.env.INSTANCE_CONNECTION_NAME, authType: 'IAM' }); const pool = new Pool({ ...clientOpts, user: process.env.DB_USER, database: process.env.DB_NAME }); const app = express(); app.get('/', async (req, res) => { await pool.query('INSERT INTO visits(created_at) VALUES(NOW())'); const {rows} = await pool.query('SELECT created_at FROM visits ORDER BY created_at DESC LIMIT 5'); console.table(rows); // prints the last 5 visits res.send(rows); }); const port = parseInt(process.env.PORT) || 8080; app.listen(port, async () => { console.log('process.env: ', process.env); await pool.query(`CREATE TABLE IF NOT EXISTS visits ( id SERIAL NOT NULL, created_at timestamp NOT NULL, PRIMARY KEY (id) );`); console.log(`helloworld: listening on port ${port}`); }); EOF
Этот код создает базовый веб-сервер, который прослушивает порт, определенный переменной среды PORT. Теперь приложение готово к развертыванию.
6. Развертывание облачного приложения
Выполните указанную ниже команду, чтобы развернуть приложение в Cloud Run:
-
--region: Региональное расположение экземпляра (например: us-central1, asia-east1, us-east1). -
--source: Исходный код для развертывания. В данном случае.обозначает исходный код в текущей папкеhelloworld. -
--set-env-vars: Устанавливает переменные среды, используемые приложением для направления его работы к базе данных Cloud SQL. -
--service-account: Привязывает развертывание Cloud Run к учетной записи службы с правами на подключение к базе данных Cloud SQL, созданной в начале этого практического занятия. -
--allow-unauthenticated: Разрешает неаутентифицированные запросы, чтобы приложение было доступно из интернета.
gcloud run deploy helloworld \
--region=us-central1 \
--source=. \
--set-env-vars INSTANCE_CONNECTION_NAME="${GOOGLE_CLOUD_PROJECT}:us-central1:quickstart-instance" \
--set-env-vars DB_NAME="quickstart_db" \
--set-env-vars DB_USER="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam" \
--service-account="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--allow-unauthenticated
Если появится запрос, нажмите y и Enter , чтобы подтвердить продолжение:
Do you want to continue (Y/n)? y
Через несколько минут приложение должно предоставить вам URL-адрес для перехода по ссылке.
Перейдите по указанному URL-адресу, чтобы увидеть работу вашего приложения. При каждом посещении URL-адреса или обновлении страницы вы будете видеть данные о пяти последних посещениях в формате JSON.
7. Поздравляем!
Вы развернули приложение Node.js в Cloud Run, которое может подключаться к базе данных PostgreSQL, работающей в Cloud SQL.
Что мы рассмотрели:
- Создание базы данных Cloud SQL для PostgreSQL
- Развертывание приложения Node.js в Cloud Run
- Подключение вашего приложения к Cloud SQL с помощью коннектора Cloud SQL для Node.js
Уборка
Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий эти ресурсы, либо сохраните проект и удалите отдельные ресурсы. Если вы хотите удалить весь проект, выполните следующую команду:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}