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.
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
- 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.
- 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.
- 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).
- 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. 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, comon1-highmem-4
oun1-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.
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.
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:
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 :
- VMs preemptivas: https://cloud.google.com/compute/docs/instances/create-start- preemptivo-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
- Recursos de rotulagem: 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 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 :
- 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