Начало работы с App Engine (Python 3)

1. Обзор

befa7a877ccdd35d.png

Приложения Google App Engine легко создавать, легко поддерживать и легко масштабировать по мере изменения ваших потребностей в трафике и хранении данных. С App Engine нет необходимости обслуживать серверы. Вы просто загружаете свое приложение, и оно готово к работе.

В этом практическом занятии вы узнаете, как развернуть простое веб-приложение на Python, написанное с использованием веб-фреймворка Flask . Хотя в этом примере используется Flask, вы можете использовать и другие веб-фреймворки, включая Django , Pyramid , Bottle и web.py.

Данный учебный материал адаптирован из https://cloud.google.com/appengine/docs/standard/python3/quickstart

Что вы узнаете

  • Как создать простой Python-сервер на Google App Engine.
  • Как обновить код, не отключая сервер.

Что вам понадобится

  • Знание языка Python
  • Знание стандартных текстовых редакторов Linux, таких как vim, emacs или nano.

Опрос

Как вы будете использовать этот учебный материал?

Прочитайте только от начала до конца. Прочитайте текст и выполните упражнения.

Как бы вы оценили свой опыт работы с Python?

Новичок Средний Профессионал

Как бы вы оценили свой опыт использования сервисов Google Cloud?

Новичок Средний Профессионал

2. Настройка и требования

Настройка среды для самостоятельного обучения

  1. Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы всегда можете его изменить.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор вашего проекта (обычно обозначается как PROJECT_ID ). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он сохраняется на протяжении всего проекта.
  • К вашему сведению, существует третье значение — номер проекта , которое используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
  1. Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не потребует больших затрат, если вообще потребует. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Cloud Shell — среду командной строки, работающую в облаке.

Активировать Cloud Shell

  1. В консоли Cloud нажмите «Активировать Cloud Shell» . 853e55310c205094.png .

3c1dabeca90e44e5.png

Если вы запускаете Cloud Shell впервые, вам будет показан промежуточный экран с описанием его возможностей. Если вам был показан промежуточный экран, нажмите «Продолжить» .

9c92662c6a846a5c.png

Подготовка и подключение к Cloud Shell займут всего несколько минут.

9f0e51b578fecce5.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Большая часть, если не вся, ваша работа в этом практическом задании может быть выполнена с помощью браузера.

После подключения к Cloud Shell вы увидите, что прошли аутентификацию и что проект настроен на ваш идентификатор проекта.

  1. Выполните следующую команду в Cloud Shell, чтобы подтвердить свою аутентификацию:
gcloud auth list

вывод команды

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте:
gcloud config list project

вывод команды

[core]
project = <PROJECT_ID>

Если это не так, вы можете установить это с помощью следующей команды:

gcloud config set project <PROJECT_ID>

вывод команды

Updated property [core/project].

3. Напишите веб-приложение.

После запуска Cloud Shell вы можете использовать командную строку для вызова команды gcloud Cloud SDK или других инструментов, доступных в экземпляре виртуальной машины. Вы можете использовать свой каталог $HOME в качестве постоянного дискового хранилища для хранения файлов между проектами и между сеансами Cloud Shell. Ваш каталог $HOME является личным и недоступен для других пользователей.

Для начала создадим новую папку для приложения в вашем домашнем каталоге $HOME ):

mkdir ~/helloworld
cd ~/helloworld

Создайте файл с именем main.py :

touch main.py

Отредактируйте файл с помощью предпочитаемого вами редактора командной строки (nano, vim или emacs) или нажав кнопку Cloud Shell Editor:

10af7b1a6240e9f4.gif

Для непосредственного редактирования файла с помощью Cloud Shell Editor используйте следующую команду:

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. Определите зависимости

Чтобы указать зависимости вашего веб-приложения, вернитесь в терминал и создайте файл requirements.txt в корневом каталоге вашего проекта, указав точную версию Flask, которую вы хотите использовать:

touch requirements.txt

Для редактирования файла с помощью Cloud Shell Editor используйте следующую команду:

cloudshell edit requirements.txt

requirements.txt

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

5. Настройка развертывания

Для развертывания веб-приложения в App Engine вам потребуется файл app.yaml . Этот конфигурационный файл определяет настройки вашего веб-приложения для App Engine.

В терминале создайте и отредактируйте файл app.yaml в корневом каталоге вашего проекта:

touch app.yaml

Для редактирования файла с помощью Cloud Shell Editor используйте следующую команду:

cloudshell edit app.yaml

app.yaml

runtime: python312

6. Разверните веб-приложение

Проверьте содержимое вашей директории в терминале:

ls

У вас должны быть следующие 3 файла:

app.yaml  main.py  requirements.txt

Разверните веб-приложение с помощью следующей команды:

gcloud app deploy

При первом запуске необходимо выбрать регион развертывания:

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:

Подтвердите запуск развертывания:

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)?

Ваше приложение развернуто:

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]

Ваше веб-приложение теперь готово отвечать на HTTP-запросы по адресу https://PROJECT_ID.REGION_ID.r.appspot.com .

7. Протестируйте веб-приложение.

Ваше веб-приложение готово отвечать на HTTP-запросы по адресу https://PROJECT_ID.REGION_ID.r.appspot.com .

Сначала получите имя хоста вашего веб-приложения с помощью команды gcloud app describe :

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

Протестируйте свое веб-приложение с помощью этого простого HTTP GET-запроса:

curl https://$APPENGINE_HOSTNAME

В результате вы должны получить следующий ответ:

Hello World!

Краткое содержание

На предыдущих шагах вы настроили простое веб-приложение на Python, запустили его и развернули в App Engine.

8. Обновите веб-приложение.

Измените ваше веб-приложение, изменив тело функции hello() в файле main.py

Для редактирования файла с помощью Cloud Shell Editor используйте следующую команду:

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)

Для обновления веб-приложения выполните повторное развертывание в терминале:

gcloud app deploy --quiet

Новая версия вашего приложения будет развернута:

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

Протестируйте новую версию своего веб-приложения точно так же, как и раньше:

curl https://$APPENGINE_HOSTNAME

Вы должны получить тот же ответ:

Hello World!

Проверьте это с помощью необязательного параметра:

curl https://$APPENGINE_HOSTNAME?who=Universe

В результате вы должны получить следующий ответ:

Hello Universe!

Краткое содержание

На этом этапе вы обновили и повторно развернули свое веб-приложение без каких-либо перебоев в работе сервиса.

9. Поздравляем!

Вы научились писать своё первое веб-приложение для App Engine на Python!

Узнать больше

Лицензия

Данная работа распространяется под лицензией Creative Commons Attribution 2.0 Generic.