
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
Provision infrastructure
/ 50
Upload files to the bucket
/ 50
Este laboratório foi desenvolvido com nossa parceira, a Hashicorp. Suas informações pessoais podem ser compartilhadas com a Hashicorp, patrocinadora do laboratório, caso você tenha aceitado receber atualizações de produtos, anúncios e ofertas em seu perfil de conta.
Quando você gerencia sua infraestrutura com o Terraform, configurações cada vez mais complexas são criadas. Não há limite intrínseco para a complexidade de um único arquivo ou diretório de configuração do Terraform. Portanto, é possível continuar gravando e atualizando seus arquivos de configuração em um único diretório. Porém, se você faz isso, pode se deparar com um ou mais dos seguintes problemas:
Neste laboratório, vamos aprender como os módulos podem resolver esses problemas, a estrutura de um módulo do Terraform e as práticas recomendadas ao usar e criar módulos.
Os módulos podem ajudar a resolver os problemas listados acima de algumas formas, por exemplo:
Organizar configuração: os módulos facilitam a navegação, o entendimento e a atualização da configuração, mantendo juntas as partes da configuração relacionadas. Mesmo infraestruturas moderadamente complexas podem exigir centenas ou milhares de linhas de configuração para serem implementadas. Com os módulos, você pode organizar sua configuração em componentes lógicos.
Encapsular configuração: outro benefício de usar módulos é encapsular a configuração em componentes lógicos distintos. O encapsulamento pode ajudar a evitar consequências não intencionais, como uma alteração em uma parte de sua configuração causando acidentalmente alterações em outra infraestrutura, e a reduzir as chances de erros simples, como usar o mesmo nome para dois recursos diferentes.
Reutilizar configuração: escrever toda sua configuração sem usar códigos existentes pode ser demorado e propenso a erros. Com o uso de módulos, é possível poupar tempo e reduzir erros caros ao reutilizar uma configuração escrita por você, por outros membros da sua equipe ou por profissionais do Terraform que tenham publicado módulos para uso. Você também pode compartilhar módulos que tiver criado com sua equipe ou com o público em geral, para que possam aproveitar seu trabalho.
Fornecer consistência e garantir as práticas recomendadas: os módulos também ajudam a fornecer consistência nas suas configurações. A consistência facilita o entendimento de configurações complexas e ajuda a garantir que as práticas recomendadas sejam aplicadas em toda sua configuração. Por exemplo, os provedores de nuvem oferecem muitas opções para configurar serviços de armazenamento de objetos, como Amazon S3 (Simple Storage Service) ou buckets do Cloud Storage do Google. Muitos incidentes graves de segurança envolvem o armazenamento de objetos com proteção incorreta e, devido à quantidade de opções de configuração complexas envolvidas, é comum configurar esses serviços de maneira incorreta por acidente.
Usar módulos pode ajudar a reduzir esses erros. Por exemplo, você pode criar um módulo para descrever como todos os buckets de sites públicos da sua organização são configurados, e outro módulo para buckets privados usados para aplicativos de geração de registros. Além disso, se uma configuração para um tipo de recurso precisar ser atualizada, o uso de módulos possibilita que você faça essa atualização em apenas um local e depois a aplique a todos os casos em que o módulo seja usado.
Neste laboratório, você vai aprender a fazer o seguinte:
Leia estas instruções. Os laboratórios são cronometrados e não podem ser pausados. O timer é iniciado quando você clica em Começar o laboratório e mostra por quanto tempo os recursos do Google Cloud vão ficar disponíveis.
Este laboratório prático permite que você realize as atividades em um ambiente real de nuvem, não em uma simulação ou demonstração. Você vai receber novas credenciais temporárias para fazer login e acessar o Google Cloud durante o laboratório.
Confira os requisitos para concluir o laboratório:
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:
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.
Se necessário, copie o Nome de usuário abaixo e cole na caixa de diálogo Fazer login.
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.
Você também encontra a Senha no painel Detalhes do laboratório.
Clique em Seguinte.
Acesse as próximas páginas:
Depois de alguns instantes, o console do Google Cloud será aberto nesta guia.
O Cloud Shell é uma máquina virtual com várias ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud. O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.
Depois de se conectar, vai notar que sua conta já está autenticada, e que o projeto está configurado com seu PROJECT_ID. A saída contém uma linha que declara o projeto PROJECT_ID para esta sessão:
gcloud
é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.
Clique em Autorizar.
A saída será parecida com esta:
Saída:
Saída:
Exemplo de saída:
gcloud
, acesse o guia com informações gerais sobre a gcloud CLI no Google Cloud.
Um módulo do Terraform é um conjunto de arquivos de configuração do Terraform em um único diretório. Mesmo uma configuração simples, que consiste em um único diretório com um ou mais arquivos .tf
, corresponde a um módulo. Quando você executa comandos do Terraform diretamente de um diretório desses, ele é considerado o módulo raiz. Nesse sentido, toda configuração do Terraform é parte de um módulo. É possível ter um conjunto simples de arquivos de configuração do Terraform, como esse:
Nesse caso, quando você executa comandos do Terraform de dentro do diretório minimal-module
, o conteúdo dele é considerado o módulo raiz.
Os comandos do Terraform só usam diretamente os arquivos de configuração em um diretório, que geralmente é o diretório de trabalho atual. No entanto, sua configuração pode usar blocos de módulo para chamar módulos em outros diretórios. Quando o Terraform encontra um bloco de módulo, ele carrega e processa os arquivos de configuração daquele módulo.
Um módulo que é chamado por outra configuração às vezes é chamado de "módulo filho" dessa configuração.
Os módulos podem ser carregados do sistema de arquivos local ou de uma fonte remota. O Terraform oferece suporte a diversas fontes remotas, incluindo o Terraform Registry, a maioria dos sistemas de controle de versões, URLs HTTP e registros de módulo privado do Terraform Cloud ou do Terraform Enterprise.
De muitas maneiras, os módulos do Terraform se assemelham aos conceitos de bibliotecas, pacotes ou módulos presentes na maioria das linguagens de programação e oferecem muitos benefícios semelhantes. Assim como quase qualquer programa de computador não trivial, as configurações reais do Terraform geralmente precisam usar módulos para fornecer os benefícios mencionados acima.
Recomenda-se que todos os usuários do Terraform usem módulos seguindo estas práticas recomendadas:
Crie sua configuração com um plano para os módulos. Mesmo para configurações levemente complexas do Terraform gerenciadas por apenas uma pessoa, os benefícios do uso de módulos compensam o tempo necessário para usá-los corretamente.
Use módulos locais para organizar e encapsular seu código. Mesmo que você não esteja usando ou publicando módulos remotos, organizar sua configuração em termos de módulos desde o início vai reduzir significativamente o trabalho de manutenção e atualização da sua configuração à medida que sua infraestrutura ficar mais complexa.
Encontre módulos úteis no Terraform Registry público. Assim é possível implementar sua configuração com rapidez e confiança, contando com o trabalho de outras pessoas.
Publique e compartilhe módulos com sua equipe. A maior parte das infraestruturas é gerenciada por uma equipe de pessoas, e os módulos são uma ferramenta importante que as equipes podem usar para criar e manter infraestruturas. Como já mencionado, você pode publicar módulos de maneira pública ou privada. Vamos examinar como fazer isso em um laboratório mais adiante.
Nesta seção, vamos usar módulos do Terraform Registry para provisionar um ambiente de exemplo no Google Cloud. Os conceitos usados aqui podem ser aplicados a qualquer módulo, de qualquer fonte.
A página inclui informações sobre o módulo e um link para o repositório de origem. O lado direito da página inclui uma interface suspensa para selecionar a versão do módulo e instruções de uso do módulo a fim de provisionar a infraestrutura.
Quando você chama um módulo, o argumento source
é exigido. Neste exemplo, o Terraform procura um módulo no Terraform Registry que corresponda à string fornecida. Também é possível usar um URL ou caminho de arquivo local para a origem dos seus módulos. Confira a documentação do Terraform para uma lista de possíveis fontes de módulo.
O outro argumento mostrado aqui é version
. Para fontes com suporte, o argumento version permite que você defina quais versões do módulo serão carregadas. Neste laboratório, você vai especificar um número exato de versão para os módulos que usar. Descubra mais maneiras de especificar versões na documentação do módulo.
Outros argumentos para blocos de módulos são tratados como variáveis de entrada para os módulos.
v6.0.1
.Isso garante que você use o número de versão correto.
Na barra de ferramentas do Cloud Shell, clique em Abrir editor. Para alternar o Cloud Shell e o editor de código, clique em Abrir editor ou Abrir terminal conforme necessário ou em Abrir em uma nova janela para deixar o Editor aberto em uma guia separada.
No editor, navegue até terraform-google-network/examples/simple_project
, e abra o arquivo main.tf
. Sua configuração do main.tf
vai ficar assim:
Essa configuração inclui um bloco importante:
module "test-vpc-module"
define uma nuvem privada virtual (VPC) que vai fornecer serviços de rede para o restante da sua infraestrutura.Algumas variáveis de entrada são exigidas, ou seja, o módulo não fornece um valor padrão. Um valor explícito deve ser fornecido para que o Terraform seja executado corretamente.
No bloco "test-vpc-module"
do módulo, revise as variáveis de entrada que está configurando. Cada uma dessas variáveis de entrada está documentada no Terraform Registry. As entradas necessárias para este módulo são:
network_name
: nome da rede que está sendo criadaproject_id
: ID do projeto em que essa VPC vai ser criadasubnets
: lista de sub-redes que está sendo criadaVocê vai precisar passar as variáveis de entrada para a configuração do módulo para usar a maioria dos módulos. A configuração que chama um módulo é responsável por definir seus valores de entrada, que são passados como argumentos para o bloco do módulo. Além de source
e version
, a maioria dos argumentos de um bloco de módulo define valores de variáveis.
Na página do Terraform Registry para o módulo de rede do Google Cloud, uma guia "Entradas" descreve todas as variáveis de entrada que têm suporte do módulo.
Usar variáveis de entrada com módulos é muito semelhante a usar variáveis em qualquer configuração do Terraform. Um padrão comum é identificar quais variáveis de entrada do módulo você pode vir a alterar no futuro e, em seguida, criar variáveis correspondentes no arquivo variables.tf
da sua configuração com valores padrão sensíveis. Essas variáveis podem então ser transmitidas para o bloco do módulo como argumentos.
No Editor, ainda no mesmo diretório, navegue até variables.tf
.
Preencha a variável project_id
com a saída do comando anterior. Você precisa respeitar o formato seguinte e configurar o valor default
para a variável:
variables.tf
, adicione a variável network_name
. É possível usar o nome example-vpc
ou qualquer outro que você quiser. Você precisa respeitar o formato seguinte e configurar o valor default
para a variável:main.tf
, atualize o parâmetro network_name
para usar a variável que você acabou de definir. Para isso, configure o valor como var.network_name
.main.tf
, atualize as regiões da sub-rede nas linhas 35, 40 e 47 de us-west1
para Módulos também têm valores de saída, que são definidos dentro do módulo, com a palavra-chave output
. Você pode acessá-los referindo-se a module.<MODULE NAME>.<OUTPUT NAME>
. Assim como as variáveis de entrada, as saídas de módulo são listadas na guia outputs
no Terraform Registry.
As saídas do módulo geralmente são passadas para outras partes da sua configuração ou definidas como saídas no seu módulo raiz. Vamos examinar os dois usos neste laboratório.
outputs.tf
dentro do seu diretório de configurações. Verifique se o arquivo contém o seguinte:simple_project
:Ótimo. Você acabou de usar seu primeiro módulo. A saída da sua configuração deve ter a seguinte aparência:
Ao usar um novo módulo pela primeira vez, você precisa executar o terraform init
ou o terraform get
para instalá-lo. Quando um desses comandos é executado, o Terraform instala todos os novos módulos no diretório .terraform/modules
dentro do diretório de trabalho da sua configuração. Para módulos locais, o Terraform cria um link simbólico para o diretório do módulo. Por isso, todas as alterações dos módulos locais entram em vigor imediatamente, sem que você precise executar o terraform get
novamente.
Aprendemos como usar módulos do Terraform Registry, como configurar esses módulos com variáveis de entrada e como extrair valores de saída desses módulos.
Responda sim
ao prompt.
O Terraform vai destruir a infraestrutura que você criou.
Após ter destruído os recursos, exclua a pasta terraform-google-network
.
Clique em Verificar meu progresso para conferir o objetivo.
Na última tarefa, você usou um módulo do Terraform Registry para criar uma rede VPC no Google Cloud. Embora o uso correto dos módulos existentes do Terraform seja uma habilidade importante, o aprendizado de como criar módulos também pode beneficiar qualquer usuário do Terraform. Recomendamos que você crie todas as configurações do Terraform supondo que elas possam ser usadas como um módulo, porque isso ajuda a projetar suas configurações para que sejam flexíveis, reutilizáveis e combináveis.
Como você já deve saber, o Terraform trata toda configuração como um módulo. Quando você executa comandos terraform
ou usa o Terraform Cloud ou o Terraform Enterprise para acessar remotamente o Terraform, o diretório de destino que contém a configuração dele é tratado como o módulo raiz.
Nessa tarefa, você cria um módulo para gerenciar os buckets do Compute Storage usados para hospedar sites estáticos.
O Terraform trata qualquer diretório local referenciado no argumento source
de um bloco de module
como um módulo. Uma estrutura de arquivo comum para um novo módulo é:
.tf
ou usar qualquer outra estrutura de arquivos que quiser.
Cada um desses arquivos serve a um propósito:
LICENSE
contém a licença sob a qual seu módulo será distribuído. Quando você compartilha seu módulo, o arquivo LICENÇA permite que as pessoas que o utilizam entendam os termos sob os quais ele foi disponibilizado. O Terraform não usa esse arquivo.README.md
contém documentação em formato markdown que descreve como usar o módulo. O Terraform não usa esse arquivo, mas serviços como o Terraform Registry e o GitHub exibem o conteúdo desse arquivo para os visitantes do Terraform Registry ou da página do GitHub do seu módulo.main.tf
contém o conjunto principal de configurações do seu módulo. Também é possível criar outros arquivos de configuração e organizá-los de modo a fazerem sentido no seu projeto.variables.tf
contém as definições de variáveis do seu módulo. Quando seu módulo é usado por outras pessoas, as variáveis são configuradas como argumentos no bloco do módulo. Como todos os valores do Terraform devem ser definidos, as variáveis que não têm um valor padrão se tornarão argumentos obrigatórios. Uma variável com um valor padrão também pode ser fornecida como um argumento de módulo, sobrepondo assim o valor padrão.outputs.tf
contém as definições de saída do seu módulo. As saídas do módulo são disponibilizadas à configuração usando o módulo e, portanto, são frequentemente usadas para transmitir informações sobre as partes da sua infraestrutura definidas pelo módulo para outras partes da sua configuração.Tenha cuidado com esses arquivos e não os distribua como parte do seu módulo:
terraform.tfstate
e terraform.tfstate.backup
contêm seu estado do Terraform e são a forma como o Terraform acompanha o relacionamento entre sua configuração e a infraestrutura por ela provisionada..terraform
contém os módulos e plug-ins usados para provisionar sua infraestrutura. Esses arquivos são específicos de uma instância individual do Terraform no provisionamento da infraestrutura, e não a configuração da infraestrutura definida nos arquivos .tf
.*.tfvars
não precisam ser distribuídos com seu módulo a menos que você também o esteja usando como uma configuração independente do Terraform, porque as variáveis de entrada do módulo são definidas por meio de argumentos para o bloco do módulo na sua configuração.Navegue até seu diretório inicial e crie seu módulo raiz construindo um novo arquivo de configuração main.tf
. Depois crie um diretório chamado modules que contém outra pasta chamada gcs-static-website-bucket
. Você vai trabalhar com três arquivos de configuração do Terraform no diretório gcs-static-website-bucket
: website.tf
, variables.tf
e outputs.tf
.
gcs-static-website-bucket
, execute o comando a seguir para criar um arquivo chamado README.md
com o seguinte conteúdo:LICENSE
com o seguinte conteúdo:Sua estrutura de diretórios do módulo atual deve estar assim:
website.tf
dentro do diretório modules/gcs-static-website-bucket
:A documentação do provedor é GitHub.
variables.tf
do seu módulo e adicione o seguinte código:outputs.tf
que fica dentro dele:Assim como as variáveis, as saídas nos módulos executam a mesma função que no módulo raiz, mas são acessadas de modo diferente. As saídas de um módulo podem ser acessadas como atributos somente leitura nos objetos do módulo, disponibilizado na configuração que o chama.
main.tf
no seu diretório raiz e adicione uma referência ao novo módulo:outputs.tf
para seu módulo raiz.outputs.tf
:variables.tf
:variables.tf
. Defina as variáveis project_id
e name
como o padrão para o ID do projeto: Sempre que você adiciona um novo módulo para uma configuração, o Terraform precisa instalar o módulo antes que ele possa ser usado. Tanto o comando terraform get
quanto o comando terraform init
instalam e atualizam os módulos. O comando terraform init
também inicializa back-ends e instala plug-ins.
Você configurou e usou seu próprio módulo para criar um site estático. Não esqueça de acessá-lo. No momento não há nada dentro do seu bucket, por isso não aparece nada no site. Para poder ver conteúdos, você precisa fazer upload de objetos no seu bucket. Você pode fazer upload do conteúdo do diretório www
no repositório do GitHub.
YOUR-BUCKET-NAME
pelo nome do seu bucket de armazenamento:https://storage.cloud.google.com/YOUR-BUCKET-NAME/index.html
, substituindo YOUR-BUCKET-NAME
pelo nome do seu bucket de armazenamento.Uma página da Web em HTML básico vai aparecer com o texto Nothing to see here.
Clique em Verificar meu progresso para conferir o objetivo.
Por fim, limpe seu projeto, destruindo a infraestrutura que acabou de criar.
Depois de responder sim
ao prompt, o Terraform vai destruir todos os recursos que você criou seguindo este laboratório.
Neste laboratório, você aprendeu os fundamentos dos módulos do Terraform e como usar um módulo pré-existente do Registry. Depois você elaborou seu próprio módulo para criar um site estático hospedado em um bucket do Cloud Storage. Ao fazer isso, você definiu entradas, saídas e variáveis para seus arquivos de configuração e aprendeu as práticas recomendadas para a criação de módulos.
Os links abaixo oferecem oportunidades de praticar com o Terraform:
Esses treinamentos ajudam você a aproveitar as tecnologias do Google Cloud ao máximo. Nossas aulas incluem habilidades técnicas e práticas recomendadas para ajudar você a alcançar rapidamente o nível esperado e continuar sua jornada de aprendizado. Oferecemos treinamentos que vão do nível básico ao avançado, com opções de aulas virtuais, sob demanda e por meio de transmissões ao vivo para que você possa encaixá-las na correria do seu dia a dia. As certificações validam sua experiência e comprovam suas habilidades com as tecnologias do Google Cloud.
Manual atualizado em 26 de janeiro de 2024
Laboratório testado em 11 de dezembro de 2023
Copyright 2025 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.