1. Omówienie
Aplikacje Google App Engine można łatwo tworzyć, łatwo obsługiwać i skalować wraz ze zmianami potrzeb w zakresie ruchu i pamięci masowej. W App Engine nie ma żadnych serwerów, które trzeba utrzymywać. Wystarczy tylko przesłać aplikację i można ją uruchomić.
Z tego ćwiczenia w Codelabs dowiesz się, jak wdrożyć prostą aplikację internetową w języku Python napisaną przy użyciu sieciowej platformy programistycznej Flask. Ten przykład korzysta z platformy Flask, ale możesz też użyć innych platform internetowych, takich jak Django, Pyramid, Bottle i web.py.
Ten samouczek został zaadaptowany ze strony https://cloud.google.com/appengine/docs/standard/python3/quickstart
Czego się nauczysz
- Jak utworzyć prosty serwer w Pythonie w Google App Engine.
- Jak zaktualizować kod bez usuwania serwera.
Czego potrzebujesz
- znajomość języka Python,
- Znajomość standardowych edytorów tekstu systemu Linux, takich jak vim, emacs lub nano
Ankieta
Jak wykorzystasz ten samouczek?
Jak oceniasz swoje doświadczenia z językiem Python?
Jak oceniasz usługi Google Cloud?
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 laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Cloud Shell – środowisko wiersza poleceń działające 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. Pisanie aplikacji internetowej
Po uruchomieniu Cloud Shell możesz użyć wiersza poleceń, aby wywołać polecenie gcloud
z pakietu SDK Cloud lub inne narzędzia dostępne w instancji maszyny wirtualnej. Katalogu $HOME
na dysku stałym możesz używać 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 w katalogu $HOME
nowego folderu dla aplikacji:
mkdir ~/helloworld cd ~/helloworld
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
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. Zdefiniuj zależności
Aby określić zależności aplikacji internetowej, wróć do terminala i w katalogu głównym projektu utwórz plik requirements.txt
z dokładną wersją Flask, której chcesz użyć:
touch requirements.txt
Aby edytować plik w edytorze 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 definiuje 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 w edytorze 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
Potrzebujesz tych 3 plików:
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ź uruchomienie wdrożenia:
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 jest wdrażana:
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]
Twoja aplikacja internetowa jest już gotowa do odpowiadania na żądania HTTP https://PROJECT_ID.REGION_ID.r.appspot.com
.
7. Testowanie aplikacji internetowej
Twoja aplikacja internetowa jest gotowa do odpowiadania na żądania HTTP 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 swoją aplikację internetową za pomocą tego prostego żądania HTTP GET:
curl https://$APPENGINE_HOSTNAME
Powinna pojawić się taka odpowiedź:
Hello World!
Podsumowanie
W poprzednich krokach skonfigurowaliśmy prostą aplikację internetową w języku Python, uruchomiliśmy i wdrożyliśmy ją w App Engine.
8. Zaktualizuj aplikację internetową
Zmodyfikuj swoją aplikację internetową, zmieniając treść funkcji hello()
w pliku main.py
.
Aby edytować plik w edytorze 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)
Przeprowadź ponowne wdrożenie w terminalu, aby zaktualizować aplikację internetową:
gcloud app deploy --quiet
Wdrażana jest nowa wersja aplikacji:
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 tak samo jak dotychczas:
curl https://$APPENGINE_HOSTNAME
Powinna być taka sama:
Hello World!
Przetestuj ją za pomocą opcjonalnego parametru:
curl https://$APPENGINE_HOSTNAME?who=Universe
Powinna pojawić się taka odpowiedź:
Hello Universe!
Podsumowanie
W tym kroku udało Ci się zaktualizować i ponownie wdrożyć aplikację internetową bez przerw w działaniu usługi.
9. Gratulacje!
Udało Ci się nauczyć pisania pierwszej aplikacji internetowej App Engine w języku Python.
Więcej informacji
- Dokumentacja App Engine: https://cloud.google.com/appengine
- Zapoznaj się z tym samouczkiem, aby napisać pełną aplikację w języku Python 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.