Pierwsze kroki z App Engine (Python 3)

1. Przegląd

befa7a877ccdd35d.png

Aplikacje Google App Engine są łatwe w tworzeniu, utrzymywaniu i skalowaniu w miarę zmian w ruchu i potrzebach związanych z przechowywaniem danych. W przypadku App Engine nie musisz utrzymywać serwerów. Wystarczy przesłać aplikację, aby była gotowa do użycia.

W ramach tych ćwiczeń z programowania dowiesz się, jak wdrożyć prostą aplikację internetową w Pythonie napisaną za pomocą platformy internetowej Flask. Chociaż w tym przykładzie użyto platformy Flask, możesz użyć innych platform internetowych, w tym Django, Pyramid, Bottleweb.py.

Ten samouczek jest adaptacją artykułu https://cloud.google.com/appengine/docs/standard/python3/quickstart.

Czego się nauczysz

  • Jak utworzyć prosty serwer Pythona w Google App Engine.
  • Jak zaktualizować kod bez wyłączania serwera.

Czego potrzebujesz

  • znajomość Pythona,
  • Znajomość standardowych edytorów tekstu systemu Linux, takich jak vim, emacs lub nano.

Ankieta

Jak zamierzasz korzystać z tego samouczka?

Tylko przeczytaj Przeczytaj i wykonaj ćwiczenia

Jak oceniasz swoje doświadczenie z Pythonem?

Początkujący Średnio zaawansowany Zaawansowany

Jak oceniasz korzystanie z usług Google Cloud?

Początkujący Średnio zaawansowany Zaawansowany

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 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. Zawsze możesz ją zaktualizować.
  • 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ę tym przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego 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 pozostaje on taki przez cały czas trwania projektu.
  • Warto wiedzieć, że istnieje też trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego laboratorium nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub 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.

Uruchamianie Cloud Shell

Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module użyjemy Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.

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 tego środowiska. Jeśli pojawił się ekran pośredni, kliknij Dalej.

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Większość zadań w tym module, a być może wszystkie, możesz wykonać w przeglądarce.

Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu.

  1. Aby potwierdzić, że uwierzytelnianie zostało przeprowadzone, uruchom w Cloud Shell to polecenie:
gcloud auth list

Wynik polecenia

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project

Wynik polecenia

[core]
project = <PROJECT_ID>

Jeśli nie, możesz go ustawić za pomocą tego polecenia:

gcloud config set project <PROJECT_ID>

Wynik polecenia

Updated property [core/project].

3. Tworzenie aplikacji internetowej

Po uruchomieniu Cloud Shell możesz użyć wiersza poleceń, aby wywołać polecenie gcloud pakietu SDK Cloud lub inne narzędzia dostępne w instancji maszyny wirtualnej. Możesz używać katalogu $HOME na dysku stałym do przechowywania plików w projektach i między sesjami Cloud Shell. Twój katalog $HOME jest prywatny – inni użytkownicy nie mają do niego dostępu.

Zacznijmy od utworzenia nowego folderu w katalogu $HOME na potrzeby aplikacji:

mkdir ~/helloworld
cd ~/helloworld

Utwórz plik o nazwie main.py:

touch main.py

Edytuj plik za pomocą preferowanego edytora wiersza poleceń (nano, vim lub emacs) albo kliknij przycisk edytora Cloud Shell:

10af7b1a6240e9f4.gif

Aby bezpośrednio edytować plik za pomocą edytora Cloud Shell, użyj tego polecenia:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    return "Hello World!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

4. Określanie zależności

Aby określić zależności aplikacji internetowej, wróć do terminala i utwórz w katalogu głównym projektu plik requirements.txt z dokładną wersją Flaska, której chcesz użyć:

touch requirements.txt

Aby edytować plik za pomocą edytora Cloud Shell, użyj tego polecenia:

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/Flask
Flask==3.0.2

5. Konfigurowanie wdrożenia

Aby wdrożyć aplikację internetową w App Engine, potrzebujesz pliku app.yaml. Ten plik konfiguracji określa ustawienia aplikacji internetowej dla App Engine.

W terminalu utwórz i edytuj plik app.yaml w katalogu głównym projektu:

touch app.yaml

Aby edytować plik za pomocą edytora Cloud Shell, użyj tego polecenia:

cloudshell edit app.yaml

app.yaml

runtime: python312

6. Wdrażanie aplikacji internetowej

W terminalu sprawdź zawartość katalogu:

ls

Powinny być widoczne 3 pliki:

app.yaml  main.py  requirements.txt

Wdróż aplikację internetową za pomocą tego polecenia:

gcloud app deploy

Za pierwszym razem musisz wybrać region wdrożenia:

Please choose the region where you want your App Engine application
located:

 [1] asia-east2
...
 [7] australia-southeast1
 [8] europe-west
 [9] europe-west2
...
 [12] northamerica-northeast1
 [13] southamerica-east1
...
 [19] us-west4
...
Please enter your numeric choice:

Potwierdź, aby uruchomić wdrożenie:

Creating App Engine application in project [PROJECT_ID] and region [REGION]....done.
Services to deploy:

descriptor:      [~/helloworld/app.yaml]
source:          [~/helloworld]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [YYYYMMDDtHHMMSS]
target url:      [https://PROJECT_ID.REGION_ID.r.appspot.com]

Do you want to continue (Y/n)?

Aplikacja zostanie wdrożona:

Beginning deployment of service [default]...
Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
Uploading 3 files to Google Cloud Storage
100%
File upload done.
Updating service [default]...done.     
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

Aplikacja internetowa jest teraz gotowa do odpowiadania na żądania HTTP na porcie https://PROJECT_ID.REGION_ID.r.appspot.com.

7. Testowanie aplikacji internetowej

Aplikacja internetowa jest gotowa do odpowiadania na żądania HTTP na porcie https://PROJECT_ID.REGION_ID.r.appspot.com.

Najpierw pobierz nazwę hosta aplikacji internetowej za pomocą polecenia gcloud app describe:

APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")

Przetestuj aplikację internetową za pomocą tego prostego żądania GET HTTP:

curl https://$APPENGINE_HOSTNAME

Powinna pojawić się taka odpowiedź:

Hello World!

Podsumowanie

W poprzednich krokach skonfigurowaliśmy prostą aplikację internetową w Pythonie, uruchomiliśmy ją i wdrożyliśmy w App Engine.

8. Aktualizowanie aplikacji internetowej

Zmodyfikuj aplikację internetową, zmieniając treść funkcji hello() w pliku main.py.

Aby edytować plik za pomocą edytora Cloud Shell, użyj tego polecenia:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    # return "Hello World!\n"  # ← Replace this line
    who = flask.request.args.get("who", "World")
    return f"Hello {who}!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

Aby zaktualizować aplikację internetową, wdróż ją ponownie w terminalu:

gcloud app deploy --quiet

Nowa wersja aplikacji zostanie wdrożona:

Beginning deployment of service [default]...
Uploading 1 file to Google Cloud Storage 
...
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

Przetestuj nową wersję aplikacji internetowej w taki sam sposób jak wcześniej:

curl https://$APPENGINE_HOSTNAME

Powinna pojawić się ta sama odpowiedź:

Hello World!

Przetestuj go za pomocą parametru opcjonalnego:

curl https://$APPENGINE_HOSTNAME?who=Universe

Powinna pojawić się taka odpowiedź:

Hello Universe!

Podsumowanie

W tym kroku zaktualizowaliśmy i ponownie wdrożyliśmy aplikację internetową bez przerywania działania usługi.

9. Gratulacje!

Napisano pierwszą aplikację internetową App Engine w Pythonie.

Więcej informacji

Licencja

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