1. Обзор
Эта серия практических занятий (самостоятельное обучение) призвана помочь разработчикам понять различные варианты развертывания своих приложений. В этом практическом занятии вы узнаете, как использовать API Google Cloud Translation с Python и запускать приложения локально или развертывать их на облачной платформе бессерверных вычислений (App Engine, Cloud Functions или Cloud Run). Пример приложения, представленный в репозитории этого руководства , можно развернуть (как минимум) восемью различными способами с минимальными изменениями конфигурации:
- Локальный Flask-сервер (Python 2)
- Локальный Flask-сервер (Python 3)
- App Engine (Python 2)
- App Engine (Python 3)
- Облачные функции (Python 3)
- Cloud Run (Python 2 через Docker)
- Cloud Run (Python 3 через Docker)
- Cloud Run (Python 3 через Cloud Buildpacks)
Данный практический урок посвящен развертыванию этого приложения на платформах, выделенных жирным шрифтом выше.
Вы узнаете, как
- Используйте API Google Cloud, в частности, Cloud Translation API (расширенные настройки/версия 3).
- Запустите базовое веб-приложение локально или разверните его на облачной бессерверной вычислительной платформе.
Что вам понадобится
- Проект Google Cloud с активной учетной записью Cloud Billing.
- Для локального запуска требуется установленный Flask, либо облачная бессерверная вычислительная платформа с поддержкой облачных развертываний.
- Базовые навыки работы с Python.
- Практические навыки работы с основными командами операционной системы.
Опрос
Как вы будете использовать этот учебный материал?
Как бы вы оценили свой опыт работы с Python?
Как бы вы оценили свой опыт использования сервисов Google Cloud?
2. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google, и вы можете изменить её в любое время.
- Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID), поэтому, если он вам не нравится, сгенерируйте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он "замораживается" после создания проекта. - Существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли Cloud, чтобы использовать ресурсы/API Cloud. Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, следуйте инструкциям по «очистке», приведенным в конце практического задания. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
3. Включите API перевода.
Включение облачных API
В этом разделе вы узнаете, как включить API Google в целом. Для нашего примера приложения вам потребуется включить Cloud Translation API , Cloud Run и Cloud Artifact Registry .
Введение
Независимо от того, какой API Google вы хотите использовать в своем приложении, его необходимо включить . В следующем примере показаны два способа включения API Cloud Vision . После того, как вы научитесь включать один API Cloud Vision, вы сможете включать и другие API, поскольку процесс аналогичен.
Вариант 1: Через Cloud Shell или интерфейс командной строки.
Хотя включение API из Cloud Console более распространено, некоторые разработчики предпочитают делать все из командной строки. Для этого необходимо найти «имя сервиса» API. Оно выглядит как URL: SERVICE_NAME . Эти .googleapis.com можно найти в таблице поддерживаемых продуктов , или же их можно получить программным путем с помощью Google Discovery API .
Вооружившись этой информацией, с помощью Cloud Shell (или вашей локальной среды разработки с установленным инструментом командной строки gcloud ) вы можете включить API следующим образом:
gcloud services enable SERVICE_NAME.googleapis.com
Например, эта команда включает API Cloud Vision:
gcloud services enable vision.googleapis.com
Эта команда включает App Engine:
gcloud services enable appengine.googleapis.com
Вы также можете включить несколько API одним запросом. Например, эта команда в командной строке включает Cloud Run, Cloud Artifact Registry и Cloud Translation API:
gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
Вариант 2: Из облачной консоли
Вы также можете включить Vision API в API Manager. В консоли Cloud перейдите в API Manager и выберите Library .

Если вы хотите включить API Cloud Vision, начните вводить "vision" в строку поиска, и появятся все, что соответствует вашему предыдущему вводу:

Выберите API, который хотите включить, и нажмите «Включить» :

Расходы
Хотя многие API Google можно использовать бесплатно, использование продуктов и API Google Cloud не является бесплатным. При включении API Cloud вас могут попросить указать активный платежный аккаунт. Однако важно отметить, что некоторые продукты Google Cloud имеют тарифный план «Всегда бесплатно» (ежедневно/ежемесячно), превышение которого необходимо для начисления платы; в противном случае с вашей кредитной карты (или указанного платежного инструмента) плата списываться не будет.
Перед включением любого API пользователям следует ознакомиться с информацией о ценах, особенно с наличием бесплатного тарифа и, если таковой имеется, то с его условиями. Если вы включаете API Cloud Vision, вам следует проверить страницу с информацией о ценах . У Cloud Vision есть бесплатная квота, и пока вы в целом не превышаете ее лимиты (в течение каждого месяца), с вас не должно взиматься никакая плата.
Цены и бесплатные тарифные планы различаются в зависимости от используемого API Google. Примеры:
- Google Cloud/GCP — тарификация каждого продукта отличается и, как правило, включает оплату за цикл vCPU, потребление хранилища, использование памяти или оплату по факту использования; см. информацию о бесплатном уровне выше.
- Google Maps — предлагает набор API и предоставляет пользователям бесплатный ежемесячный кредит в размере 200 долларов США .
- API Google Workspace (ранее G Suite) — предоставляют бесплатное использование (до определенных лимитов), покрываемое ежемесячной абонентской платой Workspace , поэтому за использование API Gmail, Google Drive, Calendar, Docs, Sheets и Slides не взимается прямая плата.
Разные продукты Google оплачиваются по-разному, поэтому обязательно обратитесь к документации вашего API для получения этой информации.
Краткое содержание
Теперь, когда вы знаете, как включить API Google в целом, перейдите в Менеджер API и включите Cloud Translation API, Cloud Run и Cloud Artifact Registry (если вы еще этого не сделали). Первый необходимо включить, потому что наше приложение его использует. Второй необходимо включить, потому что именно там хранятся образы контейнеров перед развертыванием для запуска службы Cloud Run, поэтому его и нужно включить. Если вы предпочитаете включить все API с помощью инструмента gcloud , выполните следующую команду в терминале:
gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
Хотя ежемесячная квота не указана на общей странице сводки тарифов «Всегда бесплатно» , на странице ценообразования API для перевода указано, что все пользователи получают фиксированное количество переведенных символов в месяц. Если вы не превышаете этот порог, с вас не должно взиматься никакая плата за использование API. Если возникнут какие-либо другие платежи, связанные с Google Cloud, они будут рассмотрены в конце в разделе «Очистка».
4. Получите пример кода приложения.
Клонируйте код из репозитория локально или в Cloud Shell (используя команду git clone ), либо загрузите ZIP-файл, нажав на зеленую кнопку «Код» , как показано на следующем скриншоте:

Теперь, когда у вас есть все необходимое, создайте полную копию папки для выполнения этого конкретного руководства, поскольку, скорее всего, потребуется удалить или изменить файлы. Если вы хотите выполнить другое развертывание, вы можете начать заново, скопировав оригинал, чтобы вам не пришлось клонировать или скачивать его снова.
5. Обзор демонстрационного приложения
Пример приложения — это простая версия Google Translate , которая предлагает пользователям ввести текст на английском языке и получить его эквивалентный перевод на испанский. Теперь откройте файл main.py , чтобы увидеть, как он работает. Если опустить закомментированные строки о лицензировании, он выглядит так вверху и внизу:
from flask import Flask, render_template, request
import google.auth
from google.cloud import translate
app = Flask(__name__)
_, PROJECT_ID = google.auth.default()
TRANSLATE = translate.TranslationServiceClient()
PARENT = 'projects/{}'.format(PROJECT_ID)
SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish')
# . . . [translate() function definition] . . .
if __name__ == '__main__':
import os
app.run(debug=True, threaded=True, host='0.0.0.0',
port=int(os.environ.get('PORT', 8080)))
- Импортированные модули добавляют функциональность Flask, модуль
google.authи клиентскую библиотеку Cloud Translation API. - Глобальные переменные представляют собой приложение Flask, идентификатор проекта Cloud, клиент API перевода, родительский «путь» для вызовов API перевода, а также исходный и целевой языки. В данном случае это английский (
en) и испанский (es), но вы можете изменить эти значения на другие коды языков, поддерживаемые API перевода Cloud . - Большой блок
ifвнизу используется в руководстве по локальному запуску этого приложения — он использует сервер разработки Flask для обслуживания нашего приложения. Этот раздел также присутствует в руководствах по развертыванию в Cloud Run на случай, если веб-сервер не включен в контейнер. Вам будет предложено включить включение сервера в контейнер, но если вы это пропустите, код приложения будет использовать сервер разработки Flask. (Это не проблема для App Engine или Cloud Functions, поскольку это платформы с исходным кодом, то есть Google Cloud предоставляет и запускает веб-сервер по умолчанию.)
Наконец, в середине файла main.py находится сердце приложения — функция translate() :
@app.route('/', methods=['GET', 'POST'])
def translate(gcf_request=None):
"""
main handler - show form and possibly previous translation
"""
# Flask Request object passed in for Cloud Functions
# (use gcf_request for GCF but flask.request otherwise)
local_request = gcf_request if gcf_request else request
# reset all variables (GET)
text = translated = None
# if there is data to process (POST)
if local_request.method == 'POST':
text = local_request.form['text']
data = {
'contents': [text],
'parent': PARENT,
'target_language_code': TARGET[0],
}
# handle older call for backwards-compatibility
try:
rsp = TRANSLATE.translate_text(request=data)
except TypeError:
rsp = TRANSLATE.translate_text(**data)
translated = rsp.translations[0].translated_text
# create context & render template
context = {
'orig': {'text': text, 'lc': SOURCE},
'trans': {'text': translated, 'lc': TARGET},
}
return render_template('index.html', **context)
Основная функция принимает ввод пользователя и вызывает API перевода для выполнения основной работы. Давайте разберем это подробнее:
- Проверьте, поступают ли запросы от Cloud Functions, используя переменную
local_request. Cloud Functions отправляет собственный объект запроса Flask, тогда как все остальные (работающие локально или развертываемые в App Engine или Cloud Run) получают объект запроса непосредственно от Flask. - Сбросьте основные переменные формы. Это в первую очередь касается GET-запросов, поскольку в POST-запросах эти переменные будут заменены другими данными.
- Если это POST-запрос, получите текст для перевода и создайте JSON-структуру, представляющую требования к метаданным API. Затем вызовите API, используя в случае, если пользователь использует более старую библиотеку, предыдущую версию API.
- В любом случае, отформатируйте фактические результаты (POST) или отключите данные (GET) в контексте шаблона и выполните отрисовку.
Визуальная часть приложения находится в шаблоне файла index.html . Она отображает результаты предыдущего перевода (в противном случае — пустое поле), после чего следует форма с запросом на перевод:
<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<h2>My Google Translate (1990s edition)</h2>
{% if trans['text'] %}
<h4>Previous translation</h4>
<li><b>Original</b>: {{ orig['text'] }} (<i>{{ orig['lc'][0] }}</i>)</li>
<li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}
<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>
6. Настройте Docker для сборки образа Python 3.
Теперь откройте файл Dockerfile , который без информации о лицензии выглядит следующим образом:
#FROM python:3-slim
FROM python:2-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python", "main.py"]
Как видите, по умолчанию он настроен для Python 2, поэтому давайте изменим это, либо изменив строку FROM с python:2-slim на python:3-slim , либо раскомментировав верхнюю строку и удалив старую строку FROM . После этого Dockerfile должен выглядеть так:
FROM python:3-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python", "main.py"]
7. Разверните сервис.
Теперь вы готовы развернуть свою службу перевода в Cloud Run, выполнив следующую команду:
gcloud run deploy translate --source . --allow-unauthenticated --platform managed
Результат должен выглядеть следующим образом и содержать подсказки для дальнейших действий:
$ gcloud run deploy translate --source . --allow-unauthenticated --platform managed Please specify a region: [1] asia-east1 [2] asia-east2 . . . (other regions) . . . [28] us-west4 [29] cancel Please enter your numeric choice: REGION_CHOICE To make this the default region, run `gcloud config set run/region REGION`. Deploying from source requires an Artifact Registry repository to store build artifacts. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)? This command is equivalent to running "gcloud builds submit --pack image=[IMAGE] ." and "gcloud run deploy translate --image [IMAGE]" Building . . . and deploying container to Cloud Run service [translate] in project [PROJECT_ID] region [REGION] ✓ Building and deploying... Done. ✓ Creating Container Repository... ✓ Uploading sources... ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/60e1b 9bb-b991-4b4e-8d8a-HASH?project=PROJECT_NUMBER]. ✓ Creating Revision... ✓ Routing traffic... ✓ Setting IAM Policy... Done. Service [translate] revision [translate-00001-xyz] has been deployed and is serving 100 percent of traffic. Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app
Теперь, когда ваше приложение доступно по всему миру, вы сможете получить к нему доступ по URL-адресу, содержащему идентификатор вашего проекта, как показано в результатах развертывания:

Переведите что-нибудь, чтобы увидеть, как это работает!

8. Заключение
Поздравляем! Вы научились включать API облачного перевода, получать необходимые учетные данные и развертывать простое веб-приложение в Python 3 Cloud Run!
Уборка
API облачного перевода позволяет бесплатно переводить фиксированное количество символов в месяц . App Engine также имеет бесплатную квоту , как и Cloud Functions и Cloud Run . За превышение квоты взимается плата. Если вы планируете перейти к следующему практическому занятию, вам не нужно закрывать приложение.
Однако, если вы пока не готовы перейти к следующему уроку или опасаетесь, что интернет обнаружит только что развернутое вами приложение, отключите приложение App Engine , удалите облачную функцию или отключите службу Cloud Run , чтобы избежать дополнительных расходов. Когда вы будете готовы перейти к следующему практическому занятию, вы можете снова включить её. С другой стороны, если вы не собираетесь продолжать работу над этим приложением или другими практическими занятиями и хотите полностью удалить всё, вы можете закрыть свой проект .
Кроме того, развертывание на бессерверной вычислительной платформе Google Cloud влечет за собой незначительные затраты на сборку и хранение . Cloud Build, как и Cloud Storage , имеет собственную бесплатную квоту. Для большей прозрачности Cloud Build создает образ вашего приложения, который затем хранится либо в Cloud Container Registry , либо в Artifact Registry , его преемнике. Хранение этого образа расходует часть этой квоты, как и исходящий трафик сети при передаче этого образа в сервис. Однако вы можете проживать в регионе, где нет такого бесплатного уровня, поэтому следите за использованием хранилища, чтобы минимизировать потенциальные затраты.
9. Дополнительные ресурсы
В следующих разделах вы найдете дополнительные материалы для чтения, а также рекомендуемые упражнения для закрепления знаний, полученных в ходе изучения этого руководства.
Дополнительное исследование
Теперь, когда у вас есть некоторый опыт работы с API перевода, давайте выполним несколько дополнительных упражнений для дальнейшего развития ваших навыков. Чтобы продолжить обучение, измените наше тестовое приложение следующим образом:
- Выполните все остальные задания этого практического руководства для локального запуска или развертывания на бессерверных вычислительных платформах Google Cloud (см. README репозитория ).
- Выполните это руководство, используя другой язык программирования.
- Измените это приложение, чтобы оно поддерживало другие исходные или целевые языки.
- Обновите это приложение, чтобы оно могло переводить текст на несколько языков; измените файл шаблона, чтобы в нем был выпадающий список поддерживаемых целевых языков.
Узнать больше
Google App Engine
- Главная страница App Engine
- Документация App Engine
- Быстрый старт для Python 3 App Engine
- Учетные записи служб по умолчанию для App Engine
- Среда выполнения Python 2 App Engine (Standard)
- Среда выполнения Python 3 App Engine (Standard)
- Различия между средами выполнения Python 2 и 3 App Engine (Standard)
- Руководство по миграции с Python 2 на Python 3 App Engine (Standard)
Google Cloud Functions
- Главная страница Cloud Functions
- Документация по Cloud Functions
- Быстрый старт работы с Python Cloud Functions
- Учетные записи сервиса по умолчанию для облачных функций
Google Cloud Run
- Главная страница Cloud Run
- Документация Cloud Run
- Быстрый старт Python Cloud Run
- Учетные записи службы по умолчанию для Cloud Run
Google Cloud Buildpacks, Container Registry, Artifact Registry
- анонс Cloud Buildpacks
- Репозиторий Cloud Buildpacks
- Главная страница Реестра облачных артефактов
- Документация реестра облачных артефактов
- Главная страница реестра облачных контейнеров
- Документация Cloud Container Registry
Google Cloud Translation и Google ML Kit
- Главная страница Cloud Translation
- Документация по облачному переводу
- Страница с ценами на API перевода
- Все API-интерфейсы, являющиеся «строительными блоками» для облачных решений в области ИИ/машинного обучения.
- Google ML Kit (подмножество API облачных решений для ИИ/машинного обучения для мобильных устройств)
- API перевода Google ML Kit
Другие продукты/страницы Google Cloud
- Поддержка Python в Google Cloud
- клиентские библиотеки Google Cloud
- Уровень Google Cloud «Всегда бесплатно»
- Вся документация Google Cloud
Python и Flask
Лицензия
Данный учебный материал распространяется под лицензией Creative Commons Attribution 2.0 Generic License, а исходный код в репозитории распространяется под лицензией Apache 2.0.