Начало работы с 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 Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

Запустить Cloud Shell

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

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

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

3c1dabeca90e44e5.png

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

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

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

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

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

mkdir ~/helloworld
cd ~/helloworld

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

touch main.py

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

10af7b1a6240e9f4.gif

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

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, используйте следующую команду:

cloudshell edit requirements.txt

требования.txt

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

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

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

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

touch app.yaml

Чтобы отредактировать файл с помощью редактора Cloud Shell, используйте следующую команду:

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, используйте следующую команду:

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 License.