Implante uma versão básica do "Google Tradutor" App Express.js no App Engine, no Cloud Functions e no Cloud Run

1. Visão geral

Esta série de codelabs (tutoriais práticos e individualizados) tem como objetivo ajudar os desenvolvedores a entender as várias opções disponíveis ao implantar aplicativos. Você vai aprender a usar a API Google Cloud Translation em um aplicativo da Web simples. É possível executar o app localmente ou implantá-lo em uma plataforma de computação sem servidor do Cloud, como App Engine,Cloud Functions ou Cloud Run.

Você fará este tutorial de JavaScript com Node.js usando o framework da Web do Express.js. Você também vai aprender a acessar as APIs do Google Cloud nas nossas plataformas sem servidor. Todas as versões deste app são da plataforma "nebulous Serverless" repositório de código aberto, que inclui uma versão Python do app e codelabs independentes. O repositório também hospeda aplicativos semelhantes que mostram aos desenvolvedores como acessar APIs do Google que não sejam da nuvem nas nossas plataformas sem servidor.

Este codelab se concentra na implantação do app nas plataformas em negrito acima.

Você aprenderá como realizar as seguintes tarefas:

O que é necessário

  • Um projeto do Google Cloud com uma conta ativa do Cloud Billing
  • Um framework da Web instalado para execução local ( Flask para quem faz o tutorial de Python ou Express para quem faz o tutorial de JavaScript/Node.js)
  • Pelo menos uma plataforma de computação sem servidor ativada para implantações do Google Cloud
  • Habilidades básicas de programação (Python ou JavaScript/Node.js)
  • Conhecimento prático de comandos básicos do sistema operacional

Pesquisa

Como você usará este tutorial?

Ler e fazer os exercícios Somente leitura

Como você classificaria sua experiência de desenvolvimento em Python ou Node.js?

Iniciante Intermediário Proficiente

Como você classificaria sua experiência de uso dos serviços do Google Cloud?

Iniciante Intermediário Proficiente

2. Configuração e requisitos

Configuração de ambiente autoguiada

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. Ele é uma string de caracteres que não é usada pelas APIs do Google e pode ser atualizada a qualquer momento.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser alterado após a definição. O Console do Cloud gera automaticamente uma string única, geralmente não importa o que seja. Na maioria dos codelabs, você precisará fazer referência ao ID do projeto, que geralmente é identificado como PROJECT_ID. Então, se você não gostar dele, gere outro ID aleatório ou crie um próprio e veja se ele está disponível. Em seguida, ele fica "congelado" depois que o projeto é criado.
  • Há um terceiro valor, um Número de projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, você precisará ativar o faturamento no Console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não será muito cara, se tiver algum custo. Para encerrar os recursos e não gerar cobranças além deste tutorial, siga as instruções de "limpeza" encontradas no final do codelab. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

3. Ativar API Translation

Nesta seção, você vai aprender a ativar as APIs do Google em geral. Para nosso app de exemplo, você ativará a API Cloud Translation. Você também vai ativar o App Engine, o Cloud Functions e/ou o Cloud Run (além do Cloud Artifact Registry), dependendo das plataformas em que quer implantar o app de amostra.

Como ativar as APIs do Google

Introdução

Seja qual for a API do Google que você quer usar no aplicativo, ela precisa estar ativada. As APIs podem ser ativadas na linha de comando ou no console do Cloud. O processo de ativação de APIs é idêntico, portanto, depois de ativar uma API, é possível fazer outra da mesma forma.

Opção 1: gcloud interface de linha de comando (Cloud Shell ou ambiente local)

Embora ativar APIs do console do Cloud seja mais comum, alguns desenvolvedores preferem fazer tudo na linha de comando. Para isso, é preciso procurar o "nome do serviço" de uma API. Ele parece um URL: SERVICE_NAME.googleapis.com. Você pode encontrá-los no gráfico de produtos compatíveis ou consultar programaticamente com a API Google Discovery.

Com essas informações, usando o Cloud Shell ou um ambiente de desenvolvimento local com a ferramenta de linha de comando gcloud instalada, você pode ativar uma API da seguinte maneira:

gcloud services enable SERVICE_NAME.googleapis.com

Exemplo 1:ativar a API Cloud Vision

gcloud services enable vision.googleapis.com

Exemplo 2:ativar o Google App Engine

gcloud services enable appengine.googleapis.com

Exemplo 3:ative várias APIs com uma solicitação. Por exemplo, se este codelab tiver leitores implantando um app usando a API Cloud Translation para App Engine, Cloud Functions e Cloud Run, a linha de comando será:

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

Esse comando ativa o App Engine, o Cloud Functions, o Cloud Run e a API Cloud Translation. Além disso, ele ativa o Cloud Artifact Registry porque é nele que as imagens de contêiner precisam ser registradas pelo sistema do Cloud Build para serem implantadas no Cloud Run.

Opção 2: Console do Cloud

Você também pode ativar as APIs do Google no Gerenciador de APIs. No console do Cloud, acesse Gerenciador de APIs e selecione Biblioteca.

fb0f1d315f122d4a.png

Comece a digitar o nome de uma API na barra de pesquisa para conferir os resultados correspondentes:

2275786a24f8f204.png

Selecione a API que você quer ativar e clique no botão Ativar:

7960a6752a1da767.png

O processo de ativação de todas as APIs é semelhante, independentemente da API do Google que você quer usar.

Custo

Muitas APIs do Google podem ser usadas sem taxas, mas há custos ao usar a maioria dos produtos e APIs do Google Cloud. Ao ativar as APIs do Cloud, talvez você precise criar uma conta de faturamento ativa. No entanto, alguns produtos do Google Cloud têm a opção "Sempre sem custo financeiro" superior, que precisa ser excedido para gerar cobranças de faturamento.

Novos usuários do GCP se qualificam para a avaliação sem custo financeiro. O valor atual é de US $300 nos primeiros 90 dias. Os codelabs geralmente não geram muito ou nenhum faturamento. Por isso, sugerimos que você adie o teste sem custo financeiro até que esteja tudo pronto para fazer um teste, especialmente por ser uma oferta única. As cotas do Nível sem custo financeiro não expiram e se aplicam independentemente de você usar o teste sem custo financeiro ou não.

Os usuários precisam consultar as informações de preço de qualquer API antes de ativar (exemplo: página de preços da API Cloud Vision ), principalmente informando se ela tem um nível sem custo financeiro e, em caso afirmativo, qual é o nível. Contanto que você permaneça dentro dos limites diários ou mensais especificados de forma agregada, não haverá cobranças. Os preços e os níveis sem custo financeiro variam entre as APIs dos grupos de produtos do Google. Exemplos:

Os diferentes produtos do Google são faturados de maneira diferente. Por isso, consulte a documentação adequada para essas informações.

Verifique se os serviços desejados estão ativados

Verifique a API Cloud Translation no Gerenciador de APIs conforme indicado acima. Se você não ativou as plataformas sem servidor na linha de comando, faça isso em cada um dos respectivos painéis no console do Cloud: App Engine, Cloud Functions, Cloud Run.

Embora seja visualmente informativo ativar as APIs do Console do Cloud, é mais rápido usar a ferramenta gcloud, que leva segundos para ativar todos os serviços:

$ 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.

Mais sobre os custos

A seção acima sobre custos é geral nas APIs do Google. Vamos ver mais detalhes sobre este tutorial. Embora a cota mensal não esteja listada na lista geral "Sempre sem custo financeiro", página de resumo do nível, a página de preços da API Translation informa que todos os usuários recebem uma quantidade fixa de caracteres traduzidos por mês. Você não receberá cobranças da API se ficar abaixo desse limite. Para saber mais sobre os custos das plataformas sem servidor do Google Cloud, consulte a seção de custos do repositório. A ação de limpar no final, vamos discutir como interromper o faturamento após a conclusão deste codelab.

4. Fazer o download do código do app de exemplo

Faça o download do ZIP ou clone o repositório

  • Faça o download do arquivo ZIP ou clone o repositório com git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git
  • Se você não tiver um ambiente de desenvolvimento local e quiser fazer este tutorial no Cloud Shell, clone o repositório com o mesmo comando git clone.
  • Também é possível acessar o arquivo ZIP pelo botão verde Code, como mostrado na captura de tela a seguir:

5cd6110c4414cf65.png

Agora que você tem tudo, crie uma cópia completa da pasta para realizar este tutorial específico, porque isso provavelmente envolverá a exclusão ou a alteração dos arquivos. Se você quiser fazer uma implantação diferente, comece de novo copiando o original para não precisar cloná-lo ou fazer o download dele novamente.

5. Confirmar o ambiente Node.js

Para configurar o ambiente Node.js, faça o seguinte:

  1. Verifique se você tem as versões contemporâneas do Node (>=10) e do NPM (>=6) instaladas.
  2. Acesse o local onde você clonou o repo (ou descompactou o arquivo ZIP) e acesse a pasta cloud/nodejs
  3. Confirme se package.json está presente e execute npm install

Para o item 1 acima, verifique quais versões você tem na linha de comando:

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

6. Tour do app de exemplo

O app de exemplo é uma derivação simples do Google Tradutor que solicita que os usuários insiram um texto em inglês e recebam a tradução equivalente desse texto em espanhol.

O arquivo de configuração package.json indica quais pacotes de terceiros são necessários para o aplicativo. Observe que as versões do pacote podem ser atualizadas além das listadas aqui:

{
  "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"
  }
}

Agora abra o arquivo index.js para conferir como ele funciona. Omitindo as linhas comentadas sobre licenciamento, o código fica assim nas partes de cima e de baixo:

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. Os requires trazem funcionalidades de framework e modelos, além da biblioteca de cliente da API Cloud Translation.
  2. As variáveis globais representam o app da Web, o ID do projeto do Cloud, o cliente da API Translation e o "caminho do local" pai. para chamadas da API Translation e os idiomas SOURCE e TARGET. Neste caso, são inglês (en) e espanhol (es), mas fique à vontade para alterar esses valores para outros códigos de idioma compatíveis com a API Cloud Translation.
  3. O primeiro elemento de cada par (SOURCE e TARGET) é o código do idioma, enquanto o segundo é o nome do idioma. Ele é usado apenas para fins de exibição porque é irrelevante para a API.
  4. Use as poucas linhas na parte de baixo para enviar todas as solicitações HTTP para translate() e exportar o objeto do aplicativo app.

Por fim, no meio de index.js está o coração do aplicativo, a função 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);
}

A função principal recebe a entrada do usuário e chama a API Translation para fazer o trabalho pesado. Vamos ver os detalhes:

  1. Redefina as variáveis básicas do formulário. Isso serve principalmente para solicitações GET, já que as solicitações POST terão dados que as substituirão.
  2. No caso de um POST, use o texto que será traduzido. Se não estiver vazio, crie uma estrutura JSON que represente o requisito de metadados da API. Em seguida, chame a API para o serviço.
  3. Não transmitimos SOURCE[0] à API para uma fonte específica em inglês. Ao omitir o idioma de origem, você solicita que a API detecte automaticamente o idioma de origem (consulte sourceLanguageCode na documentação).
  4. Seja qual for o caso, formate os resultados reais (POST) ou nenhum dado (GET) no contexto do modelo e renderize.

A parte visual do aplicativo está no arquivo de modelo index.html. Ele mostra todos os resultados traduzidos anteriormente (em branco), seguidos pelo formulário que solicita algo para tradução:

<!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>

Para o restante do tutorial, é possível escolher qualquer uma ou todas as quatro opções para implantar e executar o aplicativo. Todas as implantações são opcionais, ou seja, é possível fazer qualquer uma ou todas elas.

  1. Executar o serviço localmente
  2. Implantar no App Engine (ambiente padrão)
  3. Como implantar no Cloud Functions
  4. Implantar no Cloud Run

7. OPÇÃO 1: executar o serviço localmente

Esta seção do codelab se destina apenas a execução local. Se você estiver apenas implantando na nuvem, avance para a próxima seção.

Para executar o app de exemplo localmente, é preciso seguir três etapas distintas:

  1. Criar uma conta de serviço
  2. Criar um par de chaves públicas/privadas para a conta de serviço
  3. Baixar o arquivo de credenciais e o pacote com o código do aplicativo
  4. Iniciar o serviço

Saiba mais sobre contas de serviço

As contas de serviço são o mecanismo de segurança para acessar as APIs do Google para aplicativos baseados na nuvem ao acessar dados que não pertencem a usuários humanos. Ao implantar na nuvem, todas as plataformas de computação do Google Cloud (sem servidor e outras) oferecem contas de serviço padrão para reduzir o tempo de integração de usuários à nuvem.

As contas padrão de serviço têm um amplo conjunto de permissões para "burlar a burocracia", mas, ao se preparar para lançar um serviço de produção, recomendamos que os usuários sigam a prática recomendada de "privilégios mínimos", mas criar contas de serviço gerenciadas pelo usuário com permissões suficientes para que o app funcione corretamente. Como não há contas de serviço padrão para implantações locais, você precisa criar uma conta de serviço e uma chave de conta de serviço (um par de chaves públicas/privadas, na verdade) e disponibilizar essas credenciais para o código do aplicativo.

Criar um par de chaves da conta de serviço e fazer o download do arquivo de credenciais

Siga as instruções nesta página para criar uma conta de serviço e um par de chaves públicas/privadas para execução local. Ao criar a chave da conta de serviço, você precisa fornecer as permissões desejadas. Selecione roles/cloudtranslate.user para acessar a API.

Quando o par de chaves for criado, você vai receber uma solicitação para fazer o download do arquivo de chave da conta de serviço. Chame-o de credentials.json e mova-o para a pasta de nível superior do aplicativo. Agora você precisa instruir o SDK Cloud a usar essas credenciais: defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS para apontar para esse arquivo. Você também encontra mais informações sobre o uso de contas de serviço nesta página.

Iniciar o serviço

Quando estiver tudo pronto, inicie o servidor Express localmente com o seguinte comando:

$ npm start

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

Listening on port 8080

Acesse o navegador da Web para se conectar a ele em localhost:8080. Você verá algo parecido com isto:

adc6665b7ae13c40.png

Traduza alguma coisa para que ela funcione!

fc154326080bf14f.png

Quando você estiver satisfeito com ele, feche o servidor com ^C (control-C) e saia. Parabéns por executar uma implantação local. Temos boas notícias: implantar na nuvem é muito mais fácil.

Solução de problemas

Você está recebendo um erro como este ao solicitar uma tradução?

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'
    . . .

SOLUÇÃO: esse erro significa que você não concluiu a criação de uma conta de serviço e o download do arquivo de par de chaves públicas/privadas credentials.json. Volte para " OPÇÃO 1: executar o serviço localmente" conclua esse processo e instale credenciais na pasta principal antes de continuar.

8. OPÇÃO 2: implantar no App Engine (ambiente padrão)

Esta seção do codelab se destina apenas à implantação no Node App Engine. Se não tiver interesse, avance para a próxima seção.

Esta implantação usa o arquivo de configuração app.yaml, que informa ao App Engine qual ambiente de execução usar com uma única linha:

runtime: nodejs16

O arquivo app.yaml não é usado pelo Cloud Functions nem pelo Cloud Run. Se você não planeja usar o App Engine, esse arquivo pode ser excluído com segurança. Quando estiver tudo pronto para implantar no App Engine, execute este comando:

$ gcloud app deploy

Depois que uma região é selecionada, a saída gcloud app deploy é muito menos detalhada e fica assim:

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

Agora que o app está disponível no mundo todo, é possível acessá-lo no URL que contém o ID do projeto. Você verá uma resposta semelhante à versão local do Express, mas sabe que ela está sendo executada na nuvem e disponível no mundo todo:

da28f951c33a2c3d.png

Se você enviar uma solicitação, vai descobrir que ela funciona da mesma forma que todas as outras implantações.

9. OPÇÃO 3: implantar no Cloud Functions

Esta seção do codelab se destina apenas à implantação no Cloud Functions do Node. Se não tiver interesse, avance para a próxima seção.

Não há arquivos de configuração com o Cloud Functions. Por isso, quando você estiver pronto para implantar no Cloud Functions, execute este comando:

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

Seu projeto do GCP pode ter um REGION padrão, mas é possível usar a sinalização --region para implantar a função em uma região específica. O Cloud Functions não solicita você como os outros produtos do Cloud. Independentemente da região escolhida, a saída gcloud functions deploy terá a seguinte aparência:

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: '...'

Agora que seu app está disponível globalmente, é possível acessá-lo no URL que contém o ID do projeto, conforme mostrado na saída da implantação (em "httpsTrigger/url"). O URL tem esta aparência: https://REGION-PROJECT_ID.cloudfunctions.net/translate, que varia de acordo com a região selecionada e o ID do projeto do Cloud.

518f1c3165f2096d.png

10. OPÇÃO 4: implantar no Cloud Run

Esta seção do codelab se destina apenas a implantações no Cloud Run. Se não tiver interesse, avance para a próxima seção.

Não há arquivos de configuração com o Cloud Run. Portanto, quando estiver tudo pronto para implantar no Cloud Run, siga as instruções abaixo.

Agora está tudo pronto para implantar o serviço de tradução no Cloud Run. Basta executar este comando:

$ gcloud run deploy translate --source . --allow-unauthenticated --platform managed

A saída será semelhante a esta e fornecerá alguns prompts para as próximas etapas:

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

O Cloud Build empacota os apps no Cloud Run da mesma forma que você faria se o executasse localmente. Para usuários do Node.js, ele executa npm install e npm start. Para Python, ele executa pip install -r requirements.txt e inicia o app de acordo com as instruções no seu Procfile. O mesmo se aplica a todas as outras linguagens com suporte do Cloud Buildpacks. O app vai estar pronto quando o processo de build for concluído.

Seu app é (implantado regionalmente, mas) fica disponível globalmente e pode ser acessado no URL que contém o ID do projeto, conforme mostrado na saída da implantação (em "Service URL:"

169f6edf5f7d2068.png

Traduza alguma coisa para que ela funcione!

31554e71cb80f1b4.png

11. Conclusão

Parabéns! Você aprendeu a ativar e usar a API Cloud Translation, conseguir as credenciais necessárias e implantar um app da Web simples para Expressar localmente no App Engine, Cloud Functions e/ou Cloud Run. Confira a pasta repo para saber mais ou acessar outras versões do app e outros codelabs.

Limpar

Com a API Cloud Translation, é possível realizar uma quantidade fixa de caracteres traduzidos por mês sem custo financeiro. O App Engine também tem uma cota sem custo financeiro, assim como o Cloud Functions e o Cloud Run. Você receberá cobranças se uma delas for excedida. Se você pretende avançar para o próximo codelab, não é necessário encerrar o app.

No entanto, se você ainda não estiver pronto para o próximo tutorial ou estiver preocupado que a Internet descubra o app que acabou de implantar, desative o aplicativo do App Engine, exclua a função do Cloud ou desative o serviço do Cloud Run para evitar cobranças. Quando estiver pronto para passar para o próximo codelab, você poderá reativá-lo. Por outro lado, se você não for continuar com este app ou outros codelabs e quiser excluir tudo por completo, encerre seu projeto.

Além disso, a implantação em uma plataforma de computação sem servidor do Google Cloud gera menores custos de criação e armazenamento. O Cloud Build tem a própria cota sem custo financeiro, assim como o Cloud Storage. Para oferecer mais transparência, o Cloud Build cria a imagem do aplicativo, que é armazenada no Cloud Container Registry ou no Artifact Registry, o sucessor dele. O armazenamento dessa imagem usa parte dessa cota, assim como a saída de rede ao transferi-la para o serviço. No entanto, talvez você more em uma região que não tenha esse nível sem custo financeiro, portanto, esteja ciente do uso do armazenamento para minimizar os possíveis custos.

12. Outros recursos

Nas seções a seguir, você encontrará material de leitura adicional, bem como exercícios recomendados para aumentar seu conhecimento ao concluir este tutorial.

Estudo adicional

Agora que você tem alguma experiência com a API Translation, vamos fazer mais alguns exercícios para desenvolver suas habilidades. Para continuar seu programa de aprendizado, modifique nosso app de exemplo para fazer o seguinte:

  1. Conclua todas as outras edições deste codelab para execução local ou implantação em plataformas de computação sem servidor do Google Cloud (consulte o README do repo).
  2. Conclua este tutorial usando outra linguagem de programação.
  3. Altere este aplicativo para oferecer suporte a diferentes idiomas de origem ou de destino.
  4. Faça o upgrade deste aplicativo para traduzir textos para mais de um idioma. altere o arquivo de modelo para ter um menu suspenso de idiomas de destino compatíveis.

Saiba mais

Google App Engine

Google Cloud Functions

Google Cloud Run

Buildpacks do Google Cloud, Container Registry e Artifact Registry

Google Cloud Translation e Kit de ML do Google

Outros produtos/páginas do Google Cloud

Licença

Este tutorial está sob a licença Atribuição 2.0 Genérica da Creative Commons, enquanto o código-fonte no repositório está licenciado sob a Apache 2.