1. Обзор
Эта серия курсов по кодированию (практические руководства для самостоятельного обучения) призвана помочь разработчикам понять различные варианты, которые у них есть при развертывании своих приложений. В этой лаборатории кода вы узнаете, как использовать Google Cloud Translation API с Python и запускать его локально или развертывать на облачной бессерверной вычислительной платформе (App Engine, Cloud Functions или Cloud Run). Пример приложения, найденный в репозитории этого руководства, можно развернуть (как минимум) восемью различными способами с небольшими изменениями конфигурации:
- Локальный сервер Flask (Python 2)
- Локальный сервер Flask (Python 3)
- Механизм приложений (Python 2)
- Механизм приложений (Python 3)
- Облачные функции (Python 3)
- Cloud Run (Python 2 через Docker)
- Cloud Run (Python 3 через Docker)
- Cloud Run (Python 3 через пакеты Cloud Buildpacks)
Эта лаборатория кода посвящена развертыванию этого приложения на платформах, выделенных жирным шрифтом выше.
Вы узнаете, как
- Используйте Google Cloud API, в частности Cloud Translation API (расширенный/v3).
- Запустите базовое веб-приложение локально или разверните его на облачной платформе безсерверных вычислений.
Что вам понадобится
- Проект Google Cloud с активной учетной записью Cloud Billing.
- Flask установлен для локальной работы или облачная платформа безсерверных вычислений, поддерживающая облачные развертывания.
- Базовые навыки Python
- Знание основных команд операционной системы.
Опрос
Как вы будете использовать этот урок?
Как бы вы оценили свой опыт работы с 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 долларов США .
3. Включите API перевода.
В этом разделе вы узнаете, как в целом включить API Google. Для нашего примера приложения вы включите Cloud Translation API и службу Cloud Functions .
Введение
Независимо от того, какие API Google вы хотите использовать в своем приложении, они должны быть включены . В следующем примере показаны два способа включения API Cloud Vision . После того, как вы узнаете, как включить один Cloud API, вы сможете включить и другие API, поскольку процесс аналогичен.
Вариант 1. Из Cloud Shell или интерфейса командной строки.
Хотя включение API из облачной консоли встречается чаще, некоторые разработчики предпочитают делать все из командной строки. Для этого вам нужно найти «имя службы» API. Это выглядит как URL-адрес: SERVICE_NAME
.googleapis.com
. Их можно найти в таблице «Поддерживаемые продукты» или программно запросить их с помощью Google Discovery API .
Вооружившись этой информацией, с помощью Cloud Shell (или локальной среды разработки с установленным инструментом командной строки gcloud
) вы можете включить API следующим образом:
gcloud services enable SERVICE_NAME.googleapis.com
Например, эта команда включает Cloud Vision API:
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. В Cloud Console перейдите в API Manager и выберите Library .
Если вы хотите включить API Cloud Vision, начните вводить слово «vision» в строке поиска, и появится все, что соответствует введенному вами на данный момент:
Выберите API, который вы хотите включить, и нажмите «Включить» :
Расходы
Хотя многие API Google можно использовать бесплатно, использование продуктов и API Google Cloud не является бесплатным. При включении Cloud API вас могут попросить указать активную учетную запись для выставления счетов. Однако важно отметить, что некоторые продукты Google Cloud имеют уровень «Всегда бесплатно» (ежедневно/ежемесячно), который вам необходимо превысить, чтобы взиматься плата за выставление счетов; в противном случае с вашей кредитной карты (или указанного платежного инструмента) средства не будут сняты.
Перед включением пользователям следует ознакомиться с информацией о ценах на любой API, особенно отметив, есть ли у него уровень бесплатного пользования, и если да, то какой он. Если бы вы включали API Cloud Vision, вам нужно было бы проверить страницу с информацией о ценах . У Cloud Vision есть бесплатная квота, и пока вы в совокупности (в течение каждого месяца) не выходите за ее пределы, с вас не должно взиматься никаких расходов.
Цены и уровни бесплатного пользования различаются в зависимости от API Google. Примеры:
- Google Cloud/GCP — счета за каждый продукт выставляются по-разному, и обычно оплата производится за цикл виртуального ЦП, потребление хранилища, использование памяти или оплата по факту использования; см. информацию об уровне бесплатного пользования выше.
- Карты Google — содержат набор 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 Functions (если вы еще этого не сделали), последнее, потому что наше приложение будет использовать его, а также первый, потому что вы развертываете облачную функцию. Если вы предпочитаете делать это из командной строки, введите вместо этого следующую команду:
gcloud services enable cloudfunctions.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, идентификатор облачного проекта, клиент API перевода, родительский «путь к местоположению» для вызовов API перевода, а также исходный и целевой языки. В данном случае это английский (
en
) и испанский (es
), но вы можете изменить эти значения на другие языковые коды , поддерживаемые Cloud Translation API . - Большой блок
if
внизу используется в руководстве для локального запуска этого приложения — он использует сервер разработки Flask для обслуживания нашего приложения. В этом разделе также представлены учебные пособия по развертыванию Cloud Run на случай, если веб-сервер не включен в контейнер. Вас попросят включить объединение сервера в контейнер, но если вы пропустите это, код приложения вернется к использованию сервера разработки Flask. (Это не проблема с App Engine или облачными функциями, поскольку это платформы на основе исходных кодов, то есть 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 перевода для выполнения тяжелой работы. Давайте разберемся:
- Проверьте, поступают ли запросы от облачных функций, используя переменную
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. Разверните сервис
Чтобы развернуть службу перевода в облачных функциях (Python 3), выполните следующую команду:
gcloud functions deploy translate --runtime python37 --trigger-http --allow-unauthenticated
Вывод должен выглядеть следующим образом и содержать подсказки для следующих шагов:
$ gcloud functions deploy translate --runtime python37 --trigger-http --allow-unauthenticated Deploying function (may take a while - up to 2 minutes)...⠹ For Cloud Build Stackdriver Logs, visit: https://console.cloud.google.com/logs/viewer?project=PROJECT_ID&advancedFilter=resource.type%3Dbuild%0Aresource.labels.build_id%3D7e32429d-ec36-422c-8a8b-43c4d661a15c%0AlogName%3Dprojects%2FPROJECT_ID%2Flogs%2Fcloudbuild Deploying function (may take a while - up to 2 minutes)...done. availableMemoryMb: 256 buildId: 7e32429d-ec36-422c-8a8b-43c4d661a15 entryPoint: translate httpsTrigger: securityLevel: SECURE_OPTIONAL url: https://REGION-PROJECT_ID.cloudfunctions.net/translate ingressSettings: ALLOW_ALL labels: deployment-tool: cli-gcloud name: projects/PROJECT_ID/locations/REGION/functions/translate runtime: python37 serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com sourceUploadUrl: https://storage.googleapis.com/gcf-upload-REGION-873f8448-838f-4eb2-beda-3e200a1420d/cb1cbdca-34eb-41d0-88d6-c276d5205fb.zip?GoogleAccessId=service-104690130103@gcf-admin-robot.iam.gserviceaccount.com&Expires=1619139674 status: ACTIVE timeout: 60s updateTime: '2021-04-23T00:32:58.065Z' versionId: '3'
Теперь, когда ваше приложение доступно по всему миру, вы сможете получить к нему доступ по URL-адресу, содержащему идентификатор вашего проекта, как показано в результатах развертывания. URL-адрес должен выглядеть примерно так: https://
REGION
-
PROJECT_ID
.cloudfunctions.net/translate
, который зависит от выбранного вами региона, а также идентификатора вашего облачного проекта.
Переведите что-нибудь, чтобы увидеть, как это работает!
7. Заключение
Поздравляем! Вы узнали, как включить Cloud Translation API, получить необходимые учетные данные и развернуть простое веб-приложение в Cloud Functions! Подробнее об этом развертывании можно узнать из этой таблицы в репозитории .
Очистить
Cloud Translation API позволяет бесплатно переводить фиксированное количество символов в месяц . App Engine также имеет бесплатную квоту , то же самое касается Cloud Functions и Cloud Run . Если одно из этих значений будет превышено, с вас будет взиматься плата. Если вы планируете перейти к следующей лаборатории кода, вам не нужно закрывать приложение.
Однако, если вы еще не готовы перейти к следующему руководству или обеспокоены тем, что Интернет обнаружит только что развернутое вами приложение, отключите приложение App Engine , удалите функцию Cloud или отключите службу Cloud Run, чтобы избежать несение расходов. Когда вы будете готовы перейти к следующей лаборатории кода, вы можете снова включить ее. С другой стороны, если вы не собираетесь продолжать работу с этим приложением или другими лабораториями кода и хотите полностью удалить все, вы можете закрыть свой проект .
Кроме того, развертывание на бессерверной вычислительной платформе Google Cloud требует незначительных затрат на сборку и хранение . Cloud Build имеет собственную бесплатную квоту, как и Cloud Storage . Для большей прозрачности Cloud Build создает образ вашего приложения, который затем сохраняется либо в реестре облачных контейнеров , либо в реестре артефактов , его преемнике. Хранение этого изображения использует часть этой квоты, как и выходная сеть при передаче этого изображения в службу. Однако вы можете жить в регионе, где нет такого уровня бесплатного пользования, поэтому следите за использованием хранилища, чтобы минимизировать потенциальные затраты.
8. Дополнительные ресурсы
В следующих разделах вы можете найти дополнительные материалы для чтения, а также рекомендуемые упражнения, которые помогут расширить ваши знания, полученные в результате прохождения этого руководства.
Дополнительное исследование
Теперь, когда у вас есть некоторый опыт работы с API перевода, давайте выполним несколько дополнительных упражнений для дальнейшего развития ваших навыков. Чтобы продолжить обучение, измените наш пример приложения, чтобы он выполнял следующие действия:
- Завершите все остальные версии этой лаборатории кода для локального запуска или развертывания на бессерверных вычислительных платформах Google Cloud (см. README репозитория ).
- Выполните это руководство, используя другой язык программирования.
- Измените это приложение, чтобы оно поддерживало разные исходные или целевые языки.
- Обновите это приложение, чтобы иметь возможность переводить текст на несколько языков; измените файл шаблона, чтобы в нем был раскрывающийся список поддерживаемых целевых языков.
Узнать больше
Google App Engine
- Домашняя страница App Engine
- Документация App Engine
- Краткое руководство по Python 3 App Engine
- Учетные записи служб по умолчанию для App Engine
- Среда выполнения Python 2 App Engine (стандартная)
- Среда выполнения Python 3 App Engine (стандартная)
- Различия между средами выполнения Python 2 и 3 App Engine (стандартными)
- Руководство по переходу с Python 2 на App Engine (стандартный)
Облачные функции Google
- Домашняя страница облачных функций
- Документация по облачным функциям
- Краткое руководство по облачным функциям Python
- Учетные записи служб по умолчанию для облачных функций
Google Cloud Run
- Домашняя страница Cloud Run
- Документация Cloud Run
- Краткое руководство по Python Cloud Run
- Учетные записи служб по умолчанию для Cloud Run
Пакеты сборки Google Cloud, реестр контейнеров, реестр артефактов
- Анонс облачных сборочных пакетов
- Репозиторий облачных сборочных пакетов
- Домашняя страница реестра облачных артефактов
- Документация по реестру облачных артефактов
- Домашняя страница реестра облачных контейнеров
- Документация по реестру облачных контейнеров
Google Cloud Translation и Google ML Kit
- Домашняя страница облачного перевода
- Документация по облачному переводу
- Страница цен на API перевода
- Все API «строительных блоков» Cloud AI/ML
- Google ML Kit (подмножество Cloud AI/ML API для мобильных устройств)
- API перевода Google ML Kit
Другие продукты/страницы Google Cloud
- Поддержка Google Cloud Python
- Клиентские библиотеки Google Cloud
- Уровень Google Cloud «Всегда бесплатно»
- Вся документация Google Cloud
Питон и колба
Лицензия
Это руководство доступно под лицензией Creative Commons Attribution 2.0 Generic License, а исходный код в репозитории — под лицензией Apache 2.