Разверните базовую версию "Google Translate" Приложение Express.js в App Engine, Cloud Functions и Cloud Run

1. Обзор

Эта серия практических занятий (в удобном для вас темпе) призвана помочь разработчикам понять различные возможности развертывания своих приложений. Вы узнаете, как использовать API Google Cloud Translation в простом веб-приложении. Это приложение можно запустить локально или развернуть на облачной платформе для бессерверных вычислений ( App Engine, Cloud Functions или Cloud Run ).

В этом уроке по JavaScript вы будете использовать Node.js и веб-фреймворк Express.js . Вы также узнаете, как получить доступ к API Google Cloud с наших бессерверных платформ. Все версии этого приложения взяты из открытого репозитория "nebulous serverless" , который включает версию этого приложения на Python и независимые практические задания. В репозитории также размещены аналогичные приложения, демонстрирующие разработчикам, как получить доступ к API Google, не относящимся к Cloud, с наших бессерверных платформ.

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

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

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

  • Проект Google Cloud с активной учетной записью Cloud Billing.
  • Для запуска локально необходимо установить веб-фреймворк ( Flask для тех, кто изучает Python, или Express для тех, кто изучает JavaScript/Node.js).
  • По крайней мере, одна бессерверная вычислительная платформа, поддерживающая развертывание в Google Cloud.
  • Базовые навыки программирования (Python или JavaScript/Node.js)
  • Практические навыки работы с основными командами операционной системы.

Опрос

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

Прочитайте текст и выполните упражнения. Читайте только это

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

Новичок Средний Профессионал

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

Новичок Средний Профессионал

2. Настройка и требования

Настройка среды для самостоятельного обучения

  1. Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google, и вы можете изменить её в любое время.
  • Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как PROJECT_ID ), поэтому, если он вам не нравится, сгенерируйте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он "замораживается" после создания проекта.
  • Существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
  1. Далее вам потребуется включить оплату в консоли Cloud, чтобы использовать ресурсы/API Cloud. Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, следуйте инструкциям по «очистке», приведенным в конце практического задания. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

3. Включите API перевода.

В этом разделе вы узнаете, как включить API Google в целом. Для нашего примера приложения вам потребуется включить Cloud Translation API . Вам также потребуется включить App Engine, Cloud Functions и/или Cloud Run (а также Cloud Artifact Registry) в зависимости от того, на какой платформе (платформах) вы хотите развернуть пример приложения.

Включение API Google

Введение

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

Вариант 1: интерфейс командной строки gcloud (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

Пример 1: Включение API Cloud Vision

gcloud services enable vision.googleapis.com

Пример 2: Включение Google App Engine

gcloud services enable appengine.googleapis.com

Пример 3: Включение нескольких API одним запросом. Например, если в этом практическом занятии участники развертывают приложение с использованием Cloud Translation API в App Engine, Cloud Functions и Cloud Run, командная строка будет выглядеть следующим образом:

gcloud services enable appengine.googleapis.com cloudfunctions.googleapis.com artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com

Эта команда включает App Engine, Cloud Functions, Cloud Run и Cloud Translation API. Кроме того, она включает Cloud Artifact Registry, поскольку именно там система Cloud Build должна регистрировать образы контейнеров для развертывания в Cloud Run.

Вариант 2: Облачная консоль

Вы также можете включить API Google в Менеджере API. В консоли Cloud перейдите в Менеджер API и выберите Библиотека .

fb0f1d315f122d4a.png

Начните вводить название API в строку поиска, чтобы увидеть соответствующие результаты:

2275786a24f8f204.png

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

7960a6752a1da767.png

Процесс активации всех API одинаков независимо от того, какой API Google вы хотите использовать.

Расходы

Многие API Google можно использовать бесплатно, однако использование большинства продуктов и API Google Cloud влечет за собой определенные затраты. При включении API Cloud вам может потребоваться активный платежный аккаунт. Однако некоторые продукты Google Cloud имеют тарифный план «Всегда бесплатно» , превышение которого влечет за собой оплату.

Новые пользователи GCP могут воспользоваться бесплатной пробной версией , которая в настоящее время стоит 300 долларов США и действует в течение первых 90 дней. Codelabs обычно не взимает большую плату или вообще не взимает ее, поэтому мы рекомендуем вам воздержаться от использования бесплатной пробной версии, пока вы действительно не будете готовы протестировать сервис, тем более что это разовое предложение. Квоты бесплатного уровня не истекают и применяются независимо от того, используете вы бесплатную пробную версию или нет.

Перед включением любого API пользователям следует ознакомиться с информацией о ценах (например, страница с ценами на API Cloud Vision ), особенно обращая внимание на наличие бесплатного уровня и, если он есть, на его размер. Пока вы не превышаете установленные совокупные дневные или месячные лимиты, никаких дополнительных расходов взиматься не должно. Цены и бесплатные уровни различаются в зависимости от API продуктовых групп Google. Примеры:

Разные продукты Google оплачиваются по-разному, поэтому обязательно обратитесь к соответствующей документации для получения этой информации.

Убедитесь, что необходимые службы включены.

Убедитесь, что API облачного перевода включен в API Manager , как указано выше. Если вы не включили бессерверные платформы из командной строки, вы можете сделать это из соответствующих панелей управления в Cloud Console: App Engine , Cloud Functions , Cloud Run .

Хотя включение API через Cloud Console наглядно и информативно, быстрее использовать инструмент gcloud , который активирует все сервисы за считанные секунды:

$ gcloud services enable appengine.googleapis.com \
cloudfunctions.googleapis.com artifactregistry.googleapis.com \
run.googleapis.com translate.googleapis.com
Operation "operations/acf.p2-xxxxxx035451-704918f2-5470-4436-9bdd-c3b204yyyyyy" finished successfully.

Подробнее о затратах

Раздел выше о стоимости является общим для всех API Google. Давайте рассмотрим более конкретные детали в этом руководстве. Хотя ежемесячная квота не указана на общей странице сводки тарифов «Всегда бесплатно» , на странице цен API перевода указано, что все пользователи получают фиксированное количество переведенных символов в месяц. Если вы не превышаете этот порог, с вас не будет взиматься плата за использование API. Подробнее о стоимости использования бессерверных платформ Google Cloud см. в разделе «Стоимость» репозитория . В разделе «Очистка» в конце будет рассказано, как прекратить начисление платы после завершения этого практического занятия.

4. Получите пример кода приложения.

Скачайте ZIP-архив или клонируйте репозиторий.

  • Скачайте ZIP-файл или клонируйте репозиторий с помощью git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git
  • Если у вас нет локальной среды разработки и вы хотите выполнить это руководство в Cloud Shell , вы можете клонировать репозиторий с помощью той же команды git clone .
  • Вы также можете получить доступ к ZIP-файлу, нажав на зеленую кнопку «Код» , как показано на следующем скриншоте:

5cd6110c4414cf65.png

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

5. Подтвердите окружение Node.js.

Для настройки среды Node.js выполните следующие действия:

  1. Убедитесь, что у вас установлены современные версии Node (>=10) и NPM (>=6).
  2. Перейдите в папку, куда вы клонировали репозиторий (или распаковали ZIP-архив), затем перейдите в папку cloud/nodejs
  3. Убедитесь, что package.json присутствует, затем выполните npm install

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

$ node -v
v17.0.1
$ npm -v
8.1.0

6. Обзор демонстрационного приложения

Представленное приложение — это простая модификация Google Translate , которая предлагает пользователям ввести текст на английском языке и получить эквивалентный перевод этого текста на испанский.

Конфигурационный файл package.json указывает, какие сторонние пакеты необходимы для приложения (обратите внимание, что версии пакетов могут быть обновлены и отличаться от указанных здесь):

{
  "name": "cloud-nebulous-serverless-nodejs",
  "version": "0.0.1",
  "description": "Nebulous Serverless sample app",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "mocha test/test_neb.js"
  },
  "author": "Google LLC",
  "license": "Apache-2.0",
  "dependencies": {
    "@google-cloud/translate": "^6.3.1",
    "express": "^4.17.1",
    "nunjucks": "^3.2.3"
  },
  "devDependencies": {
    "mocha": "^9.1.3",
    "supertest": "^6.1.6"
  }
}

Теперь откройте файл index.js , чтобы увидеть, как он работает. Если опустить закомментированные строки о лицензировании, вверху и внизу он будет выглядеть так:

const express = require('express');
const nunjucks = require('nunjucks');
const {TranslationServiceClient} = require('@google-cloud/translate');

const app = express();
app.use(express.urlencoded({extended: true}));
nunjucks.configure('templates', {autoescape: true, express: app});
const TRANSLATE = new TranslationServiceClient();

const PORT = process.env.PORT || 8080;
const SOURCE = ['en', 'English'];
const TARGET = ['es', 'Spanish'];
let parent;
TRANSLATE.getProjectId().then(result => {
    parent = `projects/${result}`;
});


if (!process.env.FUNCTION_TARGET) {
    app.listen(PORT, () =>
        console.log(`Listening on port ${PORT}`)
    );
}

# . . . [translate() function definition] . . .

app.all('/', translate);
module.exports = {
    app
};
  1. require компоненты включают в себя функциональность фреймворка и шаблонизации, а также клиентскую библиотеку Cloud Translation API.
  2. Глобальные переменные представляют собой веб-приложение, идентификатор проекта Cloud, клиент API перевода, родительский «путь расположения» для вызовов API перевода, а также языки SOURCE и TARGET . В данном случае это английский ( en ) и испанский ( es ), но вы можете изменить эти значения на другие языковые коды, поддерживаемые Cloud Translation API .
  3. Первый элемент каждой пары ( SOURCE и TARGET ) — это код языка, а второй — название языка (используется только для отображения, поскольку не имеет значения для API).
  4. Несколько строк внизу предназначены для отправки всех HTTP-запросов в функцию translate() а затем для экспорта объекта app .

Наконец, в самом центре файла index.js находится сердце приложения — функция translate() :

async function translate(req, rsp) {
    let text = null;
    let translated = null;
    if (req.method === 'POST') {
        text = req.body.text.trim();
        if (text) {
            const data = {
                contents: [text],
                parent: parent,
                targetLanguageCode: TARGET[0]
            };
            const [response] = await TRANSLATE.translateText(data);
            translated = response.translations[0].translatedText;
        }
    }
    const context = {
        orig:  {text: text, lc: SOURCE},
        trans: {text: translated, lc: TARGET}
    };
    rsp.render('index.html', context);
}

Основная функция принимает ввод пользователя и вызывает API перевода для выполнения основной работы. Давайте разберем это подробнее:

  1. Сбросьте основные переменные формы. Это в первую очередь касается GET-запросов, поскольку в POST-запросах эти переменные будут заменены другими данными.
  2. Если это POST-запрос, получите текст для перевода, а если он не пустой, создайте структуру JSON, представляющую требования к метаданным API. Затем вызовите API для получения услуги.
  3. Мы не передали SOURCE[0] в API для указания конкретного англоязычного источника. Если вы не указываете язык источника, вы запрашиваете у API автоматическое определение языка источника (см. sourceLanguageCode в документации ).
  4. В любом случае, отформатируйте фактические результаты (POST) или отключите данные (GET) в контексте шаблона и выполните отрисовку.

Визуальная часть приложения находится в шаблоне файла index.html . Она отображает результаты предыдущего перевода (в противном случае — пустое поле), после чего следует форма с запросом на перевод:

<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<style>
body {
  font-family: Verdana, Helvetica, sans-serif;
  background-color: #DDDDDD;
}
</style>
<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>

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

  1. Запустите службу локально.
  2. Развертывание в App Engine (стандартная среда)
  3. Развертывание в облачных функциях
  4. Развертывание в облаке. Запуск.

7. ВАРИАНТ 1: Запуск службы локально

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

Для запуска тестового приложения локально необходимо выполнить три отдельных шага:

  1. Создайте учетную запись службы
  2. Создайте пару открытого/закрытого ключей для учетной записи службы.
  3. Загрузите файл с учетными данными и включите его в пакет с кодом приложения.
  4. Запустить сервис

Узнайте о сервисных аккаунтах

Сервисные учетные записи — это механизм безопасности для доступа к API Google для облачных приложений при работе с данными, не принадлежащими пользователям. При развертывании в облаке, чтобы сократить время адаптации пользователей к облаку, все вычислительные платформы Google Cloud (бессерверные и другие) предоставляют сервисные учетные записи по умолчанию .

Учетные записи служб по умолчанию обладают широким набором разрешений, позволяющих «обойти бюрократические препоны», но при подготовке к запуску производственного сервиса мы настоятельно рекомендуем пользователям следовать лучшей практике «минимальных привилегий», создавая управляемые пользователями учетные записи служб только с достаточными разрешениями для корректной работы вашего приложения. В любом случае, для локальных развертываний нет учетных записей служб по умолчанию, поэтому вам необходимо создать учетную запись службы и ключ учетной записи службы (фактически, пару открытого/закрытого ключей) и сделать эти учетные данные доступными для кода приложения.

Создайте пару ключей учетной записи службы и загрузите файл с учетными данными.

Следуйте инструкциям на этой странице , чтобы создать учетную запись службы и пару открытого/закрытого ключей для локального запуска. При создании ключа учетной записи службы вам будет предложено указать необходимые права доступа. Обязательно выберите roles/cloudtranslate.user , чтобы успешно получить доступ к API.

После успешного создания пары ключей вам будет предложено загрузить файл ключа учетной записи службы. Назовите его credentials.json и переместите в корневую папку приложения. Теперь вам нужно указать Cloud SDK использовать эти учетные данные: установите переменную среды GOOGLE_APPLICATION_CREDENTIALS , указав путь к этому файлу. Более подробную информацию об этом процессе можно найти на этой странице, посвященной использованию учетных записей служб.

Запустить сервис

Когда будете готовы продолжить, запустите сервер Express локально с помощью следующей команды:

$ npm start

> cloud-nebulous-serverless-nodejs@0.0.1 start
> node index.js

Listening on port 8080

Откройте веб-браузер и подключитесь к нему по адресу localhost:8080 , и вы должны увидеть что-то подобное:

adc6665b7ae13c40.png

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

fc154326080bf14f.png

Когда вас всё устроит, закройте сервер, нажав ^C (Ctrl+C), и выйдите. Поздравляем с запуском локального развертывания! Есть и хорошие новости: развертывание в облаке намного проще.

Поиск неисправностей

У вас возникает подобная ошибка при запросе перевода?

node:fs:2486
      handleErrorFromBinding(ctx);
      ^

Error: The file at credentials.json does not exist, or it is not a file. ENOENT: no such file or directory, lstat '/tmp/nodejs/credentials.json'
    . . .

РЕШЕНИЕ : Эта ошибка означает, что вы не завершили создание учетной записи службы и загрузку файла пары открытого/закрытого ключей credentials.json . Пожалуйста, вернитесь к « ВАРИАНТ 1: Запуск службы локально » и завершите этот процесс, а также установите учетные данные в основную папку, прежде чем продолжить.

8. ВАРИАНТ 2: Развертывание в App Engine (стандартная среда)

Этот раздел практического занятия посвящен исключительно развертыванию приложений в Node App Engine. Если вас это не интересует, переходите к следующему разделу.

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

runtime: nodejs16

Файл app.yaml не используется ни Cloud Functions, ни Cloud Run. Если вы не планируете использовать App Engine, этот файл можно безопасно удалить. Когда вы будете готовы развернуть приложение в App Engine, выполните следующую команду:

$ gcloud app deploy

После выбора региона вывод gcloud app deploy станет гораздо менее подробным и должен выглядеть следующим образом:

Services to deploy:

descriptor:                  [/private/tmp/nodejs/app.yaml]
source:                      [/private/tmp/nodejs]
target project:              [PROJECT_ID]
target service:              [default]
target version:              [2021...]
target url:                  [https://PROJECT_ID.REG_ABBR.appspot.com]
target service account:      [App Engine default service account]


Do you want to continue (Y/n)?

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 2 files to Google Cloud Storage                          ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...⠏WARNING: *** Improve build performance by generating and committing package-lock.json.

Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REG_ABBR.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s default

To view your application in the web browser run:
  $ gcloud app browse

To take a quick anonymous survey, run:
  $ gcloud survey

Теперь, когда ваше приложение доступно по всему миру, вы сможете получить к нему доступ по URL-адресу, содержащему идентификатор вашего проекта, и увидите результат, аналогичный локальной версии Express, но при этом будете знать, что приложение работает в облаке и доступно по всему миру.

da28f951c33a2c3d.png

Если вы отправите запрос, вы обнаружите, что он работает так же, как и все остальные развертывания.

9. ВАРИАНТ 3: Развертывание в облачных функциях

Этот раздел практического занятия посвящен только развертыванию в Node Cloud Functions. Если вас это не интересует, переходите к следующему разделу.

В Cloud Functions отсутствуют конфигурационные файлы, поэтому, когда вы будете готовы развернуть приложение в Cloud Functions, выполните следующую команду:

$ gcloud functions deploy translate \
  --runtime nodejs16 \
  --entry-point app \
  --trigger-http \
  --region REGION \
  --allow-unauthenticated

В вашем проекте GCP может быть указан REGION по умолчанию, но вы можете использовать флаг --region для развертывания вашей функции в определенном регионе. Cloud Functions не запрашивает подтверждение, как другие облачные продукты. Независимо от выбранного региона, вывод gcloud functions deploy должен выглядеть следующим образом:

Deploying function (may take a while - up to 2 minutes)...⠛
For Cloud Build Logs, visit: https://console.cloud.google.com/cloud-build/builds;region=REGION/15ac7fc1-731d-4f3b-bc15-8f2614xxxxxx?project=062269xxxxxx
Deploying function (may take a while - up to 2 minutes)...done.
availableMemoryMb: 256
buildId: aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx
buildName: projects/062269xxxxxx/locations/REGION/builds/aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx
entryPoint: app
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: nodejs16
serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com
sourceUploadUrl: https://storage.googleapis.com/gcf-upload-REGION-01de94c2-6eb4-4c49-aaff-09276cdb7ae9/a1db9f2d-3511-414b-aeeb-de6042xxxxxx.zip
status: ACTIVE
timeout: 60s
updateTime: '2021...'
versionId: '...'

Теперь, когда ваше приложение доступно по всему миру, вы сможете получить к нему доступ по URL-адресу, содержащему идентификатор вашего проекта - как показано в результатах развертывания (в разделе PROJECT_ID httpsTrigger/url "). URL-адрес должен выглядеть примерно так: https:// REGION который .cloudfunctions.net/translate меняться в зависимости от выбранного региона и идентификатора вашего облачного проекта.

518f1c3165f2096d.png

10. ВАРИАНТ 4: Развертывание в облаке

Этот раздел практического задания предназначен только для развертывания в Cloud Run. Если вас это не интересует, переходите к следующему разделу.

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

Теперь вы готовы развернуть свою службу перевода в Cloud Run, выполнив следующую команду:

$ 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

Cloud Buildpacks загружает ваши приложения в Cloud Run так же, как если бы вы запускали приложение локально. Для пользователей Node.js он запускает npm install и npm start . Для Python он запускает команду pip install -r requirements.txt и запускает приложение в соответствии с инструкциями в вашем Procfile . (То же самое относится и ко всем другим языкам, поддерживаемым Cloud Buildpacks .) Ваше приложение будет готово к работе после завершения процесса сборки.

Ваше приложение после этого (развернутое регионально, но) становится доступным глобально, и к нему можно получить доступ по URL-адресу, содержащему идентификатор вашего проекта, как показано в результатах развертывания (в разделе « Service URL :»).

169f6edf5f7d2068.png

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

31554e71cb80f1b4.png

11. Заключение

Поздравляем! Вы научились включать и использовать API облачного перевода, получать необходимые учетные данные и развертывать простое веб-приложение локально в Express, App Engine, Cloud Functions и/или 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 , его преемнике. Хранение этого образа расходует часть этой квоты, как и исходящий трафик сети при передаче этого образа в сервис. Однако вы можете проживать в регионе, где нет такого бесплатного уровня, поэтому следите за использованием хранилища, чтобы минимизировать потенциальные затраты.

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

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

Дополнительное исследование

Теперь, когда у вас есть некоторый опыт работы с API перевода, давайте выполним несколько дополнительных упражнений для дальнейшего развития ваших навыков. Чтобы продолжить обучение, измените наше тестовое приложение следующим образом:

  1. Выполните все остальные задания этого практического руководства для локального запуска или развертывания на бессерверных вычислительных платформах Google Cloud (см. README репозитория ).
  2. Выполните это руководство, используя другой язык программирования.
  3. Измените это приложение, чтобы оно поддерживало другие исходные или целевые языки.
  4. Обновите это приложение, чтобы оно могло переводить текст на несколько языков; измените файл шаблона, чтобы в нем был выпадающий список поддерживаемых целевых языков.

Узнать больше

Google App Engine

Google Cloud Functions

Google Cloud Run

Google Cloud Buildpacks, Container Registry, Artifact Registry

Google Cloud Translation и Google ML Kit

Другие продукты/страницы Google Cloud

Лицензия

Данный учебный материал распространяется под лицензией Creative Commons Attribution 2.0 Generic License, а исходный код в репозитории распространяется под лицензией Apache 2.0.