1. Обзор
Cloud Run — это полностью управляемая бессерверная платформа, которая позволяет запускать контейнеры без отслеживания состояния, которые можно вызвать с помощью HTTP-запросов. В этой лаборатории кода будет показано, как подключить приложение Node.js в Cloud Run к базе данных Cloud SQL для PostgreSQL.
Что вы узнаете
В этой лабораторной работе вы научитесь:
- Создайте экземпляр Cloud SQL для PostgreSQL (настроенный для использования Private Service Connect ).
- Разверните приложение в Cloud Run, которое подключается к вашей базе данных Cloud SQL.
- Используйте Gemini Code Assist, чтобы добавить функциональность вашему приложению.
Что вы узнаете
- Создайте экземпляр Cloud SQL для PostgreSQL (настроенный для использования Private Service Connect ).
- Разверните приложение в Cloud Run, которое подключается к вашей базе данных Cloud SQL.
- Используйте Gemini Code Assist, чтобы добавить функциональность вашему приложению.
2. Предварительные условия
- Если у вас еще нет учетной записи Google, вам необходимо создать учетную запись Google .
- Используйте личную учетную запись вместо рабочей или учебной учетной записи. Рабочие и учебные учетные записи могут иметь ограничения, не позволяющие вам включить API, необходимые для этой лабораторной работы.
3. Настройка проекта
- Войдите в Google Cloud Console .
- Включите биллинг в Cloud Console.
- Завершение этой лабораторной работы должно стоить менее 1 доллара США в облачных ресурсах.
- Вы можете выполнить действия, описанные в конце этого практического занятия, чтобы удалить ресурсы и избежать дальнейших расходов.
- Новые пользователи имеют право на бесплатную пробную версию стоимостью 300 долларов США .
- Создайте новый проект или повторно используйте существующий проект.
4. Откройте редактор Cloud Shell.
- Перейдите в редактор Cloud Shell.
- Если терминал не отображается в нижней части экрана, откройте его:
- Нажмите на гамбургер-меню
- Нажмите Терминал
- Нажмите «Новый терминал».
- Нажмите на гамбургер-меню
- В терминале настройте свой проект с помощью этой команды:
- Формат:
gcloud config set project [PROJECT_ID]
- Пример:
gcloud config set project lab-project-id-example
- Если вы не можете вспомнить идентификатор своего проекта:
- Вы можете перечислить все идентификаторы ваших проектов с помощью:
gcloud projects list | awk '/PROJECT_ID/{print $2}'
- Вы можете перечислить все идентификаторы ваших проектов с помощью:
- Формат:
- Если будет предложено авторизоваться, нажмите «Авторизовать» , чтобы продолжить.
- Вы должны увидеть это сообщение:
Если вы видитеUpdated property [core/project].
WARNING
и вас спрашиваютDo you want to continue (Y/N)?
, то, вероятно, вы неправильно ввели идентификатор проекта. НажмитеN
, нажмитеEnter
и попробуйте еще раз запустить командуgcloud config set project
.
5. Включите API
В терминале включите API:
gcloud services enable \
compute.googleapis.com \
sqladmin.googleapis.com \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
networkconnectivity.googleapis.com \
servicenetworking.googleapis.com \
cloudaicompanion.googleapis.com
Если будет предложено авторизоваться, нажмите «Авторизовать» , чтобы продолжить.
Выполнение этой команды может занять несколько минут, но в конечном итоге она должна выдать успешное сообщение, подобное этому:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
6. Настройте учетную запись службы.
Создайте и настройте учетную запись службы Google Cloud, которая будет использоваться Cloud Run, чтобы у нее были правильные разрешения для подключения к Cloud SQL.
- Запустите команду
gcloud iam service-accounts create
следующим образом, чтобы создать новую учетную запись службы:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account"
- Запустите команду gcloud project add-iam-policy-binding следующим образом, чтобы добавить роль записи журнала в только что созданную учетную запись службы Google Cloud.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/logging.logWriter"
7. Создайте экземпляр Cloud SQL.
- Создайте политику подключения к службе, чтобы разрешить сетевое подключение от Cloud Run к Cloud SQL с помощью Private Service Connect.
gcloud network-connectivity service-connection-policies create quickstart-policy \ --network=default \ --project=${GOOGLE_CLOUD_PROJECT} \ --region=us-central1 \ --service-class=google-cloud-sql \ --subnets=https://www.googleapis.com/compute/v1/projects/${GOOGLE_CLOUD_PROJECT}/regions/us-central1/subnetworks/default
- Создайте уникальный пароль для вашей базы данных
export DB_PASSWORD=$(openssl rand -base64 20)
- Запустите команду
gcloud sql instances create
, чтобы создать экземпляр Cloud SQL.gcloud sql instances create quickstart-instance \ --project=${GOOGLE_CLOUD_PROJECT} \ --root-password=${DB_PASSWORD} \ --database-version=POSTGRES_17 \ --tier=db-perf-optimized-N-2 \ --region=us-central1 \ --ssl-mode=ENCRYPTED_ONLY \ --no-assign-ip \ --enable-private-service-connect \ --psc-auto-connections=network=projects/${GOOGLE_CLOUD_PROJECT}/global/networks/default
Выполнение этой команды может занять несколько минут.
- Запустите команду
gcloud sql databases create
, чтобы создать базу данных Cloud SQL вquickstart-instance
.gcloud sql databases create quickstart_db \ --instance=quickstart-instance
8. Подготовьте заявку
Подготовьте приложение 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"
- Установите
pg
для взаимодействия с базой данных PostgreSQL.npm install pg
- Установите экспресс, чтобы принимать входящие http-запросы.
npm install express
- Создайте файл
index.mjs
с кодом приложения. Этот код способен:- Принимать HTTP-запросы
- Подключиться к базе данных
- Сохраните время HTTP-запроса в базе данных.
- Возвращает время последних пяти запросов
cat > index.mjs << "EOF" import express from 'express'; import pg from 'pg'; const { Pool } = pg; const pool = new Pool({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, ssl: { require: true, rejectUnauthorized: false, // required for self-signed certs // https://node-postgres.com/features/ssl#self-signed-cert } }); 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. Теперь приложение готово к развертыванию.
9. Разверните приложение в Cloud Run.
- Запустите команду gcloud project add-iam-policy-binding следующим образом, чтобы добавить роль сетевого пользователя к учетной записи службы Cloud Run для службы Cloud Run, которую вы собираетесь создать.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member "serviceAccount:service-$(gcloud projects describe ${GOOGLE_CLOUD_PROJECT} --format="value(projectNumber)")@serverless-robot-prod.iam.gserviceaccount.com" \ --role "roles/compute.networkUser"
- Запустите команду ниже, чтобы развернуть приложение в Cloud Run:
gcloud run deploy helloworld \ --region=us-central1 \ --source=. \ --set-env-vars DB_NAME="quickstart_db" \ --set-env-vars DB_USER="postgres" \ --set-env-vars DB_PASSWORD=${DB_PASSWORD} \ --set-env-vars DB_HOST="$(gcloud sql instances describe quickstart-instance --project=${GOOGLE_CLOUD_PROJECT} --format='value(settings.ipConfiguration.pscConfig.pscAutoConnections.ipAddress)')" \ --service-account="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --network=default \ --subnet=default \ --allow-unauthenticated
- При появлении запроса нажмите
Y
иEnter
, чтобы подтвердить, что вы хотите продолжить:Do you want to continue (Y/n)? Y
Через несколько минут приложение должно предоставить вам URL-адрес для посещения.
Перейдите по URL-адресу, чтобы увидеть свое приложение в действии. Каждый раз, когда вы посещаете URL-адрес или обновляете страницу, вы увидите пять последних посещений, возвращаемых в формате JSON.
10. Поздравления
В ходе этой лабораторной работы вы научились делать следующее:
- Создайте экземпляр Cloud SQL для PostgreSQL (настроенный для использования Private Service Connect ).
- Разверните приложение в Cloud Run, которое подключается к вашей базе данных Cloud SQL.
- Используйте Gemini Code Assist, чтобы добавить функциональность вашему приложению.
Очистить
Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий ресурсы, либо сохраните проект и удалите отдельные ресурсы. Если вы хотите удалить весь проект, вы можете запустить:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}