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 Flask, é possível usar outros frameworks da Web, incluindo Django, Pyramid, Bottle e web.py.

Este tutorial é uma adaptação 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 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 em um laptop, neste codelab você vai usar 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 você estiver iniciando o Cloud Shell pela primeira vez, verá uma tela intermediária com a descrição dele. Se aparecer uma tela intermediária, clique em Continuar.

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

Essa máquina virtual tem 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. Grande parte do trabalho neste codelab, se não todo, pode ser feito em um navegador.

Depois de se conectar ao Cloud Shell, você verá sua autenticação e o projeto estará 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 seguinte comando no Cloud Shell para confirmar que 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. Programar 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. Use o diretório $HOME no armazenamento de disco permanente para armazenar arquivos de vários projetos e sessões do Cloud Shell. Seu diretório $HOME é particular e não pode ser acessado por outros usuários.

Para começar, crie 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 clique no botão do editor do Cloud Shell:

10af7b1a6240e9f4.gif

Para editar o arquivo diretamente com o Cloud Shell Editor, 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 seu 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 um 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 seu 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 seu diretório:

ls

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

app.yaml  main.py  requirements.txt

Implante seu 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 seu app da Web com o comando gcloud app describe:

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

Teste seu app da Web 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 seu app da Web:

gcloud app deploy --quiet

A nova versão do seu aplicativo é 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 seu app da Web exatamente como fez anteriormente:

curl https://$APPENGINE_HOSTNAME

Você receberá a mesma resposta:

Hello World!

Faça um 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 seu app da Web sem qualquer interrupção do serviço.

9. Parabéns!

Você aprendeu a criar 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.