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.
Что вам понадобится
- Проект Google Cloud с активным платежным аккаунтом GCP.
- Базовые навыки Python
- Знание основных команд Linux.
- Базовые знания разработки и развертывания приложений App Engine.
- Рабочее приложение App Engine Модуля 1 (завершите его кодовую сборку [рекомендуется] или скопируйте приложение из репозитория).
Опрос
Как вы будете использовать этот урок?
Как бы вы оценили свой опыт работы с 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 , но с сохранением использования хранилища данных.
Это руководство включает в себя следующие шаги:
- Настройка/Предварительная работа
- Обновить конфигурацию
- Изменить код приложения
3. Настройка/Предварительная работа
В этом разделе объясняется, как:
- Настройте свой облачный проект
- Получить базовый образец приложения
- (Повторное)развертывание и проверка базового приложения.
Эти шаги гарантируют, что вы начнете с рабочего кода.
1. Проект установки
Если вы завершили лабораторную работу по Модулю 1, мы рекомендуем повторно использовать тот же проект (и код). Альтернативно создайте новый облачный проект или повторно используйте другой существующий проект. Убедитесь, что у проекта есть активный платежный аккаунт, в котором включена служба App Engine.
2. Получите базовый образец приложения.
Одним из обязательных условий для этой лаборатории кода является наличие рабочего приложения App Engine Модуля 1: заполните лабораторию кода Модуля 1 (рекомендуется) или скопируйте приложение Модуля 1 из репозитория. Независимо от того, используете ли вы свой или наш, мы «НАЧНЕМ» с кода Модуля 1. Эта лаборатория кода проведет вас через каждый шаг, завершая кодом, похожим на код, который находится в папке репозитория Модуля 7 «FINISH».
- НАЧАЛО: папка модуля 1 (Python 2)
- ОТДЕЛКА: папка модуля 1b (Python 3)
- Весь репозиторий (для клонирования или загрузки ZIP-файла )
Независимо от того, какое приложение Модуля 1 вы используете, папка должна выглядеть так, как показано ниже, возможно, с папкой lib
:
$ ls README.md appengine_config.py requirements.txt app.yaml main.py templates
3. (Повторное) развертывание базового приложения.
Выполните следующие шаги, чтобы (повторно) развернуть приложение Модуля 1:
- Удалите папку
lib
, если она есть, и запустите:pip install -t lib -r requirements.txt
чтобы повторно заполнитьlib
. Вместо этого вам может потребоваться использовать командуpip2
, если у вас установлены Python 2 и 3. - Убедитесь, что вы установили и инициализировали инструмент командной строки
gcloud
и проверили его использование. - Настройте свой облачный проект с помощью
gcloud config set project
PROJECT_ID
если вы не хотите вводить свойPROJECT_ID
при каждой выдаваемой командеgcloud
. - Разверните пример приложения с помощью
gcloud app deploy
- Убедитесь, что приложение Модуля 1 работает как положено, без проблем с отображением последних посещений (показано ниже).
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
:
- Замените директиву
runtime
поддерживаемой версией Python 3; например, укажитеpython310
для Python 3.10. - Удалите директивы
threadsafe
иapi_version
поскольку ни одна из них не используется в Python 3. - Полностью удалите раздел
handlers
, поскольку в этом приложении есть только обработчики сценариев . Если в вашем приложении есть статические обработчики файлов , оставьте их вhandlers
нетронутыми. - Среда выполнения Python 3 не поддерживает встроенные сторонние библиотеки, как среда выполнения Python 2. Если в вашем приложении есть раздел
libraries
вapp.yaml
, удалите весь раздел. (Обязательные пакеты должны быть перечислены вrequirements.txt
только так же, как и невстроенные библиотеки.) В нашем примере приложения нет разделаlibraries
, поэтому переходите к следующему шагу. - Чтобы использовать ее, создайте директиву
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:
Заключительные замечания
- Сравните то, что у вас есть, с тем, что находится в папке Модуля 1b (ФИНИШ). Если вы допустили ошибку, внесите необходимые изменения.
- Сравните модуль 0
main.py
рядом с модулем 1bmain.py
на этой странице, если ваше приложение все еще используетwebapp2
, а затем выполните лабораторную работу по модулю 1 , чтобы узнать, как перейти сwebapp2
на Flask.
Поздравляем с тем, что вы сделали первый шаг к переносу приложений 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
», если ваше приложение размещено в США.
С другой стороны, если вы не собираетесь продолжать работу с этим приложением или другими связанными с ним программами миграции и хотите полностью удалить все, закройте свой проект .
Специально для этой кодовой лаборатории
Перечисленные ниже услуги являются уникальными для этой лаборатории кода. Дополнительную информацию см. в документации каждого продукта:
- Служба хранилища данных App Engine предоставляется Cloud Datastore (Cloud Firestore в режиме хранилища данных), который также имеет уровень бесплатного пользования; дополнительную информацию см. на странице цен .
Следующие шаги
Отсюда есть несколько направлений:
- Обновите код с помощью встроенных служб, требующих дополнительных изменений кода.
- Переход от комплексных услуг к автономным облачным продуктам
- Миграция с App Engine на другую бессерверную платформу Cloud
Доступ к другим связанным службам, таким как Blobstore , Mail и Deferred, требует дополнительных изменений кода. Модули миграции, направленные на отказ от устаревших комплексных служб App Engine, которые следует рассмотреть, включают:
- Модуль 2 : App Engine NDB в Cloud NDB
- Модули 7–9 : Очередь задач App Engine (перенос задач) в облачные задачи.
- Модули 12–13 : Memcache App Engine в Cloud Memorystore
- Модули 15–16 . Перенос Blobstore App Engine в облачное хранилище.
- Модули 18–19 : Очередь задач App Engine (извлечение задач) в Cloud Pub/Sub.
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 |
Н/Д | ||
Модуль 17 (эта кодовая лаборатория) | Н/Д | код (mod1b-колба) |
Интернет-ресурсы
Ниже приведены онлайн-ресурсы, которые могут иметь отношение к этому руководству:
Пакетные службы App Engine
- Доступ к связанным сервисам в среде выполнения нового поколения Python 3.
- Приложение модуля 0 (Python 2) и приложение модуля 1b (Python 3) параллельное сравнение
- Примеры оболочек объектов WSGI веб-платформы App Engine SDK
- Поддержка встроенных сервисов App Engine при запуске среды выполнения следующего поколения (2021 г.)
Общая документация App Engine
- Документация App Engine
- Среда выполнения Python 2 App Engine (стандартная среда)
- Использование встроенных библиотек App Engine в App Engine Python 2
- Среда выполнения Python 3 App Engine (стандартная среда)
- Различия между средами выполнения App Engine Python 2 и 3 (стандартная среда)
- Руководство по переходу с Python 2 на App Engine (стандартная среда)
- Информация о ценах и квотах App Engine
- Запуск платформы App Engine второго поколения (2018 г.)
- Долгосрочная поддержка устаревших сред выполнения
- Репозиторий образцов миграции документации
- Репозиторий образцов миграции, предоставленных сообществом
Другая информация об облаке
- Python на облачной платформе Google
- Клиентские библиотеки Google Cloud Python
- Уровень Google Cloud «Всегда бесплатно»
- Google Cloud SDK (инструмент командной строки
gcloud
) - Вся документация Google Cloud
Видео
- Станция бессерверной миграции
- Бессерверные экспедиции
- Подпишитесь на Google Cloud Tech
- Подпишитесь на Google Developers
Лицензия
Эта работа распространяется под лицензией Creative Commons Attribution 2.0 Generic License.