1. Обзор
Приложения 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. Настройка и требования
Самостоятельная настройка среды
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (нельзя изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Далее вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Cloud Shell , среду командной строки, работающую в облаке.
Активировать Cloud Shell
- В Cloud Console нажмите «Активировать Cloud Shell». .
Если вы запускаете Cloud Shell впервые, вы увидите промежуточный экран с описанием того, что это такое. Если вам был представлен промежуточный экран, нажмите «Продолжить» .
Подготовка и подключение к Cloud Shell займет всего несколько минут.
Эта виртуальная машина загружена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Большую часть, если не всю, работу в этой лаборатории кода можно выполнить с помощью браузера.
После подключения к Cloud Shell вы увидите, что вы прошли аутентификацию и что для проекта установлен идентификатор вашего проекта.
- Выполните следующую команду в 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`
- Выполните следующую команду в 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»:
Чтобы напрямую отредактировать файл с помощью редактора 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!
Узнать больше
- Документация App Engine: https://cloud.google.com/appengine.
- Изучите это руководство, чтобы написать полноценное приложение Python на App Engine: https://cloud.google.com/appengine/docs/standard/python3/building-app .
Лицензия
Эта работа распространяется под лицензией Creative Commons Attribution 2.0 Generic License.