Primeiros passos com o App Engine (Python 3)

1. Visão geral

befa7a877ccdd35d.png

Os aplicativos do Google App Engine são fáceis de criar, manter e escalonar de acordo com as alterações necessárias no tráfego e no armazenamento de dados. Com o App Engine, você não precisa se preocupar com a manutenção dos servidores. Basta fazer upload do seu aplicativo.

Neste codelab, você vai aprender a implantar um app da Web simples em Python escrito com o framework da Web Flask. Embora este exemplo use o Flask, é possível usar outros frameworks da Web, incluindo Django, Pyramid, Bottle e web.py.

Este tutorial foi adaptado de https://cloud.google.com/appengine/docs/standard/python3/quickstart

O que você vai aprender

  • Como criar um servidor Python simples no Google App Engine.
  • Como atualizar o código sem deixar o servidor indisponível

O que é necessário

  • Familiaridade com o Python
  • Conhecer os editores de texto padrão do Linux, como vim, emacs ou nano.

Pesquisa

Como você vai usar este tutorial?

Apenas leitura Ler e fazer os exercícios

Como você classificaria sua experiência com Python?

Iniciante Intermediário Proficiente

Como você classificaria sua experiência com os 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.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google e pode ser atualizada quando você quiser.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como PROJECT_ID. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto.
  • Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não vai ser muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Inicie o Cloud Shell

Embora o Google Cloud possa ser operado remotamente do seu laptop, neste codelab usaremos o Cloud Shell, um ambiente de linha de comando executado no Cloud.

Ativar o Cloud Shell

  1. No Console do Cloud, clique em Ativar o Cloud Shell853e55310c205094.png.

3c1dabeca90e44e5.png

Se esta for a primeira vez que você inicia o Cloud Shell, uma tela intermediária vai aparecer com a descrição dele. Se isso acontecer, clique em Continuar.

9c92662c6a846a5c.png

Leva apenas alguns instantes para provisionar e se conectar ao Cloud Shell.

9f0e51b578fecce5.png

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Neste codelab, quase todo o trabalho pode ser feito com um navegador.

Depois de se conectar ao Cloud Shell, você vai ver que sua conta já está autenticada e que o projeto está configurado com o ID do seu projeto.

  1. Execute o seguinte comando no Cloud Shell para confirmar se a conta está autenticada:
gcloud auth list

Resposta ao comando

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Execute o comando a seguir no Cloud Shell para confirmar se o comando gcloud sabe sobre seu projeto:
gcloud config list project

Resposta ao comando

[core]
project = <PROJECT_ID>

Se o projeto não estiver configurado, configure-o usando este comando:

gcloud config set project <PROJECT_ID>

Resposta ao comando

Updated property [core/project].

3. Escrever o app da Web

Depois que o Cloud Shell for iniciado, use a linha de comando para invocar o comando gcloud do SDK Cloud ou outras ferramentas disponíveis na instância da máquina virtual. Você pode usar o diretório $HOME no armazenamento em disco permanente para armazenar arquivos em vários projetos e entre sessões do Cloud Shell. Seu diretório $HOME é privado e não pode ser acessado por outros usuários.

Vamos começar criando uma nova pasta no diretório $HOME para o aplicativo:

mkdir ~/helloworld
cd ~/helloworld

Crie um arquivo chamado main.py:

touch main.py

Edite o arquivo com o editor de linha de comando que preferir (nano, vim ou emacs) ou clicando no botão "Editor do Cloud Shell":

10af7b1a6240e9f4.gif

Para editar o arquivo diretamente com o editor do Cloud Shell, use este comando:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    return "Hello World!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

4. Definir as dependências

Para especificar as dependências do seu app da Web, volte ao terminal e crie um arquivo requirements.txt no diretório raiz do projeto com a versão exata do Flask a ser usada:

touch requirements.txt

Para editar o arquivo com o editor do Cloud Shell, use este comando:

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/Flask
Flask==3.0.2

5. Configurar a implantação

Para implantar o app da Web no App Engine, você precisa de um arquivo app.yaml. Esse arquivo de configuração define as configurações do seu app da Web para o App Engine.

No terminal, crie e edite o arquivo app.yaml no diretório raiz do projeto:

touch app.yaml

Para editar o arquivo com o editor do Cloud Shell, use este comando:

cloudshell edit app.yaml

app.yaml

runtime: python312

6. Implantar o app da Web

No terminal, verifique o conteúdo do diretório:

ls

Você precisa ter os três arquivos a seguir:

app.yaml  main.py  requirements.txt

Implante o app da Web com o seguinte comando:

gcloud app deploy

Na primeira vez, você precisa escolher uma região de implantação:

Please choose the region where you want your App Engine application
located:

 [1] asia-east2
...
 [7] australia-southeast1
 [8] europe-west
 [9] europe-west2
...
 [12] northamerica-northeast1
 [13] southamerica-east1
...
 [19] us-west4
...
Please enter your numeric choice:

Confirme para iniciar a implantação:

Creating App Engine application in project [PROJECT_ID] and region [REGION]....done.
Services to deploy:

descriptor:      [~/helloworld/app.yaml]
source:          [~/helloworld]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [YYYYMMDDtHHMMSS]
target url:      [https://PROJECT_ID.REGION_ID.r.appspot.com]

Do you want to continue (Y/n)?

Seu app é implantado:

Beginning deployment of service [default]...
Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
Uploading 3 files to Google Cloud Storage
100%
File upload done.
Updating service [default]...done.     
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

Seu app da Web agora está pronto para responder a solicitações HTTP em https://PROJECT_ID.REGION_ID.r.appspot.com.

7. Testar o app da Web

Seu app da Web está pronto para responder a solicitações HTTP em https://PROJECT_ID.REGION_ID.r.appspot.com.

Primeiro, recupere o nome do host do app da Web com o comando gcloud app describe:

APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")

Teste seu web app com esta solicitação GET HTTP simples:

curl https://$APPENGINE_HOSTNAME

Você vai receber a seguinte resposta:

Hello World!

Resumo

Nas etapas anteriores, você configurou, executou e implantou um app da Web simples em Python no App Engine.

8. Atualizar o app da Web

Modifique o app da Web mudando o corpo da função hello() no arquivo main.py.

Para editar o arquivo com o editor do Cloud Shell, use este comando:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    # return "Hello World!\n"  # ← Replace this line
    who = flask.request.args.get("who", "World")
    return f"Hello {who}!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

No terminal, reimplante para atualizar o app da Web:

gcloud app deploy --quiet

A nova versão do app é implantada:

Beginning deployment of service [default]...
Uploading 1 file to Google Cloud Storage 
...
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

Teste a nova versão do web app da mesma forma que fez antes:

curl https://$APPENGINE_HOSTNAME

Você vai receber a mesma resposta:

Hello World!

Teste com o parâmetro opcional:

curl https://$APPENGINE_HOSTNAME?who=Universe

Você vai receber a seguinte resposta:

Hello Universe!

Resumo

Nesta etapa, você atualizou e reimplantou o app da Web sem interrupção do serviço.

9. Parabéns!

Você aprendeu a escrever seu primeiro aplicativo da Web do App Engine em Python.

Saiba mais

Licença

Este conteúdo está sob a licença Atribuição 2.0 Genérica da Creative Commons.