1. Wprowadzenie
Cloud Run to zarządzana platforma obliczeniowa, która umożliwia uruchamianie bezstanowych kontenerów wywoływanych przez żądania HTTP. Jest ono oparte na projekcie open source Knative, co umożliwia przenoszenie zadań na różnych platformach. Cloud Run jest rozwiązaniem bezserwerowym, które nie wymaga zarządzania infrastrukturą, dzięki czemu możesz skupić się na tym, co najważniejsze, czyli tworzeniu świetnych aplikacji.
Celem tego samouczka jest utworzenie prostej aplikacji internetowej i wdrożenie jej w Cloud Run.
2. 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.
Uruchamianie Cloud Shell
Google Cloud można obsługiwać zdalnie z poziomu laptopa, ale w tym samouczku będziesz używać Cloud Shell – środowiska wiersza poleceń działającego w Cloud.
Aktywowanie Cloud Shell
- W konsoli Cloud kliknij Aktywuj Cloud Shell .
Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni z opisem tej usługi. Jeśli wyświetlił się ekran pośredni, kliknij Dalej.
Uzyskanie dostępu do Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.
Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Większość zadań w ramach tego ćwiczenia z programowania można wykonać w przeglądarce.
Po nawiązaniu połączenia z Cloud Shell powinno pojawić się potwierdzenie, że użytkownik jest uwierzytelniony, a projekt jest ustawiony na identyfikator Twojego projektu.
- Uruchom to polecenie w Cloud Shell, aby potwierdzić, że jesteś uwierzytelniony:
gcloud auth list
Dane wyjściowe polecenia
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Uruchom to polecenie w Cloud Shell, aby sprawdzić, czy polecenie gcloud zna Twój projekt:
gcloud config list project
Dane wyjściowe polecenia
[core] project = <PROJECT_ID>
Jeśli tak nie jest, możesz go ustawić za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Dane wyjściowe polecenia
Updated property [core/project].
3. Włączanie interfejsów API
W Cloud Shell włącz interfejsy Artifact Registry API, Cloud Build API i Cloud Run API:
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com
Zostaje wyświetlony komunikat o powodzeniu podobny do tego:
Operation "operations/..." finished successfully.
Możesz teraz zacząć pracę i napisać aplikację...
4. Tworzenie aplikacji
W tym kroku utworzysz prostą aplikację w języku Flask w języku Python, która odpowiada na żądania HTTP.
Katalog roboczy
W Cloud Shell utwórz katalog roboczy o nazwie helloworld-python
i przełącz się na niego:
mkdir ~/helloworld-python cd ~/helloworld-python
main.py
Utwórz plik o nazwie main.py
:
touch main.py
Edytuj plik w preferowanym edytorze wiersza poleceń (nano, vim lub emacs) albo kliknij przycisk edytora Cloud Shell:
Aby edytować plik bezpośrednio w edytorze Cloud Shell, użyj tego polecenia:
cloudshell edit main.py
main.py
from flask import Flask, request
app = Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
who = request.args.get("who", default="World")
return f"Hello {who}!\n"
if __name__ == "__main__":
# Development only: run "python main.py" and open http://localhost:8080
# When deploying to Cloud Run, a production-grade WSGI HTTP server,
# such as Gunicorn, will serve the app.
app.run(host="localhost", port=8080, debug=True)
Ten kod tworzy podstawową usługę internetową, która odpowiada na żądania HTTP GET z przyjazną wiadomością.
requirements.txt
Dodaj plik o nazwie requirements.txt
, aby zdefiniować zależności:
touch requirements.txt
Aby edytować plik bezpośrednio w edytorze Cloud Shell, użyj tego polecenia:
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/flask
Flask==3.0.2
# https://pypi.org/project/gunicorn
gunicorn==21.2.0
Plik protokołu
Na koniec dodaj plik o nazwie Procfile
, aby określić sposób udostępniania aplikacji:
touch Procfile
Aby edytować plik bezpośrednio w edytorze Cloud Shell, użyj tego polecenia:
cloudshell edit Procfile
Procfile
web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
Sprawdź, czy wszystkie pliki znajdują się w katalogu roboczym:
ls
Powinno wyświetlić się te pliki:
main.py Procfile requirements.txt
Aplikacja jest gotowa do wdrożenia, ale najpierw ją przetestujmy...
5. Testowanie aplikacji
Aby przetestować aplikację, utwórz środowisko wirtualne:
virtualenv venv
Aktywuj środowisko wirtualne:
source venv/bin/activate
Zainstaluj zależności:
pip install -r requirements.txt
Powinien wyświetlić się komunikat z potwierdzeniem podobny do tego:
... Successfully installed Flask ... gunicorn ...
Uruchom aplikację:
python main.py
Z dzienników wynika, że jesteś w trybie programistycznym:
* Serving Flask app 'main' * Debug mode: on WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://localhost:8080 Press CTRL+C to quit ...
W oknie Cloud Shell kliknij ikonę Web Preview
i wybierz Preview on port 8080
:
Powinno się otworzyć okno przeglądarki z komunikatem Hello World!
.
Możesz też otworzyć kolejną sesję Cloud Shell (nową kartę terminala), klikając ikonę +
i wysyłając żądanie internetowe do działającej lokalnie aplikacji:
curl localhost:8080
Powinna Ci się wyświetlić następująca odpowiedź:
Hello World!
Gdy skończysz, wróć do głównej sesji Cloud Shell i zatrzymaj polecenie python main.py
z CTRL+C
.
Wyjdź ze środowiska wirtualnego:
deactivate
Na koniec usuń katalog środowiska wirtualnego:
rm -r venv/
Aplikacja działa zgodnie z oczekiwaniami – wdróżmy ją...
6. Wdrożenie w Cloud Run
Cloud Run działa regionalnie, co oznacza, że infrastruktura, w której działają usługi Cloud Run, znajduje się w określonym regionie i jest zarządzana przez Google, aby zapewnić nadmiarową dostępność we wszystkich strefach w tym regionie. Określ region, którego będziesz używać we wdrożeniu, na przykład:
REGION="europe-west9"
Upewnij się, że jesteś w katalogu roboczym:
ls
Powinno wyświetlić się te pliki:
main.py Procfile requirements.txt
Wdróż aplikację w Cloud Run:
gcloud run deploy helloworld-python \ --source . \ --platform managed \ --region $REGION \ --allow-unauthenticated
- Region domyślny możesz zdefiniować za pomocą tego polecenia:
gcloud config set run/region $REGION
- Możesz też domyślnie włączyć zarządzanie usługą Cloud Run za pomocą tego polecenia:
gcloud config set run/platform managed
- Opcja
--allow-unauthenticated
powoduje udostępnienie usługi publicznie. Aby uniknąć nieuwierzytelnionych żądań, używaj zamiast tego--no-allow-unauthenticated
.
Za pierwszym razem zobaczysz prośbę o utworzenie repozytorium Artifact Registry. Naciśnij Enter, aby sprawdzić poprawność:
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)?
Spowoduje to uruchomienie przesyłania kodu źródłowego do repozytorium Artifact Registry i kompilacji obrazu kontenera:
Building using Buildpacks and deploying container ... * Building and deploying new service... Building Container. OK Creating Container Repository... OK Uploading sources... * Building Container... Logs are available at ...
Następnie poczekaj chwilę na zakończenie wdrożenia. Kiedy operacja zostanie wykonana, w wierszu poleceń wyświetli się URL usługi:
... OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at ... OK Creating Revision... Creating Service. OK Routing traffic... OK Setting IAM Policy... Done. Service [SERVICE]... has been deployed and is serving 100 percent of traffic. Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app
Adres URL usługi możesz uzyskać za pomocą tego polecenia:
SERVICE_URL=$( \ gcloud run services describe helloworld-python \ --platform managed \ --region $REGION \ --format "value(status.url)" \ ) echo $SERVICE_URL
Powinno wyświetlić się mniej więcej coś takiego:
https://helloworld-python-PROJECTHASH-REGIONID.a.run.app
Teraz możesz korzystać z aplikacji, otwierając adres URL usługi w przeglądarce internetowej:
Możesz również wywołać aplikację z Cloud Shell:
curl $SERVICE_URL?who=me
Powinno wyświetlić się oczekiwane powitanie:
Hello me!
Gratulacje! Aplikacja została wdrożona w Cloud Run. Cloud Run automatycznie skaluje obraz kontenera w poziomie, aby obsługiwać otrzymane żądania, a następnie skaluje w dół, gdy zapotrzebowanie maleje. Płacisz tylko za procesor, pamięć i sieć wykorzystywane podczas obsługi żądań.
7. Czyszczenie danych
Cloud Run nie nalicza opłat, gdy usługa nie jest używana, ale może zostać pobrana opłata za przechowywanie obrazu kontenera w Artifact Registry. Aby uniknąć naliczania opłat, możesz usunąć repozytorium lub projekt Cloud. Usunięcie projektu Cloud spowoduje zatrzymanie naliczania opłat za wszystkie zasoby w nim używane.
Aby usunąć repozytorium obrazów kontenerów:
gcloud artifacts repositories delete cloud-run-source-deploy \ --location $REGION
Aby usunąć usługę Cloud Run:
gcloud run services delete helloworld-python \ --platform managed \ --region $REGION
Aby usunąć projekt Google Cloud:
- Pobierz identyfikator bieżącego projektu:
PROJECT_ID=$(gcloud config get-value core/project)
- Sprawdź, czy to jest projekt, który chcesz usunąć:
echo $PROJECT_ID
- Usuń projekt:
gcloud projects delete $PROJECT_ID
8. Gratulacje!
Udało Ci się utworzyć prostą aplikację internetową i wdrożyć ją w Cloud Run.
Więcej informacji
- Zapoznaj się z dokumentacją Cloud Run.
- Ukończ programowanie w Cloud Run, wykonując 3 proste kroki, aby poznać więcej opcji.
- Wykonaj działanie Django w Cloud Run, aby utworzyć bazę danych Cloud SQL, zarządzać danymi logowania w usłudze Secret Manager i wdrożyć Django
- Sprawdź inne ćwiczenia z programowania w Cloud Run...
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.