O autor selecionou o Fundo de Software Livre e de Código Aberto para receber uma doação como parte do programa Escreva por Doações.
Introdução
Quando várias pessoas estão trabalhando no mesmo projeto Terraform de diferentes locais simultaneamente, é importante lidar corretamente com o código de infraestrutura e o estado do projeto para evitar erros de sobregravação. A solução é armazenar o estado remotamente em vez de localmente. Um sistema remoto está disponível para todos os membros da sua equipe, e é possível que eles travem o estado enquanto estão trabalhando.
Um desses backends remotos é o pg
, que armazena o estado em um banco de dados PostgreSQL. Durante o curso deste tutorial, você o utilizará com um Banco de Dados Gerenciado da DigitalOcean para garantir a disponibilidade dos dados.
O Terraform também suporta a oferta oficial e gerenciada na nuvem pela Hashicorp chamada Terraform Cloud – um aplicativo proprietário que sincroniza o trabalho da sua equipe em um só lugar e oferece uma interface de usuário para configuração e gerenciamento.
Neste tutorial, você criará uma organização no Terraform Cloud à qual conectará seu projeto. Em seguida, você usará sua organização para configurar espaços de trabalho e recursos. Você armazenará seu estado na nuvem gerenciada para que esteja sempre disponível. Você também configurará o backend pg
com um banco de dados PostgreSQL gerenciado correspondente.
Pré-requisitos
- A DigitalOcean Personal Access Token, which you can create via the DigitalOcean Control Panel. You can find instructions in the DigitalOcean product documents, How to Create a Personal Access Token.
- O Terraform instalado em sua máquina local. Conclua o Passo 1 do tutorial Como Usar o Terraform com a DigitalOcean.
- Se você deseja usar um backend
pg
, precisará de um cluster de banco de dados PostgreSQL Gerenciado criado e acessível. Para mais informações, visite o guia de início rápido. Você pode usar um banco de dados separado para este tutorial. - Se você deseja usar a nuvem gerenciada da Hashicorp, precisará de uma conta no Terraform Cloud. Você pode criar uma na página de inscrição deles.
Observação: Testamos especificamente este tutorial usando o Terraform 1.1.3
.
Armazenando Estado em um Banco de Dados PostgreSQL Gerenciado
Nesta seção, você configurará um projeto que implanta um Droplet e armazena o estado em um banco de dados PostgreSQL gerenciado pela DigitalOcean usando o provedor pg
. Este provedor suporta bloqueio de estado, então o estado nunca será sobrescrito por duas ou mais alterações ocorrendo ao mesmo tempo.
Comece criando um diretório chamado terraform-team-pg
onde você irá armazenar o projeto:
Navegue até ele:
Primeiro, você definirá o provedor e depois passará a string de conexão para o banco de dados e o módulo digitalocean
. Crie e abra o arquivo provider.tf
para edição:
Adicione as seguintes linhas:
Aqui você requer o provedor digitalocean
e define o backend pg
, que aceita uma string de conexão. Em seguida, você define a variável do_token
e a passa para a instância do provedor digitalocean
.
Lembre-se de substituir sua_string_de_conexão_do_banco_de_dados
pela string de conexão para seu banco de dados gerenciado no seu Painel de Controle da DigitalOcean, que você pode encontrar pressionando Ações, selecionando Detalhes da Conexão, e escolhendo String de Conexão no menu suspenso. Em seguida, salve e feche o arquivo
Aviso: Para continuar, nas Configurações do seu banco de dados, certifique-se de ter o endereço IP da máquina da qual você está executando o Terraform em uma lista de permissões.
Inicialize o projeto executando:
A saída será semelhante ao seguinte:
OutputInitializing the backend...
Successfully configured the backend "pg"! Terraform will automatically
use this backend unless the backend configuration changes.
Initializing provider plugins...
- Finding digitalocean/digitalocean versions matching "~> 2.0"...
- Installing digitalocean/digitalocean v2.16.0...
- Installed digitalocean/digitalocean v2.16.0 (signed by a HashiCorp partner, key ID F82037E524B9C0E8)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
...
O Terraform inicializou com sucesso o backend, o que significa que ele se conectou ao banco de dados.
Em seguida, defina o Droplet em um arquivo chamado droplets.tf
. Crie e abra-o para edição executando:
Adicione as seguintes linhas:
Este código implantará um Droplet chamado web-1
na região fra1
, executando Ubuntu 20.04 com 1GB de RAM e um núcleo de CPU. Isso é tudo que você precisa definir, então salve e feche o arquivo.
Você precisará do seu token da DigitalOcean em uma variável de ambiente. Crie uma, substituindo seu_token_do_do
pelo seu token:
Para verificar se a conexão com o banco de dados está funcionando, tente planejar a configuração:
A saída será semelhante ao seguinte:
O Terraform não relatou erros e planejou as ações como de costume. Conectou-se com sucesso ao seu banco de dados PostgreSQL e armazenou seu estado. Agora, várias pessoas podem trabalhar simultaneamente neste projeto, mantendo-o sincronizado.
Armazenando o Estado no Terraform Cloud
Nesta etapa, você criará um projeto que implanta um Droplet e utiliza o Terraform Cloud como seu backend com o provedor cloud
. Isso envolve a criação da organização e espaço de trabalho no Terraform Cloud, escrevendo o código de infraestrutura e planejando-o.
Criando uma Organização
O Terraform Cloud permite que você tenha várias organizações, que abrigam seus espaços de trabalho e módulos. Organizações de planos pagos podem ter várias equipes com recursos de controle de nível de acesso, enquanto o plano gratuito que você usará fornece apenas uma equipe por organização. Você pode convidar membros da equipe para se juntarem à organização.
Comece acessando o Terraform Cloud e faça login. Se você ainda não criou uma organização, será solicitado a fazê-lo.
Insira um nome para a organização de sua escolha e lembre-se de que ele deve ser único entre todos os nomes no Terraform Cloud. Você receberá um erro se o nome já existir. O endereço de e-mail deve estar preenchido com o endereço da sua conta. Quando terminar, clique no botão Criar organização para continuar.
Em seguida, será solicitado que você selecione o tipo de espaço de trabalho.
Como você interagirá com o Terraform Cloud usando a linha de comando, clique na opção Fluxo de trabalho baseado em CLI. Em seguida, insira um nome para o seu espaço de trabalho e deixe a descrição vazia.
Insira um nome para o espaço de trabalho de sua escolha (vamos chamá-lo de sammy
), depois clique em Criar espaço de trabalho para finalizar o processo de criação da organização. Em seguida, você será direcionado para uma página de configurações de espaço de trabalho.
Agora você criou seu espaço de trabalho, que faz parte da sua organização. Como você acabou de criá-lo, seu espaço de trabalho não contém código de infraestrutura. Na parte central da interface, o Terraform Cloud fornece instruções iniciais para se conectar a este espaço de trabalho.
Antes de se conectar a ele, você precisará configurar a versão do Terraform que a nuvem usará para executar seus comandos. Para definir isso, clique no menu suspenso Configurações ao lado de Visão geral e selecione Geral na lista. Quando a página abrir, vá até o menu suspenso Versão do Terraform e selecione 1.1.3
(para este tutorial).
Em seguida, clique no botão Salvar configurações para salvar as alterações.
Para conectar seu projeto à sua organização e espaço de trabalho, você primeiro precisará fazer login usando a linha de comando. Antes de executar o comando, navegue até a página de tokens para criar um novo token de acesso para seu servidor, que fornecerá acesso à sua conta. Você receberá um prompt para criar um token de API.
A descrição padrão está bem, então clique em Criar token de API para criá-lo.
Clique no valor do token, ou no ícone após ele, para copiar o token da API. Você usará este token para conectar seu projeto à sua conta do Terraform Cloud.
Na linha de comando, execute o seguinte comando para fazer login:
Você receberá a seguinte saída:
OutputTerraform will request an API token for app.terraform.io using your browser.
If login is successful, Terraform will store the token in plain text in
the following file for use by subsequent commands:
/home/sammy/.terraform.d/credentials.tfrc.json
Do you want to proceed?
Only 'yes' will be accepted to confirm.
...
O Terraform está avisando que o token será armazenado localmente. Digite yes
quando ele solicitar:
Output---------------------------------------------------------------------------------
Open the following URL to access the tokens page for app.terraform.io:
https://app.terraform.io/app/settings/tokens?source=terraform-login
---------------------------------------------------------------------------------
Generate a token using your browser, and copy-paste it into this prompt.
Terraform will store the token in plain text in the following file
for use by subsequent commands:
/home/sammy/.terraform.d/credentials.tfrc.json
Token for app.terraform.io:
Enter a value:
Cole o token que você copiou e confirme com ENTER
. O Terraform mostrará uma mensagem de sucesso:
Output...
-
----- -
--------- --
--------- - -----
--------- ------ -------
------- --------- ----------
---- ---------- ----------
-- ---------- ----------
Welcome to Terraform Cloud! - ---------- -------
--- ----- ---
Documentation: terraform.io/docs/cloud -------- -
----------
----------
---------
-----
-
New to TFC? Follow these steps to instantly apply an example configuration:
$ git clone https://github.com/hashicorp/tfc-getting-started.git
$ cd tfc-getting-started
$ scripts/setup.sh
Você configurou sua instalação local do Terraform para acessar sua conta do Terraform Cloud. Agora você criará um projeto que implanta um Droplet e o configurará para usar o Terraform Cloud para armazenar seu estado.
Configurando o Projeto
Primeiro, crie um diretório chamado terraform-team-cloud
onde você irá armazenar o projeto:
Navegue até ele:
Para configurar seu projeto, você precisará:
- definir e configurar o provedor
cloud
, que se comunica com o Terraform Cloud. - requerer o provedor
digitalocean
para poder implantar recursos do DigitalOcean. - definir e inicializar variáveis que você usará.
Você irá armazenar as especificações de requisitos de provedor e módulo em um arquivo chamado provider.tf
. Crie e abra para edição executando:
Adicione as seguintes linhas:
Aqui, você primeiro especifica sua versão do Terraform. Em seguida, especifica o provedor digitalocean
como necessário e define o backend como cloud
. Para organization
e workspaces.name
, substitua os valores destacados pelos nomes que você especificou.
Em seguida, você define uma variável chamada do_token
, que você passa para o provedor digitalocean
criado após ele. Agora você configurou seu projeto para se conectar à sua organização, então salve e feche o arquivo.
Inicialize seu projeto com o seguinte comando:
A saída será semelhante a esta:
OutputInitializing Terraform Cloud...
Initializing provider plugins...
- Finding digitalocean/digitalocean versions matching "~> 2.0"...
- Installing digitalocean/digitalocean v2.18.0...
- Installed digitalocean/digitalocean v2.18.0 (signed by a HashiCorp partner, key ID F82037E524B9C0E8)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform Cloud has been successfully initialized!
...
Uma vez que a definição do Droplet é a mesma do projeto anterior, você pode copiá-la executando:
Finalmente, você irá definir os valores das variáveis. O provedor de nuvem não suporta a passagem de valores para variáveis através da linha de comando, então você terá que passá-los usando arquivos de variáveis ou configurá-los no Terraform Cloud. O Terraform lê os valores das variáveis de arquivos com um nome de arquivo terminando em .auto.tfvars
. Crie e abra um arquivo chamado vars.auto.tfvars
para edição, no qual você irá definir a variável do_token
:
Adicione a seguinte linha, substituindo seu_do_token
pelo seu token da API DigitalOcean:
Quando terminar, salve e feche o arquivo. O Terraform lerá automaticamente este arquivo ao planejar ações.
Seu projeto está agora completo e configurado para usar o Terraform Cloud como backend. Agora você irá planejar e aplicar o Droplet e revisar como isso se reflete no aplicativo Cloud.
Aplicando a Configuração
No Passo 1 deste tutorial, você planejou um projeto usando o comando terraform plan
. Uma vez que o projeto Terraform Cloud tem os mesmos recursos definidos, você pode pular o planejamento novamente e aplicá-lo diretamente no Terraform Cloud.
Você aplica o projeto executando o seguinte comando para atualizá-lo:
Você notará que a saída é diferente quando você usa local
como seu backend:
Ao usar o backend cloud
, o Terraform não está planejando ou aplicando a configuração da máquina local. Em vez disso, ele delega essas tarefas para o Terraform Cloud e apenas transmite a saída para o console em tempo real.
Digite yes
quando solicitado. O Terraform em breve terminará de aplicar a configuração, e você poderá navegar até o espaço de trabalho no site do Terraform Cloud para ver que uma nova ação foi aplicada.
Agora você pode destruir os recursos implantados executando o seguinte:
Nesta seção, você conectou seu projeto ao Terraform Cloud, tornando o estado do seu projeto acessível à sua equipe em um local central. Isso permite que o estado seja compartilhado e sincronizado para todos com acesso ao projeto, proporcionando uma experiência mais tranquila.
Conclusão
Neste tutorial, você utilizou dois backends diferentes: Terraform Cloud, que é a oferta de nuvem gerenciada da Hashicorp para o Terraform; e pg
, que permite armazenar o estado do projeto em um banco de dados PostgreSQL. Você usou um banco de dados PostgreSQL gerenciado da DigitalOcean, que você pode provisionar e usar com o Terraform em questão de minutos.
Para obter mais informações sobre os recursos do Terraform Cloud, visite a documentação oficial.
Este tutorial faz parte da série Como Gerenciar Infraestrutura com Terraform. A série abrange diversos tópicos do Terraform, desde a instalação do Terraform pela primeira vez até o gerenciamento de projetos complexos.
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-terraform-within-your-team