1. Introdução
Olá a todos, obrigado pela presença hoje! Tudo pronto para conhecer o Google Compute Engine?
Neste codelab, veremos o Compute Engine funcionando com um aplicativo de livro de visitas de exemplo.
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ê 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 à sua 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 apresentam 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 vamos usar 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 discutido anteriormente, usaremos 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
. Isso será importante mais tarde.
A instância é criada usando uma série de padrões :
- A zona escolhida. Todas as instâncias residem em uma zona. Selecione uma zona no momento da criação da instância usando a sinalização
--zone
ou defina uma zona padrão (como fizemos na configuração inicial) e omita a sinalização--zone
. - A imagem mais recente do Debian GNU/Linux 9 (extended). Se você estiver usando sua própria imagem personalizada, forneça 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-4
oun1-highcpu-6
. Se nenhum dos tipos de máquina predefinidos corresponder à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 conferir 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 a portas. Como vamos instalar o Nginx em breve, primeiro vamos ativar a porta 80 na configuração do firewall.
$ 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
que tem uma lista padrão de blocos de endereços IP com permissão para fazer conexões de entrada (--source-ranges
) definidas como 0.0.0.0/0
(Em todos os lugares).
Execute gcloud compute firewall-rules create --help
para conferir todos os padrões e todas as opções disponíveis, incluindo a capacidade de aplicar regras de firewall baseadas em tags.
5. Estabeleça uma conexão SSH com a instância
Para usar o SSH na instância pela linha de comando (ainda do 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! muito fácil. (Na produção, certifique-se de digitar uma senha longa :)
Também é possível usar SSH na instância diretamente do console ( console.cloud.google.com), navegando 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 suas instâncias na IU 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, navegue até http://EXTERNAL_IP/
, em que EXTERNAL_IP
é o IP público de myinstance para ver a página do nginx:
7. Script de inicialização
Em vez de configurar a instância todas as vezes, use um script de inicialização para inicializá-la 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
Navegue até http://EXTERNAL_IP/
para ver a página inicial atualizada. Se a página não aparecer, tente de novo imediatamente após alguns segundos, e isso significa que o host ainda pode estar iniciando o nginx.
8. Crie um cluster de servidores
Para criar um cluster de servidores, primeiro você precisa criar um modelo de instância. Depois de criar um modelo de instância, crie um grupo 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 segundo lugar, 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ê 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 :
- um balanceador de carga de rede L3
- um balanceador de carga HTTP(S) L7;
Vamos criar um balanceador de carga de rede regional direcionado ao 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
Em seguida, você pode acessar o balanceador de carga no navegador http://IP_ADDRESS/
, em que IP_ADDRESS
é o endereço mostrado como resultado da execução do comando anterior.
Por causa disso, 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, eles continuarão 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
Todos os comandos acima precisam confirmar 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 amplo conjunto de recursos. Talvez você queira mergulhar em alguns destes tópicos :
- 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
- Como migrar VMs para o Compute Engine - https://cloud.google.com/compute/docs/vm-migration/
Google Kubernetes Engine
O Google Kubernetes Engine (GKE) é a oferta de Kubernetes hospedada e totalmente gerenciada do Google Cloud. Há vários codelabs disponíveis para ajudar você a começar a usar o GKE. Este é 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