1. Visão geral
Esta série de codelabs (tutoriais práticos e autoguiados) tem como objetivo ajudar os desenvolvedores a entender as várias opções disponíveis ao implantar aplicativos. Neste codelab, você vai aprender a usar a API Google Cloud Translation com Python e executar localmente ou implantar em uma plataforma de computação sem servidor do Cloud (App Engine, Cloud Functions ou Cloud Run). O app de exemplo encontrado no repo do tutorial pode ser implantado de oito maneiras diferentes com apenas pequenas mudanças de configuração:
- Servidor Flask local (Python 2)
- Servidor Flask local (Python 3)
- App Engine (Python 2)
- App Engine (Python 3)
- Cloud Functions (Python 3)
- Cloud Run (Python 2 via Docker)
- Cloud Run (Python 3 via Docker)
- Cloud Run (Python 3 usando os Cloud Buildpacks)
Este codelab se concentra no provisionamento do app para as plataformas em negrito acima.
Você aprenderá como realizar as seguintes tarefas:
- Use as APIs do Google Cloud, especificamente a API Cloud Translation (avançada/v3).
- Executar um aplicativo da Web básico localmente ou implantar em uma plataforma de computação sem servidor do Cloud
O que é necessário
- Um projeto do Google Cloud com uma conta ativa do Cloud Billing
- Flask instalado para execução local ou uma plataforma de computação sem servidor do Cloud ativada para implantações baseadas na nuvem
- Habilidades básicas em Python
- Conhecimento prático dos comandos básicos do sistema operacional
Pesquisa
Como você usará este tutorial?
Como você classificaria sua experiência com Python?
Como você classificaria sua experiência de uso dos serviços do Google Cloud?
2. Configuração e requisitos
Configuração de ambiente autoguiada
- 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.
- 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.
- 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 a API Translation
Ativar as APIs do Cloud
Nesta seção, você vai aprender a ativar as APIs do Google em geral. No app de exemplo, você vai ativar a API Cloud Translation, o Cloud Run e o Cloud Artifact Registry.
Introdução
Independentemente da API do Google que você quer usar no seu app, ela precisa ser ativada. O exemplo a seguir mostra duas maneiras de ativar a API Cloud Vision. Depois de aprender a ativar uma API do Cloud, você poderá ativar outras APIs porque o processo é semelhante.
Opção 1: no Cloud Shell ou na interface de linha de comando
A ativação de APIs no console do Cloud é mais comum, mas alguns desenvolvedores preferem fazer tudo na linha de comando. Para isso, você precisa procurar o "nome do serviço" de uma API. Ele se parece com um URL: SERVICE_NAME
.googleapis.com
. Confira essas informações no gráfico de produtos compatíveis ou faça uma consulta programática com a API Google Discovery.
Com essas informações, usando o Cloud Shell (ou seu ambiente de desenvolvimento local com a ferramenta de linha de comando gcloud
instalada), é possível ativar uma API da seguinte maneira:
gcloud services enable SERVICE_NAME.googleapis.com
Por exemplo, este comando ativa a API Cloud Vision:
gcloud services enable vision.googleapis.com
Esse comando ativa o App Engine:
gcloud services enable appengine.googleapis.com
Também é possível ativar várias APIs com uma solicitação. Por exemplo, esta linha de comando ativa o Cloud Run, o Cloud Artifact Registry e a API Cloud Translation:
gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
Opção 2: no console do Cloud
Você também pode ativar a API Vision no Gerenciador de APIs. No console do Cloud, acesse o Gerenciador de APIs e selecione Biblioteca.
Se você quiser ativar a API Cloud Vision, comece a digitar "vision" na barra de pesquisa, e tudo que corresponder ao que você digitou até agora vai aparecer:
Selecione a API que você quer ativar e clique em Ativar:
Custo
Muitas APIs do Google podem ser usadas sem taxas, mas o uso de produtos e APIs do Google Cloud não é sem custo financeiro. Ao ativar as APIs do Cloud, você pode precisar de uma conta de faturamento ativa. No entanto, é importante observar que alguns produtos do Google Cloud têm um nível "Sempre sem custo financeiro" (diário/mensal) que você precisa exceder para incorrer em cobranças. Caso contrário, seu cartão de crédito (ou instrumento de faturamento especificado) não será cobrado.
Os usuários precisam consultar as informações de preços de qualquer API antes da ativação, especialmente se ela tem um nível sem custo financeiro e, em caso afirmativo, qual é. Se você estiver ativando a API Cloud Vision, consulte a página Informações de preços. O Cloud Vision tem uma cota sem custo financeiro, e, desde que você permaneça dentro dos limites agregados (em cada mês), não haverá cobranças.
Os preços e os níveis sem custo financeiro variam entre as APIs do Google. Exemplos:
- Google Cloud/GCP: cada produto é faturado de forma diferente e geralmente é pago por ciclo de vCPU, consumidor de armazenamento, uso de memória ou pagamento por uso. Consulte as informações sobre o nível sem custo financeiro acima.
- Google Maps: oferece um pacote de APIs e disponibiliza aos usuários um crédito mensal sem custo financeiro de US$200.
- APIs do Google Workspace (antigo G Suite): oferecem uso sem custo financeiro (até determinados limites) coberto por uma taxa de assinatura mensal do Workspace. Portanto, não há cobrança direta para o uso das APIs Gmail, Google Drive, Agenda, Documentos, Planilhas e Apresentações.
Diferentes produtos do Google são cobrados de maneira diferente. Portanto, consulte a documentação da sua API para obter essa informação.
Resumo
Agora que você sabe como ativar as APIs do Google em geral, acesse o gerenciador de APIs e ative a API Cloud Translation, o Cloud Run e o Cloud Artifact Registry (se ainda não tiver feito isso). Você ativa o primeiro porque nosso aplicativo o usa. Você ativa o último porque é onde nossas imagens de contêiner são armazenadas antes de serem implantadas para iniciar o serviço do Cloud Run. É por isso que você precisa ativá-lo. Se você preferir ativar todos com a ferramenta gcloud
, emita o seguinte comando no terminal:
gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
Embora a cota mensal não esteja listada na página de resumo do nível "Sempre sem custo financeiro", 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 vai receber cobranças da API se ficar abaixo desse limite. Se houver outras cobranças relacionadas ao Google Cloud, elas serão discutidas no final da seção "Limpeza".
4. Fazer o download do código do app de exemplo
Clone o código no repositório localmente ou no Cloud Shell (usando o comando git clone
) ou faça o download do arquivo ZIP no botão verde Code, conforme mostrado na captura de tela a seguir:
Agora que você tem tudo, crie uma cópia completa da pasta para fazer este tutorial específico, porque provavelmente ele envolve a exclusão ou alteração dos arquivos. Se você quiser fazer uma implantação diferente, copie o original para não precisar clonar ou fazer o download novamente.
5. Tour do app de exemplo
O app de exemplo é um derivado simples do Google Tradutor que solicita que os usuários insiram texto em inglês e recebem a tradução equivalente desse texto em espanhol. Agora abra o arquivo main.py
para conferir como ele funciona. Omitindo as linhas comentadas sobre licenciamento, a parte de cima e de baixo fica assim:
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)))
- As importações trazem a funcionalidade do Flask, o módulo
google.auth
e a biblioteca de cliente da API Cloud Translation. - As variáveis globais representam o app Flask, o ID do projeto do Cloud, o cliente da API Translation, o "caminho de local" pai para chamadas da API Translation e os idiomas de origem e de destino. Nesse caso, são o inglês (
en
) e o espanhol (es
), mas você pode mudar esses valores para outros códigos de idioma compatíveis com a API Cloud Translation. - O grande bloco
if
na parte de baixo é usado no tutorial para executar este app localmente. Ele utiliza o servidor de desenvolvimento do Flask para disponibilizar nosso app. Esta seção também está aqui para os tutoriais de implantação do Cloud Run caso o servidor da Web não esteja incluído no contêiner. Você precisa ativar o agrupamento do servidor no contêiner, mas, caso você esqueça, o código do app volta a usar o servidor de desenvolvimento do Flask. Isso não é um problema com o App Engine ou o Cloud Functions, porque essas são plataformas baseadas em origem, ou seja, o Google Cloud fornece e executa um servidor da Web padrão.
Por fim, no meio de main.py
está o coração do aplicativo, a função 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)
A função principal faz o trabalho de receber a entrada do usuário e chamar a API Translation para fazer o trabalho pesado. Vamos aos detalhes:
- Verifique se as solicitações estão vindo do Cloud Functions usando a variável
local_request
. O Cloud Functions envia o próprio objeto de solicitação do Flask, enquanto todos os outros (em execução local ou implantados no App Engine ou no Cloud Run) recebem o objeto de solicitação diretamente do Flask. - Redefina as variáveis básicas do formulário. Isso é principalmente para solicitações GET, já que as solicitações POST têm dados que substituem essas informações.
- Se for um POST, pegue o texto a ser traduzido e crie uma estrutura JSON que represente o requisito de metadados da API. Em seguida, chame a API, voltando para uma versão anterior se o usuário estiver usando uma biblioteca mais antiga.
- De qualquer forma, formate os resultados reais (POST) ou sem dados (GET) no contexto do modelo e renderize.
A parte visual do aplicativo está no arquivo index.html
do modelo. Ele mostra os resultados traduzidos anteriormente (em branco, caso contrário) seguidos pelo formulário que pede algo para traduzir:
<!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. Configurar o Docker para criar a imagem do Python 3
Agora abra o arquivo Dockerfile
, que, sem as informações de licença, tem esta aparência:
#FROM python:3-slim
FROM python:2-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python", "main.py"]
Como você pode ver, por padrão, ele está configurado para Python 2. Vamos mudar isso editando a linha FROM
de python:2-slim
para python:3-slim
ou descomenteando a linha de cima e excluindo a linha FROM
antiga. Quando terminar, o Dockerfile
vai ficar assim:
FROM python:3-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python", "main.py"]
7. Implante o serviço
Agora você pode implantar seu serviço de tradução no Cloud Run executando este comando:
gcloud run deploy translate --source . --allow-unauthenticated --platform managed
A saída vai ser parecida com esta e vai fornecer algumas instruções para as próximas etapas:
$ 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
Agora que o app está disponível em todo o mundo, ele pode ser acessado no URL que contém o ID do projeto, conforme mostrado na saída de implantação:
Tradução de algo para ver como funciona.
8. Conclusão
Parabéns! Você aprendeu a ativar a API Cloud Translation, receber as credenciais necessárias e implantar um app da Web simples no Python 3 Cloud Run.
Limpar
A API Cloud Translation permite executar um volume fixo de caracteres traduzidos por mês sem custos. O App Engine também tem uma cota sem custo financeiro, assim como o Cloud Functions e o Cloud Run. Você vai receber cobranças se exceder um dos limites. Se você planeja continuar para o próximo codelab, não é necessário encerrar o app.
No entanto, se você ainda não estiver pronto para passar para o próximo tutorial ou se estiver preocupado com a possibilidade de a Internet descobrir o app que você acabou de implantar, desative o app do App Engine, exclua o Cloud Function 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 quiser continuar com este aplicativo ou outros codelabs e quiser excluir tudo completamente, encerrar o projeto.
Além disso, a implantação em uma plataforma de computação sem servidor do Google Cloud gera custos de criação e armazenamento menores. O Cloud Build tem uma cota sem custo financeiro, assim como o Cloud Storage. Para maior transparência, o Cloud Build cria a imagem do aplicativo, que é armazenada no Cloud Container Registry ou no Artifact Registry, seu sucessor. O armazenamento dessa imagem usa parte dessa cota, assim como a saída de rede ao transferir essa imagem para o serviço. No entanto, talvez você more em uma região que não tem esse nível sem custo financeiro. Portanto, fique atento ao uso de armazenamento para minimizar os custos.
9. Outros recursos
Nas seções a seguir, você encontra mais material de leitura e exercícios recomendados para ampliar o conhecimento adquirido com a conclusão deste tutorial.
Outro estudo
Agora que você já tem alguma experiência com a API Translation, vamos fazer alguns exercícios para desenvolver ainda mais suas habilidades. Para continuar seu aprendizado, modifique nosso app de exemplo para fazer o seguinte:
- 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 repositório).
- Conclua este tutorial usando outra linguagem de programação.
- Mude esse app para oferecer suporte a diferentes idiomas de origem ou de destino.
- Faça upgrade do aplicativo para que ele possa traduzir texto em mais de um idioma. Mude o arquivo de modelo para ter um menu suspenso com os idiomas de destino compatíveis.
Saiba mais
Google App Engine
- Página inicial do App Engine
- Documentação do App Engine
- Início rápido do Python 3 no App Engine
- Contas de serviço padrão do App Engine
- Ambiente de execução do Python 2 do App Engine (padrão)
- Ambiente de execução do Python 3 do App Engine (padrão)
- Diferenças entre os ambientes de execução do Python 2 e 3 no App Engine (padrão)
- Guia de migração do Python 2 para o Python 3 no App Engine (padrão)
Google Cloud Functions
- Página inicial do Cloud Functions
- Documentação do Cloud Functions
- Guia de início rápido do Python Cloud Functions
- Contas de serviço padrão do Cloud Functions
Google Cloud Run
- Página inicial do Cloud Run
- Documentação do Cloud Run
- Guia de início rápido do Python Cloud Run
- Contas de serviço padrão do Cloud Run
Buildpacks do Google Cloud, Container Registry e Artifact Registry
- Anúncio do Cloud Buildpacks
- Repositório do Cloud Buildpacks
- Página inicial do Cloud Artifact Registry
- Documentação do Cloud Artifact Registry
- Página inicial do Cloud Container Registry
- Documentação do Cloud Container Registry
Google Cloud Translation e Kit de ML do Google
- Página inicial do Cloud Translation
- Documentação do Cloud Translation
- Página de preços da API Translation
- Todas as APIs de "building block" de IA/ML do Cloud
- Kit de ML do Google (subconjunto de APIs de IA/ML do Cloud para dispositivos móveis)
- API Translation do Google ML Kit
Outros produtos/páginas do Google Cloud
- Suporte do Python do Google Cloud
- Bibliotecas de cliente do Google Cloud
- Nível "Always Free" do Google Cloud
- Toda a documentação do Google Cloud
Python e Flask
Licença
Este tutorial está licenciado sob a Licença Atribuição 2.0 Genérica da Creative Commons, e o código-fonte no repositório está licenciado sob a Licença Apache 2.