1. Przegląd
Oprogramowanie sprzęgające Cloud SQL Node.js to najprostszy sposób na bezpieczne połączenie aplikacji Node.js z bazą danych Cloud SQL. Cloud Run to w pełni zarządzana platforma bezserwerowa, która umożliwia uruchamianie bezstanowych kontenerów wywoływanych przez żądania HTTP. W tym laboratorium dowiesz się, jak bezpiecznie połączyć aplikację Node.js w Cloud Run z bazą danych Cloud SQL for PostgreSQL za pomocą konta usługi z uwierzytelnianiem IAM.
Czego się nauczysz
W tym module nauczysz się:
- Tworzenie instancji Cloud SQL dla bazy danych PostgreSQL
- Wdrażanie aplikacji Node.js w Cloud Run
- Łączenie aplikacji z bazą danych za pomocą biblioteki Cloud SQL Node.js Connector
Wymagania wstępne
- Zakładamy, że użytkownik zna środowiska konsoli Cloud i Cloud Shell.
2. Zanim zaczniesz
Konfigurowanie projektu w Google Cloud
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Google, musisz je utworzyć.



- Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle jest on oznaczony jako
PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i będzie obowiązywać przez cały czas trwania projektu. - Warto wiedzieć, że istnieje też trzecia wartość, czyli numer projektu, z której korzystają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Konfiguracja środowiska
Aktywuj Cloud Shell, klikając ikonę po prawej stronie paska wyszukiwania.

W Cloud Shell włącz interfejsy API:
gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
run.googleapis.com artifactregistry.googleapis.com \
cloudbuild.googleapis.com servicenetworking.googleapis.com
Jeśli pojawi się prośba o autoryzację, kliknij „Autoryzuj”, aby kontynuować.

Wykonanie tego polecenia może potrwać kilka minut, ale powinno ostatecznie wyświetlić komunikat o sukcesie podobny do tego:
Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
3. 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 odpowiednie uprawnienia do łączenia się z Cloud SQL.
- Aby utworzyć nowe konto usługi, uruchom polecenie
gcloud iam service-accounts createw ten sposób:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account" - Aby dodać do utworzonego właśnie konta usługi Google Cloud rolę Klient Cloud SQL, uruchom polecenie gcloud projects add-iam-policy-binding w ten sposób: W Cloud Shell wyrażenie
${GOOGLE_CLOUD_PROJECT}zostanie zastąpione nazwą Twojego projektu. Możesz też dokonać wymiany ręcznie, jeśli wolisz.gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.client" - Aby dodać rolę Użytkownik instancji Cloud SQL do utworzonego właśnie 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/cloudsql.instanceUser" - Aby dodać rolę Zapisujący dzienniki 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"
4. Konfigurowanie Cloud SQL
Uruchom polecenie gcloud sql instances create, aby utworzyć instancję Cloud SQL.
--database-version: typ i wersja silnika bazy danych. Jeśli nie zostanie określony, używana będzie wartość domyślna interfejsu API. Aktualnie dostępne wersje znajdziesz w dokumentacji gcloud dotyczącej wersji bazy danych.--cpu: liczba rdzeni, które mają być dostępne na maszynie.--memory: liczba całkowita wskazująca, ile pamięci ma mieć maszyna. Należy podać jednostkę rozmiaru (np. 3072 MB lub 9 GB). Jeśli nie podasz jednostek, przyjmuje się GB.--region: regionalna lokalizacja instancji (np. us-central1, asia-east1, us-east1);--database-flags: umożliwia ustawianie flag. W tym przypadku włączamycloudsql.iam_authentication, aby umożliwić Cloud Run łączenie się z Cloud SQL za pomocą utworzonego wcześniej konta usługi.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
Wykonanie tego polecenia może potrwać kilka minut.
Aby utworzyć bazę danych Cloud SQL w quickstart-instance, uruchom polecenie gcloud sql databases create.
gcloud sql databases create quickstart_db \
--instance=quickstart-instance
Utwórz użytkownika bazy danych PostgreSQL dla utworzonego wcześniej konta usługi, aby uzyskać dostęp do bazy danych.
gcloud sql users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
--instance=quickstart-instance \
--type=cloud_iam_service_account \
--database-roles=postgres
Ostrzeżenie: nie używaj --database-roles=postgres w aplikacjach produkcyjnych. Używamy tego, aby zapewnić uprawnienia potrzebne do programowego tworzenia i usuwania tabel na potrzeby kodu w tym module.
5. Przygotowywanie aplikacji
Przygotuj aplikację Node.js, która odpowiada na żądania HTTP.
- W Cloud Shell utwórz nowy katalog o nazwie
helloworld, a następnie przejdź do tego katalogu:mkdir helloworld cd helloworld - Inicjowanie pliku
package.jsonjako 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 zależność łącznika Cloud SQL Node.js.
npm install @google-cloud/cloud-sql-connector - 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.mjsz kodem aplikacji. Ten kod może:- Akceptowanie żądań HTTP
- Łączenie z bazą danych
- Przechowywanie czasu żądania HTTP w bazie danych
- Zwraca czasy ostatnich 5 żądań
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
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.
6. Wdrażanie aplikacji Cloud Run
Aby wdrożyć aplikację w Cloud Run, uruchom to polecenie:
--region: regionalna lokalizacja instancji (np. us-central1, asia-east1, us-east1);--source: kod źródłowy do wdrożenia. W tym przypadku.odnosi się do kodu źródłowego w bieżącym folderzehelloworld.--set-env-vars: ustawia zmienne środowiskowe używane przez aplikację do kierowania jej do bazy danych Cloud SQL.--service-account: wiąże wdrożenie Cloud Run z kontem usługi z uprawnieniami do łączenia się z bazą danych Cloud SQL utworzoną na początku tego Codelabu.--allow-unauthenticated: umożliwia nieuwierzytelnione żądania, dzięki czemu aplikacja jest dostępna w internecie.
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
Jeśli pojawi się prośba, naciśnij y i Enter, aby potwierdzić, że chcesz kontynuować:
Do you want to continue (Y/n)? y
Po kilku minutach aplikacja powinna podać adres URL, który możesz otworzyć.
Otwórz adres URL, aby zobaczyć działanie aplikacji. Za każdym razem, gdy otworzysz adres URL lub odświeżysz stronę, zobaczysz 5 ostatnich wizyt zwróconych w formacie JSON.
7. Gratulacje
Masz wdrożoną w Cloud Run aplikację Node.js, która może łączyć się z bazą danych PostgreSQL działającą w Cloud SQL.
Omówione zagadnienia:
- Tworzenie bazy danych Cloud SQL for PostgreSQL
- Wdrażanie aplikacji Node.js w Cloud Run
- Łączenie aplikacji z Cloud SQL za pomocą łącznika Cloud SQL Node.js
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ć to polecenie:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}