Neste tutorial, você implantará um aplicativo de registro de ocorrências de exemplo que usa o Node.js para o front-end e MySQL para o back-end. Ao término do tutorial, a implantação terá os seguintes recursos:
Se você não estiver familiarizado com o Deployment Manager, consulte o Guia de início rápido ou os tutoriais do Guia passo a passo.
Antes de começar
- Para usar os exemplos de linha de comando deste guia, instale a ferramenta de linha de comando "gcloud".
- Para usar os exemplos de API deste guia, configure o acesso de API.
- Leia a visão geral do balanceamento de carga de rede do Compute Engine.
- Leia a visão geral dos contêineres do Docker.
Como criar modelos de recurso
Neste exemplo, você inicia uma implantação com diversos recursos do Google Cloud. Para começar, crie separadamente os modelos que definem esses recursos. Em seguida, chame esses modelos na configuração final. Sua implantação contém estes recursos:
- uma instância do Compute Engine que hospeda um banco de dados MySQL para o aplicativo;
- um modelo de instâncias de front-end que usa uma imagem do Docker para o aplicativo Node.js;
- um grupo de instâncias gerenciadas que usa o modelo para criar duas instâncias de front-end;
- um autoescalador que inicia ou para instâncias adicionais de front-end com base no tráfego recebido;
- uma verificação de integridade que inspeciona se as instâncias de front-end estão disponíveis para o trabalho;
- um balanceador de carga de rede com uma regra de encaminhamento;
- um pool de destino para o grupo de instâncias gerenciadas
Como criar o modelo para o back-end do MySQL
O back-end desse aplicativo é uma única instância do Compute Engine que executa um contêiner Docker
com o MySQL. O modelo container_vm.py
define uma
instância do Compute Engine que executa contêineres Docker. Para garantir que o
modelo siga a estrutura correta e inclua todas as propriedades necessárias,
você precisa de um arquivo de esquema.
Copie o modelo abaixo ou faça o download dele do repositório do GitHub:
Faça o download do arquivo de esquema para o modelo.
O modelo tem algumas propriedades indefinidas, como containerImage
, que serão
definidas em modelos posteriores.
Quando você usa imagens de contêiner em instâncias do Compute Engine, também precisa
fornecer um arquivo de manifesto que descreve a imagem de contêiner a ser usada. Crie um
método auxiliar chamado container_helper.py
para definir dinamicamente o manifesto do
contêiner:
Como criar o modelo para o front-end do Node.js
O front-end do aplicativo executa o Node.js e permite que os usuários postem mensagens na página da Web. Esse front-end é executado em um grupo de instâncias de máquina virtual, com o suporte de um autoescalador e um balanceador de carga. Para criar modelos de front-end, use as instruções a seguir.
Crie um recurso de modelo de instância.
Você precisa de um modelo de instância para criar um grupo de instâncias gerenciadas, que é um grupo de instâncias idênticas de máquina virtual (VM) que você controla como uma única entidade.
Crie um arquivo chamado
container_instance_template.py
e faça o download do esquema para o modelo:Crie um autoescalador, um grupo de instâncias gerenciado e um balanceador de carga.
Em seguida, crie outro modelo que use o
container_instance_template.py
e cria o restante dos recursos de front-end, incluindo um autoescalador, um balanceador de carga e um grupo de instâncias gerenciadas.
Esse modelo inclui os seguintes recursos:
Um modelo de instância usando o modelo
container_instance_template.py
.Um grupo de instâncias gerenciadas que usa o modelo de instância e um autoescalador que faz referência ao grupo de instâncias gerenciadas. O uso de referências garante que o Deployment Manager crie os recursos em uma ordem específica. Neste caso, o grupo de instâncias gerenciadas é criado antes do autoescalador.
Um balanceador de carga de rede contendo os seguintes recursos:
- uma regra de encaminhamento com um único endereço IP externo exposto à Internet;
- um pool de destino que contém o grupo de instâncias gerenciadas criado anteriormente;
- uma verificação de integridade para anexar ao pool de destino
Crie um arquivo chamado frontend.py
e faça o download do esquema para o modelo:
Faça o download do arquivo de esquema para o modelo.
Como criar um modelo unificado
Por fim, crie um modelo que reúna os modelos de back-end e front-end. Crie um arquivo chamado nodejs.py
com o seguinte conteúdo:
Faça o download do arquivo de esquema para o modelo.
Observe que o front-end do aplicativo é denominado de env["deployment"]-frontend
, e
que o back-end também é denominado da mesma forma. Quando você implanta o aplicativo,
o Deployment Manager substitui automaticamente env["deployment"]
pelo
nome da implantação.
Como criar a configuração
Depois que todos os modelos estiverem prontos, será possível criar uma configuração que
será usada para implantar os recursos. Crie um arquivo de configuração
chamado nodejs.yaml
com o seguinte conteúdo:
Substitua ZONE_TO_RUN
pela zona em que você quer seus recursos, como
us-central1-a
.
Como implantar recursos
Agora, implante os recursos. Usando a Google Cloud CLI, execute:
gcloud deployment-manager deployments create advanced-configuration --config nodejs.yaml
Quando a implantação estiver completa, o Deployment Manager mostrará um resumo dos recursos criados, semelhante ao seguinte:
Waiting for create operation-1468522101491-5379cf2344539-5961abe8-a500190c...done.
Create operation operation-1468522101491-5379cf2344539-5961abe8-a500190c completed successfully.
NAME TYPE STATE ERRORS
advanced-configuration-application-fw compute.v1.firewall COMPLETED []
advanced-configuration-backend compute.v1.instance COMPLETED []
advanced-configuration-frontend-as compute.v1.autoscaler COMPLETED []
advanced-configuration-frontend-hc compute.v1.httpHealthCheck COMPLETED []
advanced-configuration-frontend-igm compute.v1.instanceGroupManager COMPLETED []
advanced-configuration-frontend-it compute.v1.instanceTemplate COMPLETED []
advanced-configuration-frontend-lb compute.v1.forwardingRule COMPLETED []
advanced-configuration-frontend-tp compute.v1.targetPool COMPLETED []
Como testar o app
Para testar o aplicativo, consiga primeiro o endereço IP externo que está suprindo o tráfego, por meio da consulta da regra de encaminhamento:
$ gcloud compute forwarding-rules describe advanced-configuration-frontend-lb --region us-central1 IPAddress: 104.154.81.44 IPProtocol: TCP creationTimestamp: '2016-07-14T11:48:37.228-07:00' description: '' id: '9033201246750269546' kind: compute#forwardingRule name: advanced-configuration-frontend-lb portRange: 8080-8080 region: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1 selfLink: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/forwardingRules/advanced-configuration-frontend-lb target: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/targetPools/advanced-configuration-frontend-tp
Neste caso, o IP externo é 104.154.81.44
.
Em seguida, em um navegador, visite o endereço IP externo com a porta 8080. Por exemplo, se o endereço IP externo for 104.154.81.44
, o URL será:
http://104.154.81.44:8080
Aparecerá uma página em branco, o que é esperado. Em seguida, poste uma mensagem na página. Acesse o seguinte URL:
http://104.154.81.44:8080?msg=hellothere!
Você verá uma confirmação de que a mensagem foi adicionada. Volte ao URL principal, e a página terá a mensagem:
hellothere!
Agora você tem um aplicativo implantado capaz de registrar as mensagens recebidas.
Próximas etapas
Depois de concluir este exemplo, você poderá:
- elaborar este exemplo implantando instâncias com seus próprios contêineres do Docker. Para modificar os contêineres do Docker usados neste tutorial, edite os Dockerfiles no repositório do GitHub;
- Ver mais exemplos de implantação no repositório do Deployment Manager no GitHub;
- Saiba mais sobre modelos e implantações.