Google Compute Engine

1. Introdução

Olá, pessoal! Agradecemos a presença. Pronto para aprender sobre o Google Compute Engine?

Neste codelab, vamos conhecer o Compute Engine usando 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. Este laboratório ajudará você 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 óptica global. As ferramentas e o fluxo de trabalho oferecidos permitem o escalonamento de instâncias únicas para computação em nuvem com balanceamento de carga global.

Essas VMs são inicializadas rapidamente, vêm com armazenamento em disco permanente e proporcionam desempenho consistente. As máquinas estão disponíveis em muitas configurações, incluindo tamanhos predefinidos e também podem ser criadas com tipos de máquinas personalizados de acordo com 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, como Kubernetes Engine, Cloud Dataproc, Cloud Dataflow etc.

2. Configuração e requisitos

Configuração de ambiente personalizada

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Se você ainda não tiver uma conta do Gmail ou do Google Workspace, crie uma.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name é o nome de exibição dos participantes do projeto. Ela é uma string de caracteres 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 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 for o caso. Para encerrar os recursos a fim de não gerar o faturamento 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 teste gratuito de US$300.

Google Cloud Shell

Embora o Google Cloud e o Compute Engine possam ser operados remotamente no 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. Crie uma instância do Compute Engine

Conforme discutido anteriormente, usaremos a linha de comando gcloud neste codelab. Tudo isso é feito no console (disponível em console.cloud.google.com).

Primeiro, vamos criar uma instância com 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 é importante mais tarde.

A instância é criada com o uso de vários padrões :

  • A zona escolhida. Todas as instâncias residem em uma zona. É possível selecionar uma zona no momento da criação da instância usando a sinalização --zone ou definir uma zona padrão, como fizemos na configuração inicial, e omitir a sinalização --zone.
  • a imagem mais recente do Debian GNU/Linux 9 (Stretch); Se você estiver usando sua própria imagem personalizada, forneça o nome da imagem 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 à porta. Como vamos instalar o Nginx em breve, ative 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 criará uma regra de firewall chamada allow-80 que tem uma lista padrão de blocos de endereços IP com permissão para estabelecer conexões de entrada (--source-ranges) definidas como 0.0.0.0/0 (em qualquer lugar).

Execute gcloud compute firewall-rules create --help para ver todos os padrões e todas as opções disponíveis, incluindo a capacidade de aplicar regras de firewall com base em tags.

5. Execute SSH na instância

Para executar o SSH na instância pela linha de comando (ainda no Cloud Shell), siga estas etapas:

$ gcloud compute ssh myinstance
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts.
...

yourusername@myinstance:~#

Pronto! é muito fácil. Na produção, digite uma senha longa:

Também é possível executar o SSH na instância diretamente no Console.console.cloud.google.com ), navegando atéGoogle Compute Engine >Instâncias de VM e clicar emSSH de dados.

bfbc03997a41946e.png

6. Instalar Nginx

Faça login na instância myinstance e instale o nginx:

$ sudo su -
# apt update
# apt install -y nginx
# service nginx start
# exit

Teste se o servidor está sendo executado 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>

Encontre suas instâncias pela IU da Web para encontrar o IP externo.

dcc4e56e82ba2603.png

Saia do SSH e execute este comando do 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 e você verá a página do nginx:

49b52b9354041f3b.png

7. Script de inicialização

Em vez de configurar a instância todas as vezes, você pode usar um script 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

Navegue até http://EXTERNAL_IP/ para ver a página inicial atualizada. Se a página não mostrar a tentativa imediatamente após alguns segundos, talvez o host ainda esteja iniciando o nginx.

8. Criar 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, é possível criar 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 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 criará duas outras 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 para segmentar o 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 pelo navegador http://IP_ADDRESS/, em que IP_ADDRESS é o endereço que aparece como resultado da execução do comando anterior.

Por enquanto, não criaremos um balanceador de carga HTTP.

10. Como limpar o cluster

Não se esqueça de desligar o cluster. Caso contrário, ele continuará em execução e acumulando custos. Os comandos a seguir excluem 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 solicita 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. É recomendável analisar alguns deles :

Google Kubernetes Engine

O Google Kubernetes Engine (GKE) é a oferta do Kubernetes hospedada e totalmente gerenciada do Google Cloud. Há vários codelabs disponíveis para ajudar você a começar com o GKE. Veja um bom exemplo para começar :

Envie um feedback

  • Reserve um momento para completar nossa pesquisa curta