Informacje o tym ćwiczeniu (w Codelabs)
1. Omówienie
Cloud Run to w pełni zarządzana bezserwerowa platforma, która umożliwia uruchamianie bezstanowych kontenerów wywoływanych przez żądania HTTP. W tym Codelab pokażemy, jak połączyć aplikację Node.js w Cloud Run z bazą danych Cloud SQL dla PostgreSQL.
Czego się nauczysz
W tym module nauczysz się, jak:
- Tworzenie instancji Cloud SQL for PostgreSQL (skonfigurowanej do korzystania z funkcji Private Service Connect)
- Wdrażanie w Cloud Run aplikacji, która łączy się z bazą danych Cloud SQL
- Dodawanie funkcji do aplikacji za pomocą Gemini Code Assist
Czego się nauczysz
- Tworzenie instancji Cloud SQL for PostgreSQL (skonfigurowanej do korzystania z funkcji Private Service Connect)
- Wdrażanie w Cloud Run aplikacji, która łączy się z bazą danych Cloud SQL
- Dodawanie funkcji do aplikacji za pomocą Gemini Code Assist
2. Wymagania wstępne
- Jeśli nie masz jeszcze konta Google, utwórz je.
- Używasz konta osobistego, a nie służbowego lub szkolnego. Konta służbowe i szkolne mogą mieć ograniczenia, które uniemożliwiają włączenie interfejsów API potrzebnych w tym laboratorium.
3. Konfigurowanie projektu
- Zaloguj się w konsoli Google Cloud.
- Włącz rozliczenia w Cloud Console.
- Ukończenie tego ćwiczenia powinno kosztować mniej niż 1 USD w zasobach Cloud.
- Aby uniknąć dalszych opłat, możesz usunąć zasoby, wykonując czynności podane na końcu tego laboratorium.
- Nowi użytkownicy mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
- Utwórz nowy projekt lub użyj istniejącego.
4. Otwórz edytor Cloud Shell
- Otwórz Edytor Cloud Shell.
- Jeśli terminal nie pojawia się u dołu ekranu, otwórz go:
- Kliknij menu z 3 kreskami
- Kliknij Terminal.
- Kliknij Nowy terminal
.
- Kliknij menu z 3 kreskami
- W terminalu skonfiguruj projekt za pomocą tego polecenia:
- Format:
gcloud config set project [PROJECT_ID]
- Przykład:
gcloud config set project lab-project-id-example
- Jeśli nie pamiętasz identyfikatora projektu:
- Aby wyświetlić wszystkie identyfikatory projektów, użyj:
gcloud projects list | awk '/PROJECT_ID/{print $2}'
- Aby wyświetlić wszystkie identyfikatory projektów, użyj:
- Format:
- Jeśli pojawi się pytanie o autoryzację, kliknij Autoryzuj, aby kontynuować.
- Powinien wyświetlić się ten komunikat:
Jeśli widziszUpdated property [core/project].
WARNING
i pojawia się pytanieDo you want to continue (Y/N)?
, prawdopodobnie nieprawidłowo wpisano identyfikator projektu. NaciśnijN
, naciśnijEnter
i spróbuj ponownie uruchomić poleceniegcloud config set project
.
5. Włącz interfejsy API
Włącz w terminalu te interfejsy 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
Jeśli pojawi się pytanie o autoryzację, kliknij Autoryzuj, aby kontynuować.
Wykonanie tego polecenia może potrwać kilka minut, ale ostatecznie powinno wyświetlić komunikat podobny do tego:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
6. Konfigurowanie konta usługi
Utwórz i skonfiguruj konto usługi Google Cloud, które będzie używane przez Cloud Run, aby miało ono odpowiednie uprawnienia do nawiązywania połączeń z Cloud SQL.
- Aby utworzyć nowe konto usługi, uruchom polecenie
gcloud iam service-accounts create
w ten sposób:gcloud iam service-accounts create quickstart-service-account \
--display-name="Quickstart Service Account" - Aby dodać rolę Autor logów do utworzonego przed chwilą konta usługi Google Cloud, uruchom polecenie gcloud projects add-iam-policy-binding w ten sposób:
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. Tworzenie instancji Cloud SQL
- Utwórz zasadę połączenia z usługą, aby zezwolić na połączenia sieciowe z Cloud Run do Cloud SQL za pomocą funkcji 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 - Generowanie unikalnego hasła do bazy danych
export DB_PASSWORD=$(openssl rand -base64 20)
- Aby utworzyć instancję Cloud SQL, uruchom polecenie
gcloud sql instances create
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
Wykonanie tego polecenia może potrwać kilka minut.
- Aby utworzyć bazę danych Cloud SQL w ramach usługi
quickstart-instance
, uruchom poleceniegcloud sql databases create
.gcloud sql databases create quickstart_db \
--instance=quickstart-instance
8. Przygotowanie aplikacji
Przygotuj aplikację Node.js, która odpowiada na żądania HTTP.
- W Cloud Shell utwórz nowy katalog o nazwie
helloworld
i przejdź do tego katalogu:mkdir helloworld
cd helloworld - Inicjowanie pliku
package.json
jako modułu.npm init -y
npm pkg set type="module"
npm pkg set main="index.mjs"
npm pkg set scripts.start="node index.mjs" - Zainstaluj
pg
, aby korzystać z bazy danych PostgreSQL.npm install pg
- Zainstaluj Express, aby akceptować przychodzące żądania HTTP.
npm install express
- Utwórz plik
index.mjs
z kodem aplikacji. Ten kod może:- Akceptowanie żądań HTTP
- Łączenie z bazą danych
- Zapisywanie czasu żądania HTTP w bazie danych
- Zwraca czasy ostatnich 5 żądań
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
Ten kod tworzy podstawowy serwer WWW, który nasłuchuje na porcie określonym przez zmienną środowiskową PORT. Aplikacja jest teraz gotowa do wdrożenia.
9. Wdrażanie aplikacji w Cloud Run
- Aby dodać rolę Użytkownik sieci do konta usługi Cloud Run dla tworzonej usługi Cloud Run, wykonaj polecenie gcloud projects add-iam-policy-binding w ten sposób:
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"
- Aby wdrożyć aplikację do Cloud Run, uruchom to polecenie:
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 - Jeśli pojawi się taka prośba, naciśnij
Y
iEnter
, aby potwierdzić, że chcesz kontynuować:Do you want to continue (Y/n)? Y
Po kilku minutach aplikacja powinna wyświetlić adres URL, który należy otworzyć.
Otwórz adres URL, aby zobaczyć aplikację w akcji. Za każdym razem, gdy otworzysz adres URL lub odświeżysz stronę, zobaczysz 5 najnowszych wizyt zwróconych w formacie JSON.
10. Gratulacje
Z tego modułu nauczysz się:
- Tworzenie instancji Cloud SQL for PostgreSQL (skonfigurowanej do korzystania z funkcji Private Service Connect)
- Wdrażanie w Cloud Run aplikacji, która łączy się z bazą danych Cloud SQL
- Dodawanie funkcji do aplikacji za pomocą Gemini Code Assist
Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, możesz usunąć projekt zawierający te zasoby lub zachować projekt i usunąć poszczególne zasoby. Jeśli chcesz usunąć cały projekt, możesz uruchomić:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}