Neste tutorial, implementa uma app de registo de exemplo que usa o Node.js para o respetivo front-end e o MySQL para o respetivo back-end. No final do tutorial, a sua implementação tem os seguintes recursos:
Se não tiver experiência no Deployment Manager, consulte os tutoriais de início rápido ou o guia passo a passo.
Antes de começar
- Se quiser usar os exemplos de linhas de comando neste guia, instale a ferramenta de linhas de comando`gcloud`.
- Se quiser usar os exemplos de API neste guia, configure o acesso à API.
- Leia uma vista geral do balanceamento de carga de rede do Compute Engine.
- Leia uma vista geral dos contentores Docker.
Criar modelos de recursos
Este exemplo inicia uma implementação que contém uma variedade de Google Cloud recursos. Para começar, crie modelos que definam estes recursos em separado. Mais tarde, chama estes modelos na sua configuração final. A implementação contém os seguintes recursos:
- Uma instância do Compute Engine que aloja uma base de dados MySQL para a app.
- Um modelo de instância para instâncias de front-end, que usa uma imagem Docker para a app Node.js.
- Um grupo de instâncias geridas, que usa o modelo de instância para criar duas instâncias de front-end.
- Um escalador automático, que inicia ou para instâncias de front-end adicionais com base no tráfego recebido.
- Uma verificação de funcionamento, que verifica se as instâncias de front-end estão disponíveis para realizar tarefas.
- Um balanceador de carga de rede com uma regra de encaminhamento.
- Um grupo de destino para o grupo de instâncias geridas.
Criar o modelo para o back-end do MySQL
O back-end desta app é uma única instância do Compute Engine que executa um contentor do Docker do MySQL. O modelo container_vm.py
define uma instância do Compute Engine que pode executar contentores Docker. Para garantir que o modelo segue a estrutura correta e contém todas as propriedades necessárias, também precisa de um ficheiro de esquema.
Copie o modelo abaixo ou transfira-o do repositório do GitHub:
Transfira o ficheiro de esquema do modelo.
O modelo tem algumas propriedades indefinidas, como containerImage
, que são definidas em modelos posteriores.
Quando usa imagens de contentores em instâncias do Compute Engine, também tem de
fornecer um ficheiro de manifesto que descreva a imagem de contentor a usar. Crie um método auxiliar denominado container_helper.py
para definir dinamicamente o manifesto do contentor:
Criar o modelo para o front-end do Node.js
O front-end da app é executado no Node.js e permite que os utilizadores publiquem mensagens na página Web. O front-end é executado num grupo de instâncias de máquinas virtuais, suportado por um escalador automático e um equilibrador de carga. Para criar modelos de frontend, use as seguintes instruções.
Crie um recurso de modelo de instância.
Precisa de um modelo de instância para criar um grupo de instâncias geridas, que é um grupo de instâncias de máquinas virtuais (VMs) idênticas que controla como uma única entidade.
Crie um ficheiro com o nome
container_instance_template.py
e transfira o esquema para o modelo:Crie um redimensionador automático, um grupo de instâncias gerido e um equilibrador de carga.
Em seguida, crie outro modelo que use o
container_instance_template.py
modelo e crie os restantes recursos de front-end, incluindo um escalador automático, um equilibrador de carga e um grupo de instâncias gerido.
Este modelo inclui os seguintes recursos:
Um modelo de instância que usa o
container_instance_template.py
modelo.Um grupo de instâncias geridas que usa o modelo de instância e um autoscaler que faz referência ao grupo de instâncias geridas. A utilização de referências garante que o Deployment Manager cria os recursos numa ordem específica. Neste caso, o grupo de instâncias gerido é criado antes do escalador automático.
Um balanceador de carga de rede que contém os seguintes recursos:
- Uma regra de encaminhamento com um único endereço IP externo exposto à Internet.
- Um conjunto de destinos que contém o grupo de instâncias geridas que criou anteriormente.
- Uma verificação de funcionamento a anexar ao conjunto de destino.
Crie um ficheiro com o nome frontend.py
e transfira o esquema do modelo:
Transfira o ficheiro de esquema do modelo.
Criar um modelo unificador
Por último, crie um modelo que reúna os modelos de back-end e frontend. Crie um ficheiro denominado nodejs.py
com o seguinte conteúdo:
Transfira o ficheiro de esquema do modelo.
Tenha em atenção que o frontend da sua app tem o nome env["deployment"]-frontend
e que o backend também tem um nome semelhante. Quando implementa a app, o Deployment Manager substitui automaticamente env["deployment"]
pelo nome da implementação.
A criar a sua configuração
Depois de ter todos os modelos prontos, pode criar uma configuração que vai ser usada para implementar os seus recursos. Crie um ficheiro de configuração denominado
nodejs.yaml
com o seguinte conteúdo:
Substitua ZONE_TO_RUN
pela zona onde quer os seus recursos, como
us-central1-a
.
Implementar os seus recursos
Agora, implemente os seus recursos. Usando a CLI do Google Cloud, execute:
gcloud deployment-manager deployments create advanced-configuration --config nodejs.yaml
Quando a implementação estiver concluída, o Deployment Manager mostra 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 []
Testar a app
Para testar a sua app, obtenha primeiro o endereço IP externo que está a publicar tráfego, consultando a 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, num navegador, aceda ao endereço IP externo com a porta 8080. Por exemplo, se o seu endereço IP externo for 104.154.81.44
, o URL seria:
http://104.154.81.44:8080
Deve ver uma página em branco, o que é esperado. Em seguida, publique uma mensagem na página. Aceda ao seguinte URL:
http://104.154.81.44:8080?msg=hellothere!
É apresentada uma confirmação de que a mensagem foi adicionada. Regresse ao URL principal e a página deve apresentar a seguinte mensagem:
hellothere!
Agora, tem uma app implementada que pode registar as mensagens que lhe são enviadas.
Passos seguintes
Depois de concluir este exemplo, pode:
- Baseie-se neste exemplo implementando instâncias com os seus próprios contentores Docker. Se quiser modificar os contentores Docker usados neste tutorial, edite os Dockerfiles no repositório do GitHub.
- Veja mais exemplos de implementações no repositório do GitHub do Deployment Manager.
- Leia mais sobre os modelos e as implementações.