Wprowadzenie do Cloud Run z użyciem Pythona

1. Wprowadzenie

96d07289bb51daa7.png

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

  1. 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ć.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 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.
  1. 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

  1. W konsoli Cloud kliknij Aktywuj Cloud Shell 853e55310c205094.png.

3c1dabeca90e44e5.png

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.

9c92662c6a846a5c.png

Uzyskanie dostępu do Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.

9f0e51b578fecce5.png

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.

  1. 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`
  1. 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:

10af7b1a6240e9f4.gif

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:

6c9ff9e5c692c58e.gif

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:

c836b93e5601e2cf.gif

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:

  1. Pobierz identyfikator bieżącego projektu:
PROJECT_ID=$(gcloud config get-value core/project)
  1. Sprawdź, czy to jest projekt, który chcesz usunąć:
echo $PROJECT_ID
  1. Usuń projekt:
gcloud projects delete $PROJECT_ID

8. Gratulacje!

96d07289bb51daa7.png

Udało Ci się utworzyć prostą aplikację internetową i wdrożyć ją w Cloud Run.

Więcej informacji

Licencja

To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.