1. Introdução
Olá, pessoal, obrigado por virem hoje! Tudo pronto para aprender sobre o Google Compute Engine?
Neste codelab, vamos conhecer o Compute Engine usando um exemplo de aplicativo de livro de visitas.
Você vai criar instâncias do Compute Engine, implantar o nginx e, por fim, colocar um balanceador de carga de rede na frente. É possível criar uma instância do Compute Engine no console gráfico ou na linha de comando. Neste laboratório, você vai aprender a usar a linha de comando.

O Google Compute Engine oferece máquinas virtuais que são executadas nos data centers do Google conectados à rede de fibra mundial. As ferramentas e o fluxo de trabalho oferecidos permitem o escalonamento de instâncias únicas para uma computação em nuvem global com balanceamento de carga.
Essas VMs são inicializadas rapidamente, incluem armazenamento em disco permanente e oferecem desempenho consistente. As máquinas estão disponíveis em várias configurações, incluindo tamanhos predefinidos, e também podem ser criadas com tipos de máquinas personalizados otimizados para suas necessidades específicas.
Por fim, as máquinas virtuais do Compute Engine também são a tecnologia usada por vários outros produtos do Google Cloud (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow etc.).
2. Configuração e requisitos
Configuração de ambiente autoguiada
- 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.



- O Nome do projeto é o nome de exibição para os participantes do projeto. Ele é uma string de caracteres que não é usada pelas APIs do Google e pode ser atualizada a qualquer momento.
- O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser alterado após a definição. O Console do Cloud gera automaticamente uma string única, geralmente não importa o que seja. Na maioria dos codelabs, você precisará fazer referência ao ID do projeto, que geralmente é identificado como
PROJECT_ID. Então, se você não gostar dele, gere outro ID aleatório ou crie um próprio e veja se ele está disponível. Em seguida, ele fica "congelado" depois que o projeto é criado. - Há um terceiro valor, um Número de projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
- Em seguida, você precisará ativar o faturamento no Console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não será muito cara, se tiver algum custo. Para encerrar os recursos e não gerar cobranças além deste tutorial, siga as instruções de "limpeza" encontradas no final do codelab. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.
Google Cloud Shell
Embora o Google Cloud e o Compute Engine possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.
O Cloud Shell é uma máquina virtual com base em Debian que contém 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. Isso significa que tudo que você precisa para este codelab é um navegador (sim, funciona em um Chromebook).
- Para ativar o Cloud Shell no Console do Cloud, basta clicar em Ativar o Cloud Shell
. Leva apenas alguns instantes para provisionar e se conectar ao ambiente.


Depois de se conectar ao Cloud Shell, você já estará autenticado e o projeto estará configurado com seu PROJECT_ID.
gcloud auth list
Resposta ao comando
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Resposta ao comando
[core] project = <PROJECT_ID>
Se, por algum motivo, o projeto não estiver definido, basta emitir o seguinte comando:
gcloud config set project <PROJECT_ID>
Quer encontrar seu PROJECT_ID? Veja qual ID você usou nas etapas de configuração ou procure-o no painel do Console do Cloud:

O Cloud Shell também define algumas variáveis de ambiente por padrão, o que pode ser útil ao executar comandos futuros.
echo $GOOGLE_CLOUD_PROJECT
Resposta ao comando
<PROJECT_ID>
- Defina a zona padrão e a configuração do projeto:
gcloud config set compute/zone us-central1-f
É possível escolher uma variedade de zonas diferentes. Para mais informações, consulte Regiões e zonas.
3. Criar uma instância do Compute Engine
Como discutimos anteriormente, vamos usar a linha de comando gcloud neste codelab. Tudo o que é feito aqui pode ser realizado usando o console, disponível em console.cloud.google.com.
Primeiro, vamos criar uma instância com as configurações padrão :
$ gcloud compute instances create myinstance Created [...]. NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
Anote o EXTERNAL_IP, porque ele será importante mais tarde.
A instância é criada usando vários padrões :
- A zona escolhida. Todas as instâncias ficam em uma zona. É possível selecionar uma zona ao criar a instância usando a flag
--zoneou definir uma zona padrão (como fizemos na configuração inicial) e omitir a flag--zone. - A imagem mais recente do Debian GNU/Linux 9 (stretch). Se você estiver usando sua própria imagem personalizada, informe o nome dela aqui. Por exemplo,
--image my-own-image. - O tipo de máquina
n1-standard-1. É possível selecionar outro tipo de máquina, comon1-highmem-4oun1-highcpu-6. Se nenhum dos tipos de máquina predefinidos atender às suas necessidades, use um tipo de máquina personalizado. - um disco permanente raiz com o mesmo nome da instância. O disco é automaticamente anexado à instância.
Execute gcloud compute instances create --help para ver todas as opções disponíveis.
4. Ativar o firewall para a porta 80
Por padrão, o Google Cloud Platform permite apenas alguns acessos de porta. Como vamos instalar o Nginx em breve, vamos ativar a porta 80 na configuração do firewall primeiro.
$ gcloud compute firewall-rules create allow-80 --allow tcp:80 Created [...]. NAME: allow-80 NETWORK: default DIRECTION: INGRESS PRIORITY: 1000 ALLOW: tcp:80 DENY: DISABLED: False
Isso vai criar uma regra de firewall chamada allow-80 com uma lista padrão de blocos de endereços IP que podem fazer conexões de entrada (--source-ranges) definidas como 0.0.0.0/0 (Em qualquer lugar).
Execute gcloud compute firewall-rules create --help para conferir todos os padrões e opções disponíveis, incluindo a capacidade de aplicar regras de firewall com base em tags.
5. Acessar a instância por SSH
Para usar o SSH na instância pela linha de comando (ainda no Cloud Shell) :
$ gcloud compute ssh myinstance Waiting for SSH key to propagate. Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts. ... yourusername@myinstance:~#
É isso! Bem fácil. (Na produção, insira uma senha longa :)
Também é possível usar SSH na instância diretamente do console ( console.cloud.google.com). Para isso, navegue até Compute Engine > Instâncias de VM e clique em SSH.

6. Instalar o Nginx
Faça login em myinstance, a instância recém-criada, e instale o nginx:
$ sudo su - # apt update # apt install -y nginx # service nginx start # exit
Teste se o servidor está em execução usando curl de myinstance:
$ curl -s localhost | grep nginx <title>Welcome to nginx!</title> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and <a href="http://nginx.org/">nginx.org</a>.<br/> <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p>
Para encontrar o IP externo da sua instância, liste as instâncias na interface da Web:

Saia do SSH e execute este comando no Cloud Shell:
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
Em seguida, acesse http://EXTERNAL_IP/, em que EXTERNAL_IP é o IP público de myinstance. A página do nginx vai aparecer:

7. Script de inicialização
Em vez de configurar a instância todas as vezes, use um script de inicialização para inicializar a instância na inicialização.
Crie um arquivo chamado startup.sh com o seguinte conteúdo. Você pode usar seu editor de texto favorito: vim, nano ou emacs.
#! /bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
Para criar uma nova instância de VM com esse script de inicialização, basta digitar :
$ gcloud compute instances create nginx \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING
Acesse http://EXTERNAL_IP/ para conferir a página inicial atualizada. Se a página não aparecer imediatamente, tente de novo depois de alguns segundos. Talvez o host ainda esteja iniciando o nginx.
8. Criar um cluster de servidores
Para criar um cluster de servidores, primeiro é necessário criar um modelo de instância. Depois de criar um modelo de instância, você pode criar um grupo de instâncias para gerenciar o número de instâncias a serem criadas.
Primeiro, crie um modelo de instância usando o script de inicialização :
$ gcloud compute instance-templates create nginx-template \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00
Em seguida, vamos criar um pool de destino. Com ele, teremos um único ponto de acesso a todas as instâncias de um grupo. O pool também é necessário para o balanceamento de carga nas próximas etapas.
$ gcloud compute target-pools create nginx-pool Created [...]. NAME: nginx-pool REGION: us-central1 SESSION_AFFINITY: NONE BACKUP: HEALTH_CHECKS:
Por fim, crie um grupo de instâncias usando o modelo:
$ gcloud compute instance-groups managed create nginx-group \
--base-instance-name nginx \
--size 2 \
--template nginx-template \
--target-pool nginx-pool
Created [...].
NAME: nginx-group
LOCATION: us-central1-f
SCOPE: zone
BASE_INSTANCE_NAME: nginx
SIZE: 0
TARGET_SIZE: 2
INSTANCE_TEMPLATE: nginx-template
AUTOSCALED: no
Isso vai criar mais duas instâncias de VM com nomes prefixados com nginx-.
Agora você poderá ver todas as instâncias criadas.
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-frpl ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-ztg4 ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
9. Crie um balanceador de carga de rede
Há vários tipos de balanceadores de carga no Google Cloud Platform, incluindo :
Vamos criar um balanceador de carga de rede regional para nosso grupo de instâncias:
$ gcloud compute forwarding-rules create nginx-lb \
--ports 80 \
--target-pool nginx-pool
Created [...].
$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool
É possível acessar o balanceador de carga no navegador http://IP_ADDRESS/, em que IP_ADDRESS é o endereço que aparece como resultado da execução do comando anterior.
Devido ao tempo, não vamos criar um balanceador de carga HTTP hoje.
10. Limpar o cluster
Não se esqueça de desligar o cluster. Caso contrário, ele vai continuar em execução e acumulando custos. Os comandos a seguir vão excluir as instâncias do Google Compute Engine, o grupo de instâncias, o grupo de segmentação e o balanceador de carga.
$ gcloud compute forwarding-rules delete nginx-lb $ gcloud compute instance-groups managed delete nginx-group $ gcloud compute target-pools delete nginx-pool $ gcloud compute instance-templates delete nginx-template $ gcloud compute instances delete nginx $ gcloud compute instances delete myinstance $ gcloud compute firewall-rules delete allow-80
Cada um dos comandos acima vai pedir que você confirme a exclusão do recurso.
11. A seguir
Parabéns, você concluiu este codelab do Compute Engine.
Mais recursos do Compute Engine
O Google Compute Engine tem um conjunto avançado de recursos. Você pode consultar alguns destes :
- VMs preemptivas: https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- Nós de locatário individual: https://cloud.google.com/compute/docs/nodes/create-nodes
- GPUs e TPUs: https://cloud.google.com/compute/docs/gpus/add-gpus
- Instâncias do Windows: https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- Como rotular recursos: https://cloud.google.com/compute/docs/labeling-resources
- Migrar VMs para o Compute Engine: https://cloud.google.com/compute/docs/vm-migration/
Google Kubernetes Engine
O Google Kubernetes Engine (GKE) é a oferta hospedada e totalmente gerenciada do Kubernetes no Google Cloud. Há vários codelabs disponíveis para ajudar você a começar a usar o GKE. Confira um bom exemplo para começar :
- Codelab do Google Kubernetes Engine - https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
Envie um feedback
- Reserve um momento para completar nossa pesquisa curta