Visão geral
O Terraform permite criar, alterar e melhorar a infraestrutura de maneira segura e previsível. Ele é uma ferramenta de código aberto que codifica as APIs em arquivos de configuração declarativos para que sejam compartilhados entre a equipe, tratados como código, editados, revisados e organizados em versões.
Neste laboratório, você vai criar uma configuração do Terraform com um módulo para automatizar a implantação da infraestrutura do Google Cloud. Você vai implantar uma rede no modo automático com uma regra de firewall e duas instâncias de VM, como mostrado neste diagrama:

Objetivos
Neste laboratório, você aprenderá a fazer o seguinte:
- Criar uma configuração para uma rede no modo automático
- Criar uma configuração para uma regra de firewall
- Criar um módulo para as instâncias de VM
- Criar e implantar uma configuração
- Verificar a implantação de uma configuração
Instalação
Para cada laboratório, você recebe um novo projeto do Google Cloud e um conjunto de recursos por um determinado período sem custo financeiro.
-
Clique no botão Começar o laboratório. Se for preciso pagar, você verá um pop-up para selecionar a forma de pagamento.
No painel Detalhes do laboratório à esquerda, você vai encontrar o seguinte:
- O botão Abrir console do Google Cloud
- O tempo restante
- As credenciais temporárias que você vai usar neste laboratório
- Outras informações, se forem necessárias
-
Se você estiver usando o navegador Chrome, clique em Abrir console do Google Cloud ou clique com o botão direito do mouse e selecione Abrir link em uma janela anônima.
O laboratório ativa os recursos e depois abre a página Fazer login em outra guia.
Dica: coloque as guias em janelas separadas lado a lado.
Observação: se aparecer a caixa de diálogo Escolher uma conta, clique em Usar outra conta.
-
Se necessário, copie o Nome de usuário abaixo e cole na caixa de diálogo Fazer login.
{{{user_0.username | "Nome de usuário"}}}
Você também encontra o Nome de usuário no painel Detalhes do laboratório.
-
Clique em Seguinte.
-
Copie a Senha abaixo e cole na caixa de diálogo de boas-vindas.
{{{user_0.password | "Senha"}}}
Você também encontra a Senha no painel Detalhes do laboratório.
-
Clique em Seguinte.
Importante: você precisa usar as credenciais fornecidas no laboratório, e não as da sua conta do Google Cloud.
Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais.
-
Acesse as próximas páginas:
- Aceite os Termos e Condições.
- Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
- Não se inscreva em testes gratuitos.
Depois de alguns instantes, o console do Google Cloud será aberto nesta guia.
Observação: para acessar uma lista de produtos e serviços do Google Cloud, clique no Menu de navegação no canto superior esquerdo ou digite o nome do serviço ou produto no campo Pesquisar.
Tarefa 1: configurar o Terraform e o Cloud Shell
Nesta tarefa, você vai configurar o ambiente do Cloud Shell para usar o Terraform.
Instale o Terraform
O Terraform agora está integrado ao Cloud Shell. Verifique qual versão está instalada.
- No console do Google Cloud, clique em Ativar o Cloud Shell (
).
- Se for solicitado, clique em Continuar.
- Para confirmar se o Terraform está instalado, execute o seguinte comando:
terraform --version
O resultado será semelhante a este:
Terraform v1.5.7
Observação: não se preocupe se você receber um aviso informando que a versão do Terraform está desatualizada, porque as instruções do laboratório funcionarão com o Terraform v1.5.7 e versões posteriores. Os downloads da versão mais recente do Terraform estão disponíveis no site do Terraform (em inglês). O Terraform é distribuído como um pacote binário para todas as plataformas e arquiteturas compatíveis, e o Cloud Shell usa o Linux de 64 bits.
- Para criar um diretório para sua configuração do Terraform, execute o seguinte comando:
mkdir tfinfra
- No Cloud Shell, clique em Abrir editor (
).
Observação: se você receber a mensagem "Não foi possível carregar o editor de código porque os cookies de terceiros estão desativados", clique em Abrir em uma nova janela. O editor de código será aberto em uma nova guia. Retorne à guia original, clique em Abrir terminal e volte para a guia do editor de código. Será necessário retornar ao terminal do Cloud Shell periodicamente neste laboratório.
- No painel esquerdo do editor de código, expanda a pasta tfinfra.
Inicialize o Terraform
O Terraform usa uma arquitetura baseada em plug-ins compatível com a maioria dos provedores de infraestrutura e serviço disponíveis. Cada "provedor" é um binário encapsulado distribuído separadamente do Terraform. Inicialize o Terraform definindo o Google como provedor.
- Para criar um novo arquivo dentro de tfinfra,
clique com o botão direito do mouse na pasta tfinfra e depois em New File.
- Nomeie o arquivo como provider.tf e abra-o.
- Copie o código no arquivo
provider.tf:
provider "google" {}
-
Para salvar o arquivo provider.tf, clique em File > Save.
-
Para inicializar o Terraform, execute o seguinte comando:
cd tfinfra
terraform init
Agora está tudo pronto para trabalhar com o Terraform no Cloud Shell.
Tarefa 2: criar mynetwork e os recursos relacionados
Nesta tarefa, você vai criar a rede no modo automático mynetwork com a regra de firewall e duas instâncias de VM (mynet_vm_1 e mynet_vm_2).
Configure o mynetwork
Crie uma nova configuração e defina mynetwork.
- Para criar um novo arquivo dentro de tfinfra,
clique com o botão direito do mouse na pasta tfinfra e depois em New File.
- Nomeie o arquivo como mynetwork.tf e abra-o.
- Copie o seguinte código base no arquivo
mynetwork.tf:
# Criar a rede mynetwork
resource [RESOURCE_TYPE] "mynetwork" {
name = [RESOURCE_NAME]
# As propriedades do RECURSO vão aqui
}
Esse modelo base é um ótimo ponto de partida para qualquer recurso do Google Cloud. No campo nome, você pode dar um nome ao recurso e, no campo tipo, pode especificar o recurso do Google Cloud que quer criar. Você também pode definir propriedades, que são opcionais para alguns recursos.
- No arquivo
mynetwork.tf, substitua [RESOURCE_TYPE] por "google_compute_network" (com as aspas).
Observação: o recurso google_compute_network é uma rede VPC. Os recursos disponíveis estão na documentação do provedor do Google Cloud. Saiba mais sobre esse recurso específico na documentação do Terraform (links em inglês).
- No arquivo
mynetwork.tf, substitua [RESOURCE_NAME] por "mynetwork" (com as aspas).
- Adicione a seguinte propriedade ao arquivo
mynetwork.tf:
auto_create_subnetworks = "true"
Por definição, uma rede no modo automático cria uma sub-rede em cada região. Portanto, você está definindo auto_create_subnetworks como true.
- Verifique se o arquivo mynetwork.tf está semelhante a este:
# Criar a rede mynetwork
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# As propriedades do RECURSO vão aqui
auto_create_subnetworks = "true"
}
- Para salvar o arquivo
mynetwork.tf, clique em File > Save.
Configure a regra de firewall
Defina uma regra de firewall que permita o tráfego HTTP, SSH, RDP e ICMP em mynetwork.
- Adicione o seguinte código base ao arquivo
mynetwork.tf:
# Adicionar uma regra de firewall para permitir tráfego HTTP, SSH, RDP e ICMP em mynetwork
resource [RESOURCE_TYPE] "mynetwork-allow-http-ssh-rdp-icmp" {
name = [RESOURCE_NAME]
# As propriedades do RECURSO vão aqui
}
- No arquivo
mynetwork.tf, substitua [RESOURCE_TYPE] por "google_compute_firewall" (com as aspas).
Observação: o recurso google_compute_firewall é uma regra de firewall. Saiba mais sobre esse recurso específico na documentação do Terraform (em inglês).
- No arquivo
mynetwork.tf, substitua [RESOURCE_NAME] por "mynetwork-allow-http-ssh-rdp-icmp" (com as aspas).
- Adicione a seguinte propriedade ao arquivo
mynetwork.tf:
network = google_compute_network.mynetwork.self_link
Observação: como essa regra de firewall depende da rede, você está usando a referência google_compute_network.mynetwork.self_link para instruir o Terraform a resolver esses recursos em uma ordem dependente. Nesse caso, a rede é criada antes da regra de firewall.
- Adicione as seguintes propriedades ao arquivo
mynetwork.tf:
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
A lista de regras allow especifica quais protocolos e portas são permitidos.
- Verifique se o arquivo
mynetwork.tf está semelhante a este:
# Criar a rede mynetwork
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# As propriedades do RECURSO vão aqui
auto_create_subnetworks = "true"
}
# Adicionar uma regra de firewall para permitir tráfego HTTP, SSH, RDP e ICMP em mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# As propriedades do RECURSO vão aqui
network = google_compute_network.mynetwork.self_link
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
- Para salvar o arquivo mynetwork.tf, clique em File > Save.
Configure a instância de VM
Defina as instâncias de VM criando um módulo de instância de VM. Um módulo é uma configuração reutilizável dentro de uma pasta. Você usará esse módulo para as duas instâncias de VM deste laboratório.
- Para criar uma nova pasta dentro de tfinfra, selecione a pasta tfinfra e clique em File > New Folder.
- Nomeie a nova pasta como instance.
- Para criar um novo arquivo dentro de instance,
clique com o botão direito na pasta instance e depois em New File.
- Nomeie o novo arquivo como main.tf e abra-o.
Você terá a seguinte estrutura de pastas no Cloud Shell:

- Copie o seguinte código base para o arquivo main.tf:
resource [RESOURCE_TYPE] "vm_instance" {
name = [RESOURCE_NAME]
# As propriedades do RECURSO vão aqui
}
- No arquivo
main.tf, substitua [RESOURCE_TYPE] por "google_compute_instance" (com as aspas).
Observação: o recurso google_compute_instance é uma instância do Compute Engine. Saiba mais sobre esse recurso específico na documentação do Terraform (em inglês).
- No arquivo
main.tf, substitua [RESOURCE_NAME] por "${var.instance_name}" (com as aspas).
Você usará este módulo para as duas instâncias de VM, portanto, definirá o nome da instância como uma variável de entrada. Dessa forma, você vai controlar o nome da variável no arquivo mynetwork.tf. Saiba mais sobre variáveis de entrada no guia do Terraform sobre esse tema (em inglês).
- Adicione estas propriedades ao arquivo
main.tf:
zone = "${var.instance_zone}"
machine_type = "${var.instance_type}"
Essas propriedades definem a zona e o tipo de máquina da instância como variáveis de entrada.
- Adicione estas propriedades ao arquivo
main.tf:
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
Essa propriedade define o disco de inicialização para usar a imagem do SO Debian 11. Como as duas instâncias de VM usarão a mesma imagem, é possível codificar essa propriedade no módulo.
- Adicione estas propriedades ao arquivo
main.tf:
network_interface {
network = "${var.instance_network}"
access_config {
# Alocar um IP NAT um para um à instância
}
}
Essa propriedade define a interface de rede ao fornecer o nome da rede como uma variável de entrada e a configuração de acesso. Deixar a configuração de acesso vazia gera um endereço IP externo temporário (obrigatório neste laboratório). Para criar instâncias com apenas um endereço IP interno, remova a seção access_config. Para mais informações, consulte a documentação do Terraform (em inglês).
- Verifique se a aparência do arquivo
main.tf é semelhante a esta, incluindo as chaves {}
resource "google_compute_instance" "vm_instance" {
name = "${var.instance_name}"
zone = "${var.instance_zone}"
machine_type = "${var.instance_type}"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = "${var.instance_network}"
access_config {
# Alocar um IP NAT um para um à instância
}
}
}
- Para salvar o arquivo main.tf, clique em File > Save.
- Para criar um novo arquivo dentro de instance,
clique com o botão direito na pasta instance e depois em New File.
- Nomeie o novo arquivo como variables.tf e abra-o.
- Defina as quatro variáveis de entrada em
variables.tf.
variable "instance_name" {}
variable "instance_zone" {}
variable "instance_type" {
default = "e2-micro"
}
variable "instance_network" {}
Quando você atribui um valor padrão à variável instance_type, ela passa a ser opcional. As variáveis instance_name, instance_zone e instance_network são obrigatórias, e você as definirá no arquivo mynetwork.tf.
- Para salvar o arquivo variables.tf, clique em File > Save.
- Adicione estas instâncias de VM ao arquivo
mynetwork.tf:
# Create the mynet-vm-1 instance
module "mynet-vm-1" {
source = "./instance"
instance_name = "mynet-vm-1"
instance_zone = "{{{project_0.default_zone|Zone}}}"
instance_network = google_compute_network.mynetwork.self_link
}
# Create the mynet-vm-2" instance
module "mynet-vm-2" {
source = "./instance"
instance_name = "mynet-vm-2"
instance_zone = "{{{project_0.default_zone_2|Zone 2}}}"
instance_network = google_compute_network.mynetwork.self_link
}
Esses recursos estão utilizando o módulo na pasta instance e fornecem o nome, a zona e a rede como entradas. As instâncias dependem de uma rede VPC, então você está usando a referência google_compute_network.mynetwork.self_link para instruir o Terraform a resolver esses recursos por ordem de dependência. Nesse caso, a rede é criada antes da instância.
Observação: quando você cria um módulo do Terraform, ele pode ser reutilizado em várias configurações. Em vez de criar seu próprio módulo, também é possível usar os módulos atuais no registro do módulo Terraform (em inglês).
-
Para salvar o arquivo mynetwork.tf, clique em File > Save.
-
Verifique se o arquivo mynetwork.tf é semelhante a isso, incluindo as chaves {}
# Create the mynetwork network
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# RESOURCE properties go here
auto_create_subnetworks = "true"
}
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# RESOURCE properties go here
network = google_compute_network.mynetwork.self_link
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
# Create the mynet-vm-1 instance
module "mynet-vm-1" {
source = "./instance"
instance_name = "mynet-vm-1"
instance_zone = "{{{project_0.default_zone|Zone}}}"
instance_network = google_compute_network.mynetwork.self_link
}
# Create the mynet-vm-2" instance
module "mynet-vm-2" {
source = "./instance"
instance_name = "mynet-vm-2"
instance_zone = "{{{project_0.default_zone_2|Zone 2}}}"
instance_network = google_compute_network.mynetwork.self_link
}
Crie mynetwork e os recursos relacionados
É hora de aplicar a configuração de mynetwork.
- Para reescrever os arquivos de configuração do Terraform em formato e estilo canônicos, execute o seguinte comando:
terraform fmt
O resultado será semelhante a este:
mynetwork.tf
Observação: se ocorrer um erro, revise as etapas anteriores para verificar se sua configuração corresponde às instruções do laboratório. Se você não conseguir resolver o problema da configuração, faça o download e confira estas configurações concluídas:
- Para inicializar o Terraform, execute o seguinte comando:
terraform init
O resultado será semelhante a este:
Initializing modules...
- mynet-vm-2 in instance
- mynet-vm-2 in instance
...
O Terraform foi inicializado com sucesso.
Observação: se ocorrer um erro, revise as etapas anteriores para verificar se a estrutura de pastas/arquivos está correta. Se você não conseguir resolver o problema de configuração, consulte as configurações concluídas acima. Depois que você corrigir o problema, execute novamente o comando anterior.
- Para criar um plano de execução, execute o seguinte comando:
terraform plan
O resultado será semelhante a este:
...
Plan: 4 to add, 0 to change, 0 to destroy.
...
O Terraform determinou que os quatro recursos a seguir precisam ser adicionados:
| Nome |
Descrição |
| mynetwork |
Rede VPC |
| mynetwork-allow-http-ssh-rdp-icmp |
Regra de firewall para permitir HTTP, SSH, RDP e ICMP |
| mynet-vm-2 |
Instância de VM em
|
| mynet-vm-2 |
Instância de VM em
|
- Para aplicar as alterações desejadas, execute o seguinte comando:
terraform apply
- Para confirmar as ações planejadas, digite:
yes
O resultado será semelhante a este:
...
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
Clique em Verificar meu progresso para ver o objetivo.
Criar mynetwork e os recursos relacionados
Observação: se ocorrer um erro durante a execução, revise as etapas anteriores para verificar se a estrutura de pastas/arquivos está correta. Se não conseguir resolver o problema de configuração, consulte as configurações concluídas acima. Depois que você corrigir o problema, execute novamente o comando anterior.
Tarefa 3: verificar a implantação
Verifique se os recursos foram criados no console do Google Cloud.
Verifique sua rede no console do Cloud
- No console do Cloud, acesse o Menu de navegação (
) e clique em Rede VPC > Redes VPC.
- Consulte a rede VPC mynetwork com uma sub-rede em cada região.
- No Menu de navegação, clique em Rede VPC > Firewall.
- Classifique as regras de firewall por Rede.
- Veja a regra de firewall mynetwork-allow-http-ssh-rdp-icmp para mynetwork.
Verifique suas instâncias de VM no console do Cloud
- No Menu de navegação (
), clique em Compute Engine > Instâncias de VM.
- Confira as instâncias mynet-vm-1 e mynet-vm-2.
- Anote o endereço IP interno da mynet-vm-2.
- Em mynet-vm-1, clique em SSH para iniciar um terminal e se conectar.
- Para testar a conectividade com o endereço IP interno de mynet-vm-2, execute o comando abaixo no terminal SSH (substituindo o endereço IP interno de mynet-vm-2 pelo valor que você anotou):
ping -c 3 <Enter mynet-vm-2's internal IP here>
Observação: isso deve funcionar porque as duas instâncias de VM estão na mesma rede e a regra de firewall permite o tráfego ICMP.
Tarefa 4: revise
Neste laboratório, você criou uma configuração do Terraform com um módulo para automatizar a implantação da infraestrutura do Google Cloud. À medida que a configuração muda, o Terraform pode criar planos de execução adicionais para você implementar na sua configuração geral passo a passo.
O módulo de instância permitiu que você reutilizasse a mesma configuração para vários recursos, fornecendo propriedades como variáveis de entrada. Você pode usar a configuração e o módulo criados como ponto de partida para futuras implantações.
Finalize o laboratório
Clique em Terminar o laboratório após a conclusão. O Google Cloud Ensina remove os recursos usados e limpa a conta por você.
Você vai poder avaliar sua experiência no laboratório. Basta selecionar o número de estrelas, digitar um comentário e clicar em Enviar.
O número de estrelas indica o seguinte:
- 1 estrela = muito insatisfeito
- 2 estrelas = insatisfeito
- 3 estrelas = neutro
- 4 estrelas = satisfeito
- 5 estrelas = muito satisfeito
Feche a caixa de diálogo se não quiser enviar feedback.
Para enviar seu feedback, fazer sugestões ou correções, use a guia Suporte.
Copyright 2020 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.