1. Przegląd

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, Bottle i web.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?
Jak oceniasz swoje doświadczenie z Pythonem?
Jak oceniasz korzystanie z usług Google Cloud?
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- 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ć.



- 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.
- 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
- W konsoli Cloud kliknij Aktywuj Cloud Shell
.

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.

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

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

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
- Dokumentacja App Engine: https://cloud.google.com/appengine
- Zapoznaj się z tym samouczkiem, aby napisać w pełni funkcjonalną aplikację w Pythonie w App Engine: https://cloud.google.com/appengine/docs/standard/python3/building-app
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.