Google Compute Engine

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.

ComputeEngine_128px.png

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

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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).

  1. Para ativar o Cloud Shell no Console do Cloud, basta clicar em Ativar o Cloud Shell b125d9eb26a46cc5.png. Leva apenas alguns instantes para provisionar e se conectar ao ambiente.

1067942a9a93f70.png

Screen Shot 2017-06-14 às 10.13.43 PM.png

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:

cc3895eeac80db2c.png

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>
  1. 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 --zone ou 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, como n1-highmem-4 ou n1-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.

bfbc03997a41946e.png

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:

dcc4e56e82ba2603.png

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:

49b52b9354041f3b.png

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 :

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 :

Envie um feedback

  • Reserve um momento para completar nossa pesquisa curta