Como implantar o app Bookshelf em Python usando o Cloud Deployment Manager

Neste tutorial, você verá como implantar o app de amostra Bookshelf em Python usando o Cloud Deployment Manager.

O Deployment Manager permite criar os recursos necessários do Google Cloud para uma implantação em uma única etapa, por meio de um processo declarativo e repetitivo. Com o Deployment Manager, você pode atualizar suas implantações, rastrear suas modificações ao longo do tempo, criar modelos usando Jinja ou Python e definir parâmetros para que implantações semelhantes compartilhem um modelo.

Objetivos

  • Clonar e configurar o app de amostra Bookshelf.
  • Criar configurações e modelos no Deployment Manager.
  • Criar implantações no Deployment Manager.
  • Implantar o app de amostra Bookshelf com o Deployment Manager.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Instale o Python, pip e virtualenv no seu sistema. Para instruções, consulte Como configurar um ambiente de desenvolvimento em Python para o Google Cloud.

Crie um bucket do Cloud Storage

Veja nas instruções a seguir como criar um bucket do Cloud Storage. buckets são os contêineres básicos que armazenam dados no Cloud Storage.

  1. Na janela de terminal, crie um bucket do Cloud Storage, em que YOUR_BUCKET_NAME representa o nome do bucket:

    gsutil mb gs://YOUR_BUCKET_NAME
    
  2. Para visualizar imagens carregadas no app Bookshelf, defina a lista de controle de acesso (ACL, na sigla em inglês) padrão do intervalo como public-read:

    gsutil defacl set public-read gs://YOUR_BUCKET_NAME
    

Como clonar o app de amostra

O app de amostra está disponível no GitHub em GoogleCloudPlatform/getting-started-python.

  1. Clone o repositório:

    git clone https://github.com/GoogleCloudPlatform/getting-started-python.git -b steps
    
  2. Acesse o diretório da amostra:

    cd getting-started-python/7-gce
    

Como configurar o app

  1. Abra config.py para edição.

    • Defina o valor de PROJECT_ID como o código do projeto.

    • Defina o valor CLOUD_STORAGE_BUCKET como o nome do bucket do Cloud Storage.

  2. Salve e feche config.py.

Como executar o app no computador local

  1. Crie um ambiente Python isolado e instale as dependências:

    Linux/MacOS

    virtualenv -p python3 env
    source env/bin/activate
    pip install -r requirements.txt
    

    Windows

    virtualenv -p python3 env
    env\scripts\activate
    pip install -r requirements.txt
    

  2. Execute o aplicativo:

    python main.py
    
  3. No navegador, digite o seguinte endereço:

    http://localhost:8080

Para parar o servidor da Web local, pressione Control + C. Se você quiser sair do ambiente virtual, digite deactivate.

Como implantar o app de amostra

Enviar o código para um repositório

É possível colocar o código em uma instância do Compute Engine em execução de várias maneiras. Uma delas é usar o Cloud Source Repositories. Cada projeto inclui um repositório Git que está disponível para instâncias do Compute Engine. Suas instâncias recebem a versão mais recente do código do app durante a inicialização. É conveniente usar um repositório Git porque a atualização do seu app não exige a configuração de novas imagens ou instâncias. Basta reiniciar uma instância atual ou criar uma.

  1. Na primeira vez que usar o Git, use git config --global para configurar sua identidade.

  2. No Console do Cloud, crie um repositório:

    Criar repositório

  3. Em seguida, envie o código do app para o repositório do projeto, em que [YOUR_PROJECT_ID] é o código do projeto e [YOUR_REPO] é o nome do repositório:

    git commit -am "Updating configuration"
    git config credential.helper gcloud.sh
    git remote add cloud https://source.developers.google.com/p/[YOUR_PROJECT_ID]/r/[YOUR_REPO]
    git push cloud master
    

Criar a implantação

Depois de confirmar a configuração e fazer o upload do código para o Cloud Source Repositories, use o Deployment Manager para criar a implantação:

  1. Acesse o diretório deployment_manager:

    cd getting-started-python/7-gce/gce/deployment_manager
    
  2. Crie a implantação:

    gcloud deployment-manager deployments create my-deployment --config config.yaml
    
  3. Veja uma lista de todas as implantações:

    gcloud deployment-manager deployments list
    
  4. Solicite uma descrição da implantação e dos recursos criados:

    gcloud deployment-manager deployments describe my-deployment
    

Visualizar o aplicativo

Após a criação da regra de encaminhamento, pode levar alguns minutos até a propagação da configuração e o encaminhamento do tráfego para as instâncias.

  1. Para verificar o progresso:

    gcloud compute backend-services get-health bookshelf-my-deployment-frontend --global
    
  2. Quando pelo menos uma das instâncias relatar HEALTHY, consulte o endereço IP de encaminhamento para o balanceador de carga:

    gcloud compute forwarding-rules list --global
    

    O endereço IP das regras de encaminhamento está na coluna IP_ADDRESS.

  3. No navegador, digite o endereço IP da lista.

    Agora, seu app está sendo executado no Google Cloud.

Como entender o código

Configurar a implantação

Veja como a implantação está configurada em config.yaml:

imports:
- name: bookshelf.jinja
  path: ./bookshelf.jinja

resources:
- name: bookshelf
  type: bookshelf.jinja
  properties:
    zone: us-central1-f
    machine-type: n1-standard-1
    machine-image: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    min-instances: 1
    max-instances: 10
    target-utilization: 0.6
    scopes:
    - https://www.googleapis.com/auth/cloud-platform

O arquivo de configuração importa o arquivo de modelo como um recurso e o utiliza para definir um recurso chamado bookshelf. Nesse modelo, várias propriedades são usadas como parâmetros. Para mais informações sobre como criar arquivos de configuração no Deployment Manager, consulte Como criar uma configuração.

Configurar o esquema do modelo de implantação

Veja o arquivo de esquema bookshelf.jinja.schema. Ele define e documenta os parâmetros que a implantação deve fornecer no arquivo de configuração. Para mais informações sobre esquemas de configuração, consulte Como usar esquemas.


info:
  title: Bookshelf GCE Deploy
  author: Google Inc.
  description: Creates a GCE Deployment

imports:
- name: startup-script
  path: ../startup-script.sh

required:
- zone
- machine-type
- min-instances
- max-instances
- scopes

properties:
  zone:
    description: Zone to create the resources in.
    type: string
  machine-type:
    description: Type of machine to use
    type: string
  machine-image:
    description: The OS image to use on the machines
    type: string
  min-instances:
    description: The minimum number of VMs the autoscaler will create
    type: integer
  max-instances:
    description: The maximum number of VMs the autoscaler will create
    type: integer
  target-utilization:
    description: The target CPU usage for the autoscaler to base its scaling on
    type: number
  scopes:
    description: A list of scopes to create the VM with
    type: array
    minItems: 1
    items:
      type: string

Configurar o modelo de implantação

O modelo define vários recursos necessários para criar um grupo de instâncias gerenciadas com escalonamento automático e balanceamento de carga. Para ver uma descrição completa dos recursos criados, consulte os comentários no modelo e leia o tutorial Bookshelf no Compute Engine.

É importante lembrar que, com o Deployment Manager, é possível definir recursos de uma maneira declarativa. No entanto, a maior parte da configuração de um determinado recurso é definida pela API dele. Por exemplo, a maior parte das opções de configuração do recurso de modelo de instância é encontrada na definição dele, na documentação de referência da API Compute Engine.

O modelo é desenvolvido na linguagem Jinja. Para os modelos do Deployment Manager, você tem a opção de usar Jinja ou Python. Jinja tem a vantagem de ser mais declarativo e, portanto, mais legível e fácil de entender do que Python. Em algumas implantações complexas, a expressividade completa de Python pode tornar as coisas mais simples. Nesse caso, o Jinja é suficiente para criar os recursos necessários.

Em um modelo, determinadas variáveis de ambiente são configuradas automaticamente, e você pode acessá-las usando o dicionário env. Nesse caso, o nome da implantação é reutilizado na atribuição de nomes para os recursos criados. Para mais informações sobre as variáveis de ambiente disponíveis, consulte Como usar variáveis de ambiente na documentação do Deployment Manager:

{% set NAME = "bookshelf-" + env["deployment"] %}
{% set SERVICE = "bookshelf-" + env["deployment"] + "-frontend" %}

O modelo usa o mesmo script de inicialização usado no tutorial do Compute Engine. O conteúdo do script é inserido no modelo, e a diretiva de recuo para Jinja recua o conteúdo corretamente:

            value: |
{{imports['startup-script']|indent(14, true)}}

Em um modelo Jinja do Deployment Manager, também é possível consultar os recursos criados em outro lugar no modelo. Nesse exemplo, o serviço de back-end usa a referência do grupo de instâncias gerenciado para consultar o grupo de instâncias para que ele deve apontar:

- group: $(ref.{{ NAME }}-frontend-group.instanceGroup)
  zone: {{ properties['zone'] }}

As propriedades especificadas em config.yaml podem ser usadas no modelo:

minNumReplicas: {{ properties['min-instances'] }}
maxNumReplicas: {{ properties['max-instances'] }}
loadBalancingUtilization:
  utilizationTarget: {{ properties['target-utilization'] }}

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Exclua o projeto

O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.

Para excluir o projeto:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Excluir a implantação

Para excluir a implantação, digite o comando a seguir. Esse comando exclui o balanceador de carga e todas as instâncias do Compute Engine associados à implantação:

gcloud deployment-manager deployments delete my-deployment

A seguir