О практической работе
1. Обзор
Cloud Run — это полностью управляемая бессерверная платформа, которая позволяет запускать контейнеры без отслеживания состояния, которые можно вызвать с помощью HTTP-запросов. В этой лаборатории кода будет продемонстрировано, как безопасно подключить приложение Node.js в Cloud Run к AlloyDB с помощью учетной записи службы с использованием аутентификации IAM.
Что вы узнаете
В этой лабораторной работе вы научитесь:
- Создайте экземпляр AlloyDB (настроенный для использования Private Service Connect )
- Разверните приложение в Cloud Run, которое подключается к вашему экземпляру AlloyDB.
- Используйте 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 \
alloydb.googleapis.com \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
cloudaicompanion.googleapis.com
Если будет предложено авторизоваться, нажмите «Авторизовать» , чтобы продолжить.
Выполнение этой команды может занять несколько минут, но в конечном итоге она должна выдать успешное сообщение, подобное этому:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
6. Настройка учетной записи службы
Создайте и настройте учетную запись службы Google Cloud, которая будет использоваться Cloud Run, чтобы у нее были правильные разрешения для подключения к AlloyDB.
- Запустите команду
gcloud iam service-accounts create
следующим образом, чтобы создать новую учетную запись службы:gcloud iam service-accounts create quickstart-service-account \
--display-name="Quickstart Service Account" - Запустите команду gcloud project add-iam-policy-binding следующим образом, чтобы добавить роль пользователя базы данных AlloyDB к только что созданной учетной записи службы Google Cloud.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/alloydb.databaseUser" - Запустите команду 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/serviceusage.serviceUsageConsumer" - Запустите команду 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. Создать экземпляр AlloyDB
- Запустите команду
gcloud alloydb clusters create
чтобы создать экземпляр Cloud SQL.gcloud alloydb clusters create quickstart-cluster \
--password=$(openssl rand -base64 20) \
--region=us-central1 \
--project=${GOOGLE_CLOUD_PROJECT} \
--enable-private-service-connect \
--database-version=POSTGRES_16
Выполнение этой команды может занять несколько минут.
- Запустите команду
gcloud alloydb instances create
, чтобы создать экземпляр Cloud SQL.gcloud alloydb instances create quickstart-instance \
--project=${GOOGLE_CLOUD_PROJECT} \
--instance-type=PRIMARY \
--cpu-count=2 \
--region=us-central1 \
--cluster=quickstart-cluster \
--allowed-psc-projects=${GOOGLE_CLOUD_PROJECT} \
--database-flags=alloydb.iam_authentication=on - Запустите команду
gcloud alloydb instances describe
чтобы получить ссылку на вложение службы PSC и экспортировать ее в переменную.export SERVICE_ATTACHMENT=$(gcloud alloydb instances describe quickstart-instance \
--cluster=quickstart-cluster --region=us-central1 \
--format="value(pscInstanceConfig.serviceAttachmentLink)") gcloud compute addresses create quickstart-address \
--region=us-central1 \
--subnet=defaultgcloud compute forwarding-rules create quickstart-endpoint \
--region=us-central1 \
--network=default \
--address=quickstart-address \
--target-service-attachment=${SERVICE_ATTACHMENT}
Создайте пользователя базы данных PostgreSQL для учетной записи службы, которую вы создали ранее, для доступа к базе данных.
gcloud alloydb users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
--cluster=quickstart-cluster \
--region=us-central1 \
--type=IAM_BASED \
--superuser=true
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" - Установите библиотеку Google Cloud Auth.
npm install google-auth-library
- Установите
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;
import {GoogleAuth} from 'google-auth-library';
const auth = new GoogleAuth({
scopes: ['https://www.googleapis.com/auth/alloydb.login'],
});
const pool = new Pool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: async () => {
return await auth.getAccessToken();
},
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.
Через несколько минут приложение должно предоставить вам URL-адрес для посещения.
Перейдите по URL-адресу, чтобы увидеть свое приложение в действии. Каждый раз, когда вы посещаете URL-адрес или обновляете страницу, вы увидите пять последних посещений, возвращаемых в формате JSON.
10. Поздравления
В этой лабораторной работе вы узнали, как:
- Создайте экземпляр AlloyDB (настроенный для использования Private Service Connect )
- Разверните приложение в Cloud Run, которое подключается к вашему экземпляру AlloyDB.
- Используйте Gemini Code Assist, чтобы добавить функциональность вашему приложению.
Очистить
Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий ресурсы, либо сохраните проект и удалите отдельные ресурсы. Если вы хотите удалить весь проект, вы можете запустить:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}