1. Omówienie
W tym module zintegrujesz bezserwerowe bazy danych(Spanner i Firestore) z aplikacjami(Go i Node.js) uruchomionymi w Cloud Run. Aplikacja Cymbal Eats zawiera wiele usług działających w Cloud Run. W kolejnych krokach skonfigurujesz usługi tak, aby korzystały z relacyjnej bazy danych Cloud Spanner i z Cloud Firestore – bazy danych dokumentów NoSQL. Wykorzystanie usług bezserwerowych do obsługi poziomu danych i środowiska wykonawczego aplikacji pozwala na odizolowanie całego zarządzania infrastrukturą i skupienie się na tworzeniu aplikacji, zamiast martwić się o pracę.
2. Czego się nauczysz
Z tego modułu nauczysz się:
- Zintegruj usługę Spanner
- Włącz usługi zarządzane Spannera
- Integracja z kodem
- Wdrażanie kodu łączącego się z usługą Spanner
- Integracja Firestore
- Włącz usługi zarządzane Firestore
- Integracja z kodem
- Wdrażanie kodu łączącego się z Firestore
3. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.
- Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zaktualizować.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić (po jego ustawieniu nie można go zmienić). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń w Codelabs musisz podać swój identyfikator projektu (zwykle identyfikowany jako
PROJECT_ID
). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Po wykonaniu tej czynności nie można jej już zmienić. Pozostanie ona przez cały czas trwania projektu. - Jest jeszcze trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nic nie kosztuje. Aby wyłączyć zasoby w celu uniknięcia naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Skonfiguruj środowisko
- Tworzenie zmiennej identyfikatora projektu
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export SPANNER_INSTANCE=inventory-instance
export SPANNER_DB=inventory-db
export REGION=us-east1
export SPANNER_CONNECTION_STRING=projects/$PROJECT_ID/instances/$SPANNER_INSTANCE/databases/$SPANNER_DB
- Włączanie interfejsów API usług Spanner, Cloud Run, Cloud Build i Artifact Registry
gcloud services enable \
compute.googleapis.com \
spanner.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
firestore.googleapis.com \
appengine.googleapis.com \
artifactregistry.googleapis.com
- Klonowanie repozytorium
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
- Przejdź do katalogu
cd cymbal-eats/inventory-service/spanner
4. Tworzenie i konfigurowanie instancji usługi Spanner
Spanner to relacyjna baza danych backendu usług inwentaryzacji. W kolejnych krokach utworzysz instancję, bazę danych i schemat usługi Spanner.
Utwórz instancję
- Tworzenie instancji Cloud Spanner
gcloud spanner instances create $SPANNER_INSTANCE --config=regional-${REGION} \
--description="Cymbal Menu Inventory" --nodes=1
Przykładowe dane wyjściowe
Creating instance...done.
- Sprawdzanie, czy instancja Spannera jest prawidłowo skonfigurowana
gcloud spanner instances list
Przykładowe dane wyjściowe
NAME: inventory-instance DISPLAY_NAME: Cymbal Menu Inventory CONFIG: regional-us-east1 NODE_COUNT: 1 PROCESSING_UNITS: 100 STATE: READY
Tworzenie bazy danych i schematu
Utwórz nową bazę danych i użyj standardowego języka definiowania danych (DDL) w standardowej wersji Google SQL, aby utworzyć schemat bazy danych.
- Tworzenie pliku DDL
echo "CREATE TABLE InventoryHistory (ItemRowID STRING (36) NOT NULL, ItemID INT64 NOT NULL, InventoryChange INT64, Timestamp TIMESTAMP) PRIMARY KEY(ItemRowID)" >> table.ddl
- Tworzenie bazy danych Spannera
gcloud spanner databases create $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl-file=table.ddl
Przykładowe dane wyjściowe
Creating database...done.
Sprawdzanie stanu i schematu bazy danych
- Wyświetlanie stanu bazy danych
gcloud spanner databases describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE
Przykładowe dane wyjściowe
createTime: '2022-04-22T15:11:33.559300Z' databaseDialect: GOOGLE_STANDARD_SQL earliestVersionTime: '2022-04-22T15:11:33.559300Z' encryptionInfo: - encryptionType: GOOGLE_DEFAULT_ENCRYPTION name: projects/cymbal-eats-7-348013/instances/menu-inventory/databases/menu-inventory state: READY versionRetentionPeriod: 1h
- Wyświetl schemat bazy danych
gcloud spanner databases ddl describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE
Przykładowe dane wyjściowe
CREATE TABLE InventoryHistory ( ItemRowID STRING(36) NOT NULL, ItemID INT64 NOT NULL, InventoryChange INT64, TimeStamp TIMESTAMP, ) PRIMARY KEY(ItemRowID);
5. Integracja usługi Spanner
W tej sekcji dowiesz się, jak zintegrować usługę Spanner z aplikacją. Dodatkowo SQL Spanner udostępnia biblioteki klienta, sterowniki JDBC, sterowniki R2DBC, interfejsy API typu R2DBC i interfejsy RPC API, które umożliwiają integrację usługi Spanner z dowolną aplikacją.
W następnej sekcji użyjesz biblioteki klienta w języku Go do instalowania, uwierzytelniania i modyfikowania danych w usłudze Spanner.
Instalowanie biblioteki klienta
Biblioteka klienta Cloud Spanner ułatwia integrację z Cloud Spanner dzięki automatycznemu korzystaniu z domyślnych danych uwierzytelniających aplikacji (ADC) do wyszukiwania danych logowania do konta usługi.
Konfigurowanie uwierzytelniania
Interfejs wiersza poleceń Google Cloud i biblioteki klienta Google Cloud automatycznie wykrywają, czy działają w Google Cloud, i używają środowiska wykonawczego konta usługi bieżącej wersji Cloud Run. Ta strategia nosi nazwę domyślnych danych logowania aplikacji i pozwala na przenoszenie kodu w wielu środowiskach.
Najlepiej jednak utworzyć tożsamość dedykowaną przez przypisanie jej do konta usługi zarządzanego przez użytkownika zamiast do domyślnego konta usługi.
- Przypisz do konta usługi rolę administratora bazy danych Spanner
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/spanner.databaseAdmin"
Przykładowe dane wyjściowe
Updated IAM policy for project [cymbal-eats-6422-3462]. [...]
Korzystanie z bibliotek klienta
Biblioteki klienta Spannera ułatwiają integrację z usługą Spanner i są dostępne w wielu popularnych językach programowania.
Tworzenie klienta usługi Spanner
Klient Spannera jest klientem umożliwiającym odczytywanie i zapisywanie danych w bazie danych Cloud Spanner. Z klienta można korzystać jednocześnie, z wyjątkiem metody Close.
Fragment kodu poniżej tworzy klienta Spannera
main.go
var dataClient *spanner.Client ... dataClient, err = spanner.NewClient(ctx, databaseName)
Można wyobrazić go sobie jako połączenie z bazą danych – wszystkie interakcje z Cloud Spanner muszą przechodzić przez klienta. Zwykle tworzysz klienta podczas uruchamiania aplikacji, a potem używasz go do odczytywania, zapisywania i realizowania transakcji. Każdy klient używa zasobów w usłudze Cloud Spanner.
Modyfikowanie danych
Dane do bazy danych Spannera można wstawiać, aktualizować i usuwać na kilka sposobów. Poniżej znajdziesz listę dostępnych metod.
W tym module do modyfikowania danych w usłudze Spanner użyjesz mutacji.
Mutacje w usłudze Spanner
Mutacja to kontener na potrzeby operacji mutacji. Mutacja reprezentuje sekwencję wstawienia, aktualizacji i usunięć, które Cloud Spanner stosuje atomowo do różnych wierszy i tabel w bazie danych Cloud Spanner.
main.go
m := []*spanner.Mutation{} m = append(m, spanner.Insert( "inventoryHistory", inventoryHistoryColumns, []interface{}{uuid.New().String(), element.ItemID, element.InventoryChange, time.Now()}))
Fragment kodu wstawia nowy wiersz do tabeli historii zasobów reklamowych.
Wdrażanie i testowanie
Usługa Spanner jest już skonfigurowana i sprawdziłeś(-aś) kluczowe elementy kodu, aby wdrożyć aplikację w Cloud Run.
Wdrażanie aplikacji w Cloud Run
Cloud Run może automatycznie kompilować, przekazywać i wdrażać Twój kod za pomocą jednego polecenia. W tym poleceniu wywołasz polecenie deploy
w usłudze run
, przesyłając zmienne używane przez uruchomioną aplikację, np. utworzone wcześniej SPANNER_CONNECTION_STRING.
- Kliknij Otwórz terminal.
- Wdrażanie usługi inwentaryzacji w Cloud Run
gcloud run deploy inventory-service \
--source . \
--region $REGION \
--update-env-vars SPANNER_CONNECTION_STRING=$SPANNER_CONNECTION_STRING \
--allow-unauthenticated \
--project=$PROJECT_ID \
--quiet
Przykładowe dane wyjściowe
Service [inventory-service] revision [inventory-service-00001-sug] has been deployed and is serving 100 percent of traffic. Service URL: https://inventory-service-ilwytgcbca-uk.a.run.app
- Zapisywanie adresu URL usługi
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
Testowanie aplikacji Cloud Run
Wstawianie elementu
- W Cloud Shell wpisz to polecenie.
POST_URL=$INVENTORY_SERVICE_URL/updateInventoryItem
curl -i -X POST ${POST_URL} \
--header 'Content-Type: application/json' \
--data-raw '[
{
"itemID": 1,
"inventoryChange": 5
}
]'
Przykładowe dane wyjściowe
HTTP/2 200 access-control-allow-origin: * content-type: application/json x-cloud-trace-context: 10c32f0863d26521497dc26e86419f13;o=1 date: Fri, 22 Apr 2022 21:41:38 GMT server: Google Frontend content-length: 2 OK
Tworzenie zapytania dotyczącego elementu
- Wysyłanie zapytania do usługi inwentaryzacji
GET_URL=$INVENTORY_SERVICE_URL/getAvailableInventory
curl -i ${GET_URL}
Przykładowa odpowiedź
HTTP/2 200 access-control-allow-origin: * content-type: text/plain; charset=utf-8 x-cloud-trace-context: b94f921e4c2ae90210472c88eb05ace8;o=1 date: Fri, 22 Apr 2022 21:45:50 GMT server: Google Frontend content-length: 166 [{"ItemID":1,"Inventory":5}]
6. Pojęcia związane z usługą Spanner
Cloud Spanner wysyła zapytania do swoich baz danych przy użyciu deklaratywnych instrukcji SQL. Instrukcje SQL wskazują, czego oczekuje użytkownik, bez opisywania sposobu uzyskania wyników.
- Wpisz w terminalu to polecenie, aby wysłać zapytanie dotyczące utworzonego wcześniej rekordu do tabeli.
gcloud spanner databases execute-sql $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--sql='SELECT * FROM InventoryHistory WHERE ItemID=1'
Przykładowe dane wyjściowe
ItemRowID: 1
ItemID: 1
InventoryChange: 3
Timestamp:
Plany wykonywania zapytań
Plan wykonywania zapytania to seria kroków, które usługa Spanner stosuje do uzyskania wyników. Istnieje kilka sposobów uzyskania wyników konkretnej instrukcji SQL. Plany wykonywania zapytań są dostępne w konsoli i bibliotekach klienta. Aby sprawdzić, jak Spanner obsługuje zapytania SQL:
- W konsoli otwórz stronę instancji Cloud Spanner.
- Otwórz instancje Cloud Spanner
- Kliknij nazwę instancji Cloud Spanner. W sekcji baz danych wybierz bazę danych, której ma dotyczyć zapytanie.
- Kliknij Zapytanie.
- Wpisz to zapytanie w edytorze zapytań
SELECT * FROM InventoryHistory WHERE ItemID=1
- Kliknij URUCHOM
- Kliknij WYJAŚNIENIE
W konsoli Cloud wyświetli się plan wykonania zapytania.
Optymalizator zapytań
Optymalizator zapytań Cloud Spanner porównuje alternatywne plany wykonania i wybiera najskuteczniejszy z nich. Z czasem optymalizator zapytań będzie ewoluować, poszerzając możliwości wyboru w planie wykonywania zapytań i poprawiając dokładność szacunków uwzględniających te wybory, co prowadzi do wydajniejszych planów wykonywania zapytań.
Cloud Spanner wdraża aktualizacje optymalizatora jako nowe wersje optymalizatora zapytań. Domyślnie każda baza danych zaczyna używać najnowszej wersji optymalizatora nie wcześniej niż 30 dni po wydaniu danej wersji.
Aby wyświetlić wersję używaną przy uruchamianiu zapytania w gcloud, ustaw flagę –query-mode na PROFILE
- Wpisz następujące polecenie, aby wyświetlić wersję optymalizatora
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'
Przykładowe dane wyjściowe
TOTAL_ELAPSED_TIME: 6.18 msecs CPU_TIME: 5.17 msecs ROWS_RETURNED: 1 ROWS_SCANNED: 1 OPTIMIZER_VERSION: 3 RELATIONAL Distributed Union (1 execution, 0.11 msecs total latency) subquery_cluster_node: 1 | +- RELATIONAL Distributed Union | (1 execution, 0.09 msecs total latency) | call_type: Local, subquery_cluster_node: 2 | | | \- RELATIONAL Serialize Result | (1 execution, 0.08 msecs total latency) | | | +- RELATIONAL Scan | | (1 execution, 0.08 msecs total latency) | | Full scan: true, scan_target: InventoryHistory, scan_type: TableScan | | | | | +- SCALAR Reference | | | ItemRowID | | | | | +- SCALAR Reference | | | ItemID | | | | | +- SCALAR Reference | | | InventoryChange | | | | | \- SCALAR Reference | | Timestamp | | | +- SCALAR Reference | | $ItemRowID | | | +- SCALAR Reference | | $ItemID | | | +- SCALAR Reference | | $InventoryChange | | | \- SCALAR Reference | $Timestamp | \- SCALAR Constant true ItemRowID: 1 ItemID: 1 InventoryChange: 3 Timestamp:
Zaktualizuj wersję optymalizatora
Najnowsza wersja w chwili rozpoczęcia tego modułu to 4. Następnie zaktualizujesz tabelę Spanner, aby używała wersji 4 na potrzeby optymalizatora zapytań.
- Aktualizacja optymalizatora
gcloud spanner databases ddl update $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl='ALTER DATABASE InventoryHistory
SET OPTIONS (optimizer_version = 4)'
Przykładowe dane wyjściowe
Schema updating...done.
- Wpisz następujące polecenie, aby wyświetlić aktualizację wersji optymalizatora
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'
Przykładowe dane wyjściowe
TOTAL_ELAPSED_TIME: 8.57 msecs CPU_TIME: 8.54 msecs ROWS_RETURNED: 1 ROWS_SCANNED: 1 OPTIMIZER_VERSION: 4 [...]
Wizualizacja wersji optymalizatora zapytań w narzędziu Metrics Explorer
W konsoli Cloud możesz użyć narzędzia Metrics Explorer, aby zwizualizować liczbę zapytań dla instancji bazy danych. Możesz sprawdzić, która wersja optymalizatora jest używana w każdej bazie danych.
- W konsoli Cloud przejdź do usługi Monitoring i w menu po lewej stronie wybierz Metrics Explorer.
- W polu Typ zasobu wybierz instancję Cloud Spanner.
- W polu Dane wybierz Liczba zapytań i kliknij Zastosuj.
- W polu Pogrupuj według wybierz bazę danych, wersję optymalizatora i stan.
7. Tworzenie i konfigurowanie bazy danych Firestore
Firestore to baza danych dokumentów NoSQL zaprojektowana pod kątem automatycznego skalowania, wysokiej wydajności i łatwego tworzenia aplikacji. Chociaż interfejs Firestore ma wiele tych samych funkcji co tradycyjne bazy danych, baza danych NoSQL różni się od nich opisem relacji między obiektami danych.
Poniżej znajdziesz instrukcje tworzenia aplikacji Cloud Run usługi porządkowania przy użyciu Firestore. Przed rozpoczęciem zamówienia usługa porządkowania wywołuje usługę zasobów utworzoną w poprzedniej sekcji, aby wysłać zapytanie do bazy danych Spannera. Dzięki tej usłudze masz pewność, że w asortymencie dostępne są wystarczające zasoby reklamowe i że zamówienie będzie mogło zostać zrealizowane.
8. Pojęcia związane z Firestore
Model danych
Baza danych Firestore składa się z kolekcji i dokumentów.
Dokumenty
Każdy dokument zawiera zestaw par klucz-wartość. Usługa Firestore jest zoptymalizowana pod kątem przechowywania dużych kolekcji małych dokumentów.
Kolekcje
Wszystkie dokumenty musisz przechowywać w kolekcjach. Dokumenty mogą zawierać podkolekcje i zagnieżdżone obiekty, w tym pola podstawowe, takie jak ciągi znaków, lub obiekty złożone (np. listy).
Tworzenie bazy danych Firestore
- Tworzenie bazy danych Firestore
gcloud firestore databases create --location=$REGION
Przykładowe dane wyjściowe
Success! Selected Google Cloud Firestore Native database for cymbal-eats-6422-3462
9. Integracja Firestore z aplikacją
W tej sekcji zaktualizujesz konto usługi, dodasz konta usługi dostępu do Firestore, sprawdzisz i wdrożysz reguły zabezpieczeń Firestore oraz zobaczysz, jak dane są modyfikowane w Firestore.
Konfigurowanie uwierzytelniania
- Przypisz rolę użytkownika Datastore do konta usługi
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/datastore.user"
Przykładowe dane wyjściowe
Updated IAM policy for project [cymbal-eats-6422-3462].
Reguły zabezpieczeń Firestore
Reguły zabezpieczeń zapewniają kontrolę dostępu i weryfikację danych w ekspresywny, ale prosty format.
- Przejdź do katalogu order-service/starter-code
cd ~/cymbal-eats/order-service
- Otwórz plik Firestore.rules w edytorze chmury
cat firestore.rules
firestore.rules,
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { ⇐ All database match /{document=**} { ⇐ All documents allow read: if true; ⇐ Allow reads } match /{document=**} { allow write: if false; ⇐ Deny writes } } }
Ostrzeżenie: najlepiej jest ograniczyć dostęp do miejsca na dane Firestore. Na potrzeby tego modułu dozwolone są wszystkie odczyty. Nie jest to zalecana konfiguracja produkcyjna.
Włącz usługi zarządzane Firestore
- Kliknij Otwórz terminal.
- Utwórz plik .firebaserc z bieżącym identyfikatorem projektu. Ustawienia celów wdrożenia są przechowywane w pliku .firebaserc w katalogu projektu.
firebaserc.tmpl
sed "s/PROJECT_ID/$PROJECT_ID/g" firebaserc.tmpl > .firebaserc
- Pobierz plik binarny Firebase
curl -sL https://firebase.tools | upgrade=true bash
Przykładowe dane wyjściowe
-- Checking for existing firebase-tools on PATH... Your machine already has firebase-tools@10.7.0 installed. Nothing to do. -- All done!
- Wdróż reguły Firestore.
firebase deploy
Przykładowe dane wyjściowe
=== Deploying to 'cymbal-eats-6422-3462'... i deploying firestore i cloud.firestore: checking firestore.rules for compilation errors... ✔ cloud.firestore: rules file firestore.rules compiled successfully i firestore: uploading rules firestore.rules... ✔ firestore: released rules firestore.rules to cloud.firestore ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/cymbal-eats-6422-3462/overview
Modyfikowanie danych
Kolekcje i dokumenty są tworzone bezpośrednio w Firestore. Po prostu przypisz dane do dokumentu w kolekcji. Jeśli kolekcja lub dokument nie istnieje, Firestore ją utworzy.
Dodaj dane do Firestore
Dane w Cloud Firestore można zapisywać na kilka sposobów:
- Służy do ustawiania danych dokumentu w kolekcji, jednoznacznego określenia jego identyfikatora.
- Dodaj nowy dokument do kolekcji. W takim przypadku Cloud Firestore automatycznie wygeneruje identyfikator dokumentu.
- Utwórz pusty dokument z automatycznie generowanym identyfikatorem i przypisz do niego dane później.
W następnej sekcji dowiesz się, jak utworzyć dokument za pomocą metody ustawiania.
Ustaw dokument
Aby utworzyć dokument, użyj metody set()
. W przypadku metody set()
musisz określić identyfikator tworzonego dokumentu.
Przyjrzyj się poniższym fragmentowi kodu.
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.set({ orderNumber: 123, name: Anne, address: 555 Bright Street, city: Mountain View, state: CA, zip: 94043, orderItems: [id: 1], status: 'New' });
Ten kod utworzy dokument określający wygenerowany przez użytkownika identyfikator dokumentu 123. Aby usługa Firestore wygenerowała identyfikator w Twoim imieniu, użyj metody add()
lub create()
.
Aktualizowanie dokumentów
Metoda aktualizacji update()
umożliwia aktualizowanie niektórych pól dokumentu bez zastępowania całego dokumentu.
We fragmencie kodu poniżej kolejność aktualizacji kodu to 123
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.update(name: "Anna");
Usuwanie dokumentów
W Firestore możesz usuwać z dokumentu kolekcje, dokumenty lub określone pola. Aby usunąć dokument, użyj metody delete()
.
Ten fragment kodu usuwa zamówienie 123.
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.delete();
10. Wdrażanie i testowanie
W tej sekcji wdrożysz aplikację w Cloud Run i przetestujesz metody tworzenia, aktualizowania i usuwania.
Wdrażanie aplikacji w Cloud Run
- Zapisz adres URL w zmiennej INVENTORY_SERVICE_URL, aby przeprowadzić integrację z usługą Inventory
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
- Wdrażanie usługi składania zamówień
gcloud run deploy order-service \
--source . \
--platform managed \
--region $REGION \
--allow-unauthenticated \
--project=$PROJECT_ID \
--set-env-vars=INVENTORY_SERVICE_URL=$INVENTORY_SERVICE_URL \
--quiet
Przykładowe dane wyjściowe
[...] Done. Service [order-service] revision [order-service-00001-qot] has been deployed and is serving 100 percent of traffic. Service URL: https://order-service-3jbm3exegq-uk.a.run.app
Testowanie aplikacji Cloud Run
Utwórz dokument
- Zapisywanie adresu URL aplikacji obsługującej zamówienia w zmiennej do testowania
ORDER_SERVICE_URL=$(gcloud run services describe order-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
- Tworzenie żądania zamówienia i publikowanie nowego zamówienia w bazie danych Firestore
curl --request POST $ORDER_SERVICE_URL/order \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Jane Doe",
"email": "Jane.Doe-cymbaleats@gmail.com",
"address": "123 Maple",
"city": "Buffalo",
"state": "NY",
"zip": "12346",
"orderItems": [
{
"id": 1
}
]
}'
Przykładowe dane wyjściowe
{"orderNumber":46429}
Zapisz numer zamówienia na później
export ORDER_NUMBER=<value_from_output>
Wyświetl wyniki
Wyświetl wyniki w Firestore
- Otwórz konsolę Firestore.
- Kliknij Dane.
Aktualizowanie dokumentu
Przesłane zamówienie nie zawierało ilości.
- Zaktualizuj rekord i dodaj parę klucz-wartość ilości
curl --location -g --request PATCH $ORDER_SERVICE_URL/order/${ORDER_NUMBER} \
--header 'Content-Type: application/json' \
--data-raw '{
"orderItems": [
{
"id": 1,
"quantity": 1
}
]
}'
Przykładowe dane wyjściowe
{"status":"success"}
Wyświetl wyniki
Wyświetl wyniki w Firestore
- Otwórz konsolę Firestore.
- Kliknij Dane.
Usuwanie dokumentu
- Usuń element 46429 z kolekcji zamówień Firestore
curl --location -g --request DELETE $ORDER_SERVICE_URL/order/${ORDER_NUMBER}
Wyświetl wyniki
- Otwórz konsolę Firestore.
- Kliknij Dane.
11. Gratulacje!
Gratulacje! Moduł ukończony.
Co dalej:
Poznaj inne ćwiczenia z programowania Cymbal Eats:
- Aktywowanie przepływów pracy w Cloud za pomocą Eventarc
- Aktywowanie przetwarzania zdarzeń z Cloud Storage
- Łączenie z Private Cloud SQL z poziomu Cloud Run
- Bezpieczna aplikacja bezserwerowa z serwerem proxy identyfikującym tożsamość (IAP)
- Aktywowanie zadań Cloud Run za pomocą usługi Cloud Scheduler
- Bezpieczne wdrażanie w Cloud Run
- Zabezpieczanie ruchu przychodzącego w Cloud Run
- Łączenie z prywatnym AlloyDB z Autopilota w GKE
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.
Usuwam projekt
Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby samouczka.