Google Compute Engine

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.

ComputeEngine_128px.png

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

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

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

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 suas instâncias na IU 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, navegue até http://EXTERNAL_IP/, em que EXTERNAL_IP é o IP público de myinstance para ver a página do nginx:

49b52b9354041f3b.png

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 :

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 :

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 :

Envie um feedback

  • Reserve um momento para completar nossa pesquisa curta