Расширение поддержки встроенных служб App Engine: часть 1 (модуль 17)

1. Обзор

Серия курсов по кодированию Serverless Migration Station (практические руководства для самостоятельного обучения) и сопутствующие видеоролики призваны помочь бессерверным разработчикам Google Cloud модернизировать свои приложения, помогая им выполнить одну или несколько миграций, в первую очередь отходя от устаревших сервисов. Это сделает ваши приложения более портативными и предоставит вам больше возможностей и гибкости, позволяя интегрироваться с более широким спектром облачных продуктов и получать к ним доступ, а также упростить обновление до более новых языковых версий. Первоначально эта серия ориентирована на самых первых пользователей облака, в первую очередь на разработчиков App Engine (стандартной среды), но эта серия достаточно широка, чтобы включать в себя другие бессерверные платформы, такие как Cloud Functions и Cloud Run , или другие бессерверные платформы, если это применимо.

Раньше разработчикам приходилось переходить с устаревших «пакетных сервисов» App Engine, таких как Datastore и Memcache, прежде чем они могли обновлять языковые версии — две потенциально сложные задачи подряд. Сделав многие ключевые встроенные службы доступными в службе App Engine 2-го поколения, разработчики теперь могут переносить свои приложения на новейшие среды выполнения, продолжая при этом использовать (большую часть) встроенных служб. В этой лаборатории кода вы узнаете, как обновить пример приложения с Python 2 до версии 3, сохранив при этом использование встроенной службы Datastore (через библиотеку App Engine NDB). Использование большинства встроенных служб требует лишь незначительного обновления кода, как будет описано в этом руководстве, но есть и другие, требующие более масштабных изменений; они будут рассмотрены в «Части 2», следующем модуле и кодовой лаборатории.

Вы узнаете, как

  • Перенос примера приложения App Engine с Python 2 на 3
  • Обновите конфигурацию приложения, включив в него SDK App Engine.
  • Добавьте в приложение код SDK, поддерживающий встроенные службы во средах выполнения 2-го поколения, таких как Python 3.

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

Опрос

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

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

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

Новичок Средний Опытный

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

Новичок Средний Опытный

2. Предыстория

Первоначальный сервис App Engine был запущен в 2008 году и поставлялся с набором устаревших API (теперь известных как комплексные сервисы ), чтобы разработчикам было удобно создавать и развертывать приложения по всему миру. Эти службы включают Datastore, Memcache и Task Queue. Несмотря на удобство, пользователи стали беспокоиться о переносимости своих приложений при использовании проприетарных API, привязывающих их к App Engine, и хотели, чтобы их приложения были более переносимыми. В сочетании с тем фактом, что многие из этих комплексных сервисов постепенно превращаются в самостоятельные облачные продукты, команда App Engine в 2018 году запустила платформу следующего поколения без них.

Перенесемся в сегодняшний день: разработчики Python 2 стремятся перейти на Python 3. Приложению версии 2.x, использующему встроенные сервисы, требовалось выполнить миграцию с этих сервисов, прежде чем их приложения можно было перенести на версию 3.x, что представляет собой пару вынужденных миграций обратно на версию 3.x. -обратно, потенциально сложные тоже. Чтобы помочь в этом переходе, осенью 2021 года команда App Engine представила «червоточину» прошлого, позволяющую приложениям, работающим в средах выполнения следующего поколения, получать доступ ко многим из этих связанных сервисов. Хотя этот выпуск не включает все службы, доступные в исходной среде выполнения, доступны основные игроки, такие как Datastore, Task Queue и Memcache.

В этой лаборатории кода демонстрируются необходимые изменения для обновления вашего приложения до Python 3, сохраняя при этом использование встроенных сервисов. Цель состоит в том, чтобы ваши приложения работали в новейших средах выполнения, что позволит вам затем перейти от связанных сервисов к автономным облачным эквивалентам или сторонним альтернативам в ваши собственные сроки, а не блокировать обновление до 3.x. Хотя переход от комплексных услуг больше не требуется, это дает вам большую мобильность и гибкость с точки зрения размещения ваших приложений, включая переход на платформы, которые могут лучше обслуживать ваши рабочие нагрузки, или просто сохранение App Engine во время обновления. к более современной языковой версии, как только что описано.

Пример приложения Python 2 модуля 1 использует встроенную службу Datastore через App Engine NDB. Приложение уже перенесло фреймворки из webapp2 в Flask, что было выполнено в лаборатории кода Модуля 1 , но с сохранением использования хранилища данных.

Это руководство включает в себя следующие шаги:

  1. Настройка/Предварительная работа
  2. Обновить конфигурацию
  3. Изменить код приложения

3. Настройка/Предварительная работа

В этом разделе объясняется, как:

  1. Настройте свой облачный проект
  2. Получить базовый образец приложения
  3. (Повторное)развертывание и проверка базового приложения.

Эти шаги гарантируют, что вы начнете с рабочего кода.

1. Проект установки

Если вы завершили лабораторную работу по Модулю 1, мы рекомендуем повторно использовать тот же проект (и код). Альтернативно создайте новый облачный проект или повторно используйте другой существующий проект. Убедитесь, что у проекта есть активный платежный аккаунт, в котором включена служба App Engine.

2. Получите базовый образец приложения.

Одним из обязательных условий для этой лаборатории кода является наличие рабочего приложения App Engine Модуля 1: заполните лабораторию кода Модуля 1 (рекомендуется) или скопируйте приложение Модуля 1 из репозитория. Независимо от того, используете ли вы свой или наш, мы «НАЧНЕМ» с кода Модуля 1. Эта лаборатория кода проведет вас через каждый шаг, завершая кодом, похожим на код, который находится в папке репозитория Модуля 7 «FINISH».

Независимо от того, какое приложение Модуля 1 вы используете, папка должна выглядеть так, как показано ниже, возможно, с папкой lib :

$ ls
README.md               appengine_config.py     requirements.txt
app.yaml                main.py                 templates

3. (Повторное) развертывание базового приложения.

Выполните следующие шаги, чтобы (повторно) развернуть приложение Модуля 1:

  1. Удалите папку lib , если она есть, и запустите: pip install -t lib -r requirements.txt чтобы повторно заполнить lib . Вместо этого вам может потребоваться использовать команду pip2 , если у вас установлены Python 2 и 3.
  2. Убедитесь, что вы установили и инициализировали инструмент командной строки gcloud и проверили его использование.
  3. Настройте свой облачный проект с помощью gcloud config set project PROJECT_ID если вы не хотите вводить свой PROJECT_ID при каждой выдаваемой команде gcloud .
  4. Разверните пример приложения с помощью gcloud app deploy
  5. Убедитесь, что приложение Модуля 1 работает как положено, без проблем с отображением последних посещений (показано ниже).

a7a9d2b80d706a2b.png

4. Обновить конфигурацию

После того как вы успешно выполнили эти шаги и увидели, что ваше веб-приложение работает, вы готовы портировать это приложение на Python 3, начиная с config.

Добавьте SDK в файл require.txt.

Среда выполнения App Engine Python 3 значительно снижает затраты на использование сторонних библиотек. Все, что необходимо, — это перечислить их в requirements.txt . Чтобы использовать встроенные службы Python 3, добавьте в него пакет App Engine SDK appengine-python-standard . Пакет SDK присоединяется к Flask из модуля 1:

flask
appengine-python-standard

Обновить app.yaml

Выполните следующие действия, чтобы применить изменения конфигурации к файлу app.yaml :

  1. Замените директиву runtime поддерживаемой версией Python 3; например, укажите python310 для Python 3.10.
  2. Удалите директивы threadsafe и api_version поскольку ни одна из них не используется в Python 3.
  3. Полностью удалите раздел handlers , поскольку в этом приложении есть только обработчики сценариев . Если в вашем приложении есть статические обработчики файлов , оставьте их в handlers нетронутыми.
  4. Среда выполнения Python 3 не поддерживает встроенные сторонние библиотеки, как среда выполнения Python 2. Если в вашем приложении есть раздел libraries в app.yaml , удалите весь раздел. (Обязательные пакеты должны быть перечислены в requirements.txt только так же, как и невстроенные библиотеки.) В нашем примере приложения нет раздела libraries , поэтому переходите к следующему шагу.
  5. Чтобы использовать ее, создайте директиву app_engine_apis со значением true — это соответствует добавлению пакета App Engine SDK в requirements.txt выше.

Краткое описание необходимых изменений в app.yaml :

ДО:

runtime: python27
threadsafe: yes
api_version: 1

handlers:
- url: /.*
  script: main.app

ПОСЛЕ:

runtime: python310
app_engine_apis: true

Другие файлы конфигурации

Поскольку все сторонние пакеты должны быть перечислены только в requirements.txt , если в appengine_config.py нет чего-то особенного, это не нужно, поэтому удалите его. Аналогичным образом, поскольку все сторонние библиотеки автоматически устанавливаются во время процесса сборки, нет необходимости копировать или продавать их, то есть больше не нужно ни команды pip install , ни папки lib , поэтому удалите их. Подведение итогов:

  • Удалить файл appengine_config.py .
  • Удалить папку lib

На этом все необходимые изменения конфигурации завершены.

5. Измените код приложения.

Для доступа к большинству доступных встроенных служб в среде выполнения Python 3 требуется небольшой фрагмент кода, заключающий объект приложения интерфейса шлюза веб-сервера (WSGI) в main.py Функция-обертка — google.appengine.api.wrap_wsgi_app() , и вы используете ее, импортируя ее и обертывая ею свой объект WSGI. Внесите изменения ниже, чтобы отразить необходимое обновление для Flask в main.py :

ДО:

from flask import Flask, render_template, request
from google.appengine.ext import ndb

app = Flask(__name__)

ПОСЛЕ:

from flask import Flask, render_template, request
from google.appengine.api import wrap_wsgi_app
from google.appengine.ext import ndb

app = Flask(__name__)
app.wsgi_app = wrap_wsgi_app(app.wsgi_app)

См. документацию по примерам упаковки WSGI для других платформ Python.

Хотя этот пример позволяет предоставить вашему приложению доступ к большинству встроенных служб Python 3, другие, такие как Blobstore и Mail, требуют дополнительного кода. Мы рассмотрим эти примеры в другом модуле миграции.

На этом завершаются все необходимые изменения для добавления использования встроенных служб App Engine в пример приложения Модуля 1. Приложение уже совместимо с Python 2 и 3, поэтому для его переноса на Python 3 не требуется никаких дополнительных изменений, кроме тех, что вы уже сделали в конфигурации. Последний шаг: разверните это измененное приложение в среде выполнения App Engine Python 3 следующего поколения и подтвердите успешность обновлений.

6. Подведение итогов/очистка

В этом разделе завершается работа над кодом путем развертывания приложения и проверки его работы по назначению и с учетом всех отраженных выходных данных. После проверки приложения выполните любую очистку и обдумайте следующие шаги.

Развертывание и проверка приложения

Разверните приложение Python 3 с помощью gcloud app deploy и убедитесь, что приложение работает так же, как и в Python 2. Ни одна из функций не меняется, поэтому выходные данные должны быть идентичны приложению Модуля 1:

a7a9d2b80d706a2b.png

Заключительные замечания

Поздравляем с тем, что вы сделали первый шаг к переносу приложений Python 2 App Engine на Python 3, сохранив при этом использование встроенных сервисов.

Очистить

Общий

Если вы закончили, мы рекомендуем вам отключить приложение App Engine , чтобы избежать выставления счетов. Однако, если вы хотите протестировать или поэкспериментировать еще, на платформе App Engine предусмотрена бесплатная квота , поэтому, пока вы не превысите этот уровень использования, с вас не будет взиматься плата. Это касается вычислений, но за соответствующие службы App Engine также может взиматься плата, поэтому для получения дополнительной информации посетите страницу с ценами . Если эта миграция включает в себя другие облачные службы, они оплачиваются отдельно. В любом случае, если применимо, см. раздел «Специально для этой кодовой лаборатории» ниже.

Для полной информации: развертывание на бессерверной вычислительной платформе Google Cloud, такой как App Engine, требует незначительных затрат на сборку и хранение . Cloud Build имеет собственную бесплатную квоту, как и Cloud Storage . Хранение этого изображения использует часть этой квоты. Однако вы можете жить в регионе, где нет такого уровня бесплатного пользования, поэтому следите за использованием своего хранилища, чтобы минимизировать потенциальные затраты. Конкретные «папки» облачного хранилища, которые вам следует просмотреть, включают:

  • console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/images
  • console.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com
  • Ссылки на хранилище, указанные выше, зависят от вашего PROJECT_ID и * LOC *ации, например « us », если ваше приложение размещено в США.

С другой стороны, если вы не собираетесь продолжать работу с этим приложением или другими связанными с ним программами миграции и хотите полностью удалить все, закройте свой проект .

Специально для этой кодовой лаборатории

Перечисленные ниже услуги являются уникальными для этой лаборатории кода. Дополнительную информацию см. в документации каждого продукта:

Следующие шаги

Отсюда есть несколько направлений:

  1. Обновите код с помощью встроенных служб, требующих дополнительных изменений кода.
  2. Переход от комплексных услуг к автономным облачным продуктам
  3. Миграция с App Engine на другую бессерверную платформу Cloud

Доступ к другим связанным службам, таким как Blobstore , Mail и Deferred, требует дополнительных изменений кода. Модули миграции, направленные на отказ от устаревших комплексных служб App Engine, которые следует рассмотреть, включают:

App Engine больше не является единственной бессерверной платформой в Google Cloud. Если у вас есть небольшое приложение App Engine или приложение с ограниченной функциональностью, и вы хотите превратить его в автономный микросервис, или вы хотите разбить монолитное приложение на несколько повторно используемых компонентов, это веские причины рассмотреть возможность перехода на облачные функции . Если контейнеризация стала частью вашего рабочего процесса разработки приложений, особенно если он состоит из конвейера CI/CD (непрерывная интеграция/непрерывная доставка или развертывание), рассмотрите возможность перехода на Cloud Run . Эти сценарии рассматриваются в следующих модулях:

  • Миграция с App Engine на облачные функции: см. Модуль 11.
  • Миграция с App Engine на Cloud Run: см. Модуль 4 , чтобы контейнеризировать приложение с помощью Docker, или Модуль 5 , чтобы сделать это без контейнеров, знаний Docker или Dockerfile s.

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

Независимо от того, какой модуль миграции вы рассматриваете следующим, весь контент Serverless Migration Station (лаборатории кода, видео, исходный код [при наличии]) можно получить в репозитории с открытым исходным кодом . README репозитория также содержит рекомендации о том, какие миграции следует учитывать, а также любой соответствующий «порядок» модулей миграции.

7. Дополнительные ресурсы

Ниже перечислены дополнительные ресурсы для разработчиков, изучающих этот или связанный с ним модуль миграции, а также связанные продукты. Сюда входят места для отзывов об этом контенте, ссылки на код и различная документация, которая может оказаться вам полезной.

Проблемы с Codelab/отзывы

Если вы обнаружите какие-либо проблемы с этой кодовой лабораторией, сначала найдите свою проблему, прежде чем подавать заявку. Ссылки для поиска и создания новых задач:

Миграционные ресурсы

Ссылки на папки репозитория для Модуля 1 (НАЧАЛО) и Модуля 1b (ФИНИШ) можно найти в таблице ниже. Доступ к ним также можно получить из репозитория для всех миграций кодовых лабораторий App Engine .

Кодлаб

Питон 2

Питон 3

Модуль 1

код

Н/Д

Модуль 17 (эта кодовая лаборатория)

Н/Д

код (mod1b-колба)

Интернет-ресурсы

Ниже приведены онлайн-ресурсы, которые могут иметь отношение к этому руководству:

Пакетные службы App Engine

Общая документация App Engine

Другая информация об облаке

Видео

Лицензия

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