Implantar o Bookshelf em Node.js usando o Deployment Manager

Neste tutorial, você aprende a implantar a amostra do Bookshelf em Node.js usando o Google Cloud Deployment Manager.

O Deployment Manager permite criar recursos do Cloud Platform Google (GCP) de forma declarativa e repetível. Assim, é possível criar todos os recursos necessários para a implantação em uma única etapa. Além disso, é possível atualizar as implantações e controlar as modificações ao longo do tempo. Você pode criar modelos usando o Jinja ou o Python e definir parâmetros para que implantações semelhantes possam compartilhar 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

Este tutorial usa componentes do Cloud Platform que podem ser cobrados, entre eles os seguintes:

  • Compute Engine
  • Cloud Storage
  • Cloud Datastore
  • Cloud Logging
  • Cloud Pub/Sub

Use a Calculadora de preços para gerar uma estimativa de custo com base no uso previsto. Novos usuários do GCP podem aproveitar a avaliação gratuita.

Antes de começar

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. Selecione ou crie um projeto do Google Cloud Platform.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform.

    Saiba como ativar o faturamento

  4. Ativar Cloud Datastore, Cloud Storage e Cloud Pub/Sub APIs.

    Ativar as APIs

  5. Instale e inicialize o SDK do Cloud.
  6. Use o instalador oficial para instalar o Node.js e o npm.

Como criar um intervalo do Cloud Storage

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

  1. Em uma janela de terminal, digite o seguinte comando:

    gsutil mb gs://[YOUR-BUCKET-NAME]

    Em que:

    • [YOUR-BUCKET-NAME] representa o nome do intervalo do Cloud Storage.
  2. Para visualizar imagens que foram carregadas no aplicativo 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 aplicativo de amostra está disponível no GitHub em GoogleCloudPlatform/nodejs-getting-started.

  1. Clone o repositório:

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

    cd nodejs-getting-started/7-gce
    

Como configurar o app

No diretório 7-gce, crie um arquivo chamado config.json com o conteúdo abaixo.

{
    "GCLOUD_PROJECT": "[YOUR_PROJECT_ID]",
    "CLOUD_BUCKET": "[YOUR_BUCKET_NAME]",
    "DATA_BACKEND": "datastore",
    "OAUTH2_CLIENT_ID": "none",
    "OAUTH2_CLIENT_SECRET": "none",
    "OAUTH2_CALLBACK": "http://localhost:8080/auth/google/callback"
}

Substitua o [YOUR_PROJECT_ID] pelo código do projeto do Google Cloud e [YOUR_BUCKET_NAME] pelo nome do intervalo do Cloud Storage.

Como executar o app no computador local

Siga as etapas abaixo para executar o app localmente.

  1. Para instalar as dependências, execute npm install.

  2. Para iniciar o aplicativo, execute npm start.

  3. Para ver o aplicativo em execução local, acesse http://localhost:8080.

  4. Para interromper o servidor da web local, pressione Control+C.

Como implantar o app de amostra

Como enviar o código para um repositório

Há diversas maneiras de colocar um código em uma instância do Compute Engine em execução. Uma delas é usar o Cloud Source Repositories. Cada projeto inclui um repositório Git, que pode ser facilmente acessado pelas instâncias do Compute Engine. A versão mais recente do código do aplicativo é transferida para elas durante a inicialização. Isso é prático porque, para atualizar o aplicativo, você não precisa configurar novas imagens ou instâncias. Basta reiniciar uma instância ou criar uma nova.

Se for a primeira vez que você usa o Git, utilize git config --global para configurar sua identidade.

Primeiro, crie um repositório nesta página no seu Console do GCP. Outra opção é criar um repositório usando o gcloud:

gcloud source repos create [YOUR_REPO]

em que [YOUR_PROJECT_ID] é seu código de projeto e [YOUR_REPO] é o nome do repositório que você acabou de criar. Em seguida, envie o código do aplicativo para o repositório do projeto:

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

em que [YOUR_PROJECT_ID] é o código do projeto.

Como criar a implantação

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

Acesse o diretório deployment_manager:

cd nodejs-getting-started/7-gce/gce/deployment-manager

Crie a implantação:

gcloud deployment-manager deployments create my-deployment --config config.yaml

Veja uma lista de todas as implantações:

gcloud deployment-manager deployments list

Solicite uma descrição da implantação e dos recursos criados:

gcloud deployment-manager deployments describe my-deployment

Como ver 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. Para verificar o andamento, digite este comando:

gcloud compute backend-services get-health bookshelf-my-deployment-frontend --global

Quando pelo menos uma das instâncias estiver com o status HEALTHY, insira o seguinte comando para consultar o endereço IP de encaminhamento do balanceador de carga:

gcloud compute forwarding-rules list --global

O endereço IP das regras de encaminhamento está na coluna IP_ADDRESS. No navegador, digite o endereço IP da lista.

O app agora está em execução no Google Cloud Platform com carga balanceada e escalonamento automático.

Como entender o código

Como configurar a implantação

Veja como a implantação está configurada no 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-8
    min-instances: 1
    max-instances: 10
    target-utilization: 0.6
    scopes:
    - https://www.googleapis.com/auth/cloud-platform

No arquivo de configuração, o arquivo de modelo é importado e usado 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.

Como configurar o esquema do modelo de implantação

Agora, veja o arquivo de esquema bookshelf.jinja.schema. Nele, são definidos e documentados os parâmetros fornecidos pela implantação 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

Como configurar o modelo de implantação

No modelo, são definidos os diversos recursos para criar um grupo de instâncias gerenciado com carga balanceada e escalonamento automático. Consulte os comentários do modelo para uma descrição completa dos recursos criados e veja o tutorial do Bookshelf no Compute Engine para uma explicação mais detalhada sobre esses recursos.

É importante lembrar que, com o Deployment Manager, é possível definir recursos de nuvem de maneira declarativa. No entanto, a maioria das configurações de um recurso é definida pela API dele. Por exemplo, a maior parte das opções de configuração do recurso “Modelo de instância” pode ser encontrada na própria definição desse recurso, 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. Por ser mais declarativa, Jinja tem a vantagem de ser mais legível e fácil de entender. Em algumas implantações complexas, a expressividade completa de Python pode tornar as coisas mais simples. No caso em questão, Jinja é suficiente para criar os recursos necessários.

Em um modelo, algumas variáveis de ambiente são configuradas automaticamente e acessadas por meio do 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 variáveis de ambientes disponíveis, consulte Como adicionar modelos na documentação do Deployment Manager:

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

Observe que o mesmo script de inicialização usado no Tutorial do Compute Engine também é usado no modelo. O valor é importado por meio de config.yaml e inserido aqui. É importante que os espaços em branco do script sejam mantidos no modelo. A diretiva de recuo para Jinja é usada para atender esse requisito:

            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. Neste exemplo, a referência do grupo de instâncias gerenciado é usada no serviço de back-end para consultar o grupo para o qual esse serviço deve apontar:

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

As propriedades especificadas em config.yaml são usadas no modelo:

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

Como fazer a limpeza

Para evitar que os recursos usados neste tutorial sejam cobrados na conta do Google Cloud Platform:

Excluir o projeto

A maneira mais fácil de evitar o faturamento é excluir o projeto criado para o tutorial.

Para excluir o projeto:

  1. No Console do GCP, acesse a página Projetos.

    Acessar a página Projetos

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir delete.
  3. Na caixa de diálogo, digite o código do projeto e clique em Encerrar para excluí-lo.

Como excluir a implantação

Digite o comando a seguir para excluir a implantação. O balanceador de carga e todas as instâncias do Compute Engine associadas à implantação serão excluídos:

gcloud deployment-manager deployments delete my-deployment

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…