Połącz Cloud Run z Firebase Hosting, aby generować i udostępniać treści dynamiczne lub tworzyć interfejsy API REST jako mikrousługi.
Za pomocą Cloud Run możesz wdrożyć aplikację spakowaną w obrazie kontenera. Następnie, korzystając z Hostingu Firebase, możesz kierować żądania HTTPS w celu uruchomienia aplikacji kontenerowej.
- Cloud Run obsługuje kilka języków (w tym Go, Node.js, Python i Java), co zapewnia elastyczność w korzystaniu z wybranego języka programowania i platformy.
- Cloud Run automatycznie i poziomo skaluje obraz kontenera, aby obsłużyć otrzymane żądania, a następnie skaluje w dół, gdy zapotrzebowanie spada.
- Płacisz tylko za procesor, pamięć i sieć zużyte podczas obsługi żądań.
Na przykład przypadki użycia i przykłady dotyczące Cloud Run zintegrowanego z Firebase Hosting znajdziesz w naszym przeglądzie rozwiązań bezserwerowych .
W tym przewodniku dowiesz się, jak:
- Napisz prostą aplikację Hello World
- Konteneryzuj aplikację i prześlij ją do Container Registry
- Wdróż obraz kontenera w Cloud Run
- Kieruj żądania hostingu do swojej aplikacji kontenerowej
Pamiętaj, że aby poprawić wydajność udostępniania treści dynamicznych, możesz opcjonalnie dostroić ustawienia pamięci podręcznej .
Zanim zaczniesz
Przed użyciem Cloud Run musisz wykonać kilka początkowych zadań, w tym skonfigurować konto rozliczeniowe Cloud, włączyć interfejs Cloud Run API i zainstalować narzędzie wiersza poleceń gcloud
.
Skonfiguruj rozliczenia dla swojego projektu
Cloud Run oferuje bezpłatny limit użytkowania , ale aby móc korzystać z Cloud Run lub go wypróbować, nadal musisz mieć konto rozliczeniowe Cloud powiązane z projektem Firebase.
Włącz interfejs API i zainstaluj pakiet SDK
Włącz interfejs Cloud Run API w konsoli Google API:
Otwórz stronę Cloud Run API w konsoli Google API.
Po wyświetleniu monitu wybierz projekt Firebase.
Kliknij Włącz na stronie Cloud Run API.
Zainstaluj i zainicjuj pakiet Cloud SDK.
Sprawdź, czy narzędzie
gcloud
jest skonfigurowane dla prawidłowego projektu:gcloud config list
Krok 1 : Napisz przykładową aplikację
Pamiętaj, że oprócz języków pokazanych w poniższym przykładzie Cloud Run obsługuje wiele innych języków .
Iść
Utwórz nowy katalog o nazwie
helloworld-go
, a następnie zmień na niego katalog:mkdir helloworld-go
cd helloworld-go
Utwórz nowy plik o nazwie
helloworld.go
, a następnie dodaj następujący kod:Ten kod tworzy podstawowy serwer WWW, który nasłuchuje na porcie zdefiniowanym przez zmienną środowiskową
PORT
.
Twoja aplikacja jest ukończona i gotowa do konteneryzacji i przesłania do Container Registry.
Node.js
Utwórz nowy katalog o nazwie
helloworld-nodejs
, a następnie zmień na niego katalog:mkdir helloworld-nodejs
cd helloworld-nodejs
Utwórz plik
package.json
z następującą zawartością:Utwórz nowy plik o nazwie
index.js
, a następnie dodaj następujący kod:Ten kod tworzy podstawowy serwer WWW, który nasłuchuje na porcie zdefiniowanym przez zmienną środowiskową
PORT
.
Twoja aplikacja jest ukończona i gotowa do konteneryzacji i przesłania do Container Registry.
Pyton
Utwórz nowy katalog o nazwie
helloworld-python
, a następnie zmień na niego katalog:mkdir helloworld-python
cd helloworld-python
Utwórz nowy plik o nazwie
app.py
, a następnie dodaj następujący kod:Ten kod tworzy podstawowy serwer WWW, który nasłuchuje na porcie zdefiniowanym przez zmienną środowiskową
PORT
.
Twoja aplikacja jest ukończona i gotowa do konteneryzacji i przesłania do Container Registry.
Jawa
Zainstaluj Java SE 8 lub nowszą wersję JDK i CURL .
Pamiętaj, że musimy to zrobić tylko po to, aby w następnym kroku utworzyć nowy projekt internetowy. Plik Dockerfile, opisany później, załaduje wszystkie zależności do kontenera.
W konsoli utwórz nowy pusty projekt internetowy za pomocą cURL, a następnie rozpakuj polecenia:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d name=helloworld \ -d artifactId=helloworld \ -o helloworld.zip
unzip helloworld.zip
Spowoduje to utworzenie projektu SpringBoot.
Zaktualizuj klasę
SpringBootApplication
w plikusrc/main/java/com/example/helloworld/HelloworldApplication.java
dodając@RestController
do obsługi mapowania/
, a także dodaj pole@Value
, aby udostępnić zmienną środowiskowąTARGET
:Ten kod tworzy podstawowy serwer WWW, który nasłuchuje na porcie zdefiniowanym przez zmienną środowiskową
PORT
.
Twoja aplikacja jest ukończona i gotowa do konteneryzacji i przesłania do Container Registry.
Krok 2 : Konteneryzuj aplikację i prześlij ją do Container Registry
Konteneryzuj przykładową aplikację, tworząc nowy plik o nazwie
Dockerfile
w tym samym katalogu, co pliki źródłowe. Skopiuj następującą zawartość do swojego pliku.Iść
Node.js
Pyton
Jawa
Zbuduj obraz kontenera za pomocą Cloud Build, uruchamiając następujące polecenie z katalogu zawierającego plik Dockerfile:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
Po pomyślnym zakończeniu zostanie wyświetlony komunikat SUKCES zawierający nazwę obrazu
(gcr.io/ PROJECT_ID /helloworld
).
Obraz kontenera jest teraz przechowywany w Container Registry i w razie potrzeby można go ponownie wykorzystać.
Pamiętaj, że zamiast Cloud Build możesz użyć lokalnie zainstalowanej wersji Dockera, aby lokalnie zbudować kontener .
Krok 3 : Wdróż obraz kontenera w Cloud Run
Wdróż za pomocą następującego polecenia:
gcloud run deploy --image gcr.io/PROJECT_ID/helloworld
Gdy pojawi się monit:
- Wybierz region (na przykład
us-central1
) - Potwierdź nazwę usługi (na przykład
helloworld
) - Odpowiedz
Y
, aby zezwolić na nieuwierzytelnione wywołania
- Wybierz region (na przykład
Aby uzyskać najlepszą wydajność, połącz usługę Cloud Run z Hostingiem, korzystając z następujących regionów:
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
Przepisywanie do Cloud Run z Hostingu jest obsługiwane w następujących regionach:
-
asia-east1
-
asia-east2
-
asia-northeast1
-
asia-northeast2
-
asia-northeast3
-
asia-south1
-
asia-south2
-
asia-southeast1
-
asia-southeast2
-
australia-southeast1
-
australia-southeast2
-
europe-central2
-
europe-north1
-
europe-southwest1
-
europe-west1
-
europe-west12
-
europe-west2
-
europe-west3
-
europe-west4
-
europe-west6
-
europe-west8
-
europe-west9
-
me-central1
-
me-west1
-
northamerica-northeast1
-
northamerica-northeast2
-
southamerica-east1
-
southamerica-west1
-
us-central1
-
us-east1
-
us-east4
-
us-east5
-
us-south1
-
us-west1
-
us-west2
-
us-west3
-
us-west4
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
Poczekaj kilka chwil na zakończenie wdrażania. Jeśli operacja się powiedzie, w wierszu poleceń zostanie wyświetlony adres URL usługi. Na przykład
https://helloworld- RANDOM_HASH -us-central1.a.run.appOdwiedź wdrożony kontener, otwierając adres URL usługi w przeglądarce internetowej.
Następny krok przeprowadzi Cię przez proces uzyskiwania dostępu do tej skonteneryzowanej aplikacji z adresu URL hostingu Firebase, aby mogła ona generować dynamiczną zawartość dla Twojej witryny hostowanej przez Firebase.
Krok 4: Kieruj żądania hostingu do swojej aplikacji kontenerowej
Dzięki regułom przepisywania możesz kierować żądania pasujące do określonych wzorców do jednego miejsca docelowego.
Poniższy przykład pokazuje, jak skierować wszystkie żądania ze strony /helloworld
w witrynie hostingowej, aby wyzwolić uruchomienie i uruchomienie instancji kontenera helloworld
.
Upewnij się, że:
Zainicjowałeś Hosting Firebase.
Szczegółowe instrukcje dotyczące instalowania interfejsu CLI i inicjowania hostingu można znaleźć w przewodniku wprowadzającym dotyczącym hostingu .
Otwórz plik
firebase.json
.Dodaj następującą konfigurację
rewrite
w sekcjihosting
:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/helloworld", "run": { "serviceId": "helloworld", // "service name" (from when you deployed the container image) "region": "us-central1", // optional (if omitted, default is us-central1) "pinTag": true // optional (see note below) } } ] }
Wdróż konfigurację hostingu w swojej witrynie, uruchamiając następujące polecenie w katalogu głównym katalogu projektu:
firebase deploy --only hosting
Dzięki tej funkcji możesz mieć pewność, że wersja usługi Cloud Run do generowania dynamicznej zawartości Twojej witryny będzie zsynchronizowana ze statycznymi zasobami hostingu i konfiguracją hostingu. Ta funkcja umożliwia także podgląd zapisów w Cloud Run w kanałach podglądu Hostingu.
Jeśli dodasz
"pingTag": true
do blokurun
konfiguracjihosting.rewrites
, Twoje statyczne zasoby i konfiguracja hostingu zostaną przypięte do najnowszej wersji usługi Cloud Run w momencie wdrożenia. Jeśli wycofasz wersję swojej witryny, wycofana zostanie także wersja „przypiętej” usługi Cloud Run.Ta funkcja opiera się na tagach Cloud Run , które mają limit 1000 tagów na usługę i 2000 tagów na region. Oznacza to, że po setkach wdrożeń najstarsze wersje witryny mogą przestać działać.
Twój kontener jest teraz dostępny pod następującymi adresami URL:
Twoje subdomeny Firebase:
PROJECT_ID .web.app/
iPROJECT_ID .firebaseapp.com/
Wszelkie połączone domeny niestandardowe :
CUSTOM_DOMAIN /
Odwiedź stronę konfiguracji Hostingu, aby uzyskać więcej szczegółów na temat reguł przepisywania . Możesz także dowiedzieć się o kolejności priorytetów odpowiedzi dla różnych konfiguracji Hostingu.
Testuj lokalnie
Podczas programowania możesz uruchamiać i testować obraz kontenera lokalnie. Szczegółowe instrukcje znajdziesz w dokumentacji Cloud Run .
Następne kroki
Skonfiguruj buforowanie zawartości dynamicznej w globalnej sieci CDN.
Interakcja z innymi usługami Firebase za pomocą pakietu Firebase Admin SDK .
Dowiedz się więcej o Cloud Run, w tym szczegółowe instrukcje dotyczące konfigurowania kontenerów, zarządzania nimi i ich konfigurowania.
Zapoznaj się z cenami oraz przydziałami i limitami Cloud Run.