Importar uma infraestrutura existente para o Terraform
Stephane Jourdan
2 de julho de 2020
0 minutos de leituraNota do editor: esta publicação foi originalmente publicada em CloudSkiff.com. A CloudSkiff se juntou à Snyk em outubro de 2021.
Às vezes, você precisa importar uma infraestrutura existente para o Terraform. Isso pode acontecer por vários motivos. Algumas pessoas estão começando e precisam migrar infraestruturas existentes e criar uma nova base de código a partir delas. Em outros casos, mesmo que você seja especialista, precisa transformar uma POC (prova de conceito) criada rapidamente com alguns cliques no console em um projeto real, estável e pronto para produção.
Supondo que você já tenha uma infraestrutura em produção criada pelo console da nuvem… como obter código Terraform a partir dela e, mais importante, fazer esse código funcionar?
Neste artigo, vamos apresentar rapidamente as principais formas de gerar automaticamente código de infraestrutura a partir de um ambiente existente: como cloná-lo, fazer com que funcione e garantir que ele possa ser reproduzido.
Importe uma infraestrutura existente para o Terraform usando o comando terraform import
Se você tiver poucos recursos para transformar em código e as habilidades necessárias, pode simplesmente reescrever o código. Mas, obviamente, você precisa saber exatamente como esses recursos estão configurados.
Se você já tem uma base de código Terraform, depois de escrever o código, será necessário importar os recursos para ela usando terraform import. terraform import é um subcomando do Terraform. Como esse código corresponderá perfeitamente aos recursos existentes na conta do seu provedor de nuvem, você terá um alinhamento perfeito entre o código, os recursos existentes e o arquivo TFState.
Importe uma infraestrutura existente para o Terraform com uma ferramenta de importação
A opção que acabamos de mencionar pode funcionar para poucos recursos, mas a tarefa pode ser difícil em ambientes maiores. Existem no mercado diferentes ferramentas de importação e conversão, scanners, geradores de Terraform e outras soluções que podem ajudar.
Uma delas, Terraformer, foi desenvolvida pela equipe de SRE da Waze em Tel Aviv.
Depois que você fornecer suas credenciais, o Terraformer fará uma varredura na conta do seu provedor de nuvem em busca de recursos. Ao encontrar um, ele o converterá em código Terraform adequado, com um arquivo de estado funcional.
O código gerado não é muito organizado e certamente não segue o princípio DRY, mas resolve 80% do trabalho e permite que você comece a desenvolvê-lo.
Etapas essenciais para transformar infraestruturas importadas em código Terraform funcional
Depois de importar seus recursos existentes para o Terraform, é fundamental seguir mais algumas etapas para que tudo funcione. Afinal, nesse estágio, o código ainda não está organizado nem otimizado.
Garanta que tudo use variáveis e que todas elas estejam padronizadas.
Imagine que você tem uma rede VPC chamada VPC. Isso pode ser um problema se só for possível ter um nome de VPC por região. Esse é o caso dos buckets do Amazon S3. Por exemplo, só é possível ter um bucket do S3 em todo o mundo com determinado nome, compartilhado entre todos os clientes.
Renomear os recursos vai levar algum tempo. Mas, quando você garantir por meio de variáveis que os nomes usados sejam exclusivos, terá mais confiança de que o código poderá ser reproduzido em outra região.
Declare explicitamente as dependências.
Um dos problemas de importar recursos automaticamente para o código Terraform é que, muitas vezes, as conexões entre eles não são estabelecidas. Você pode encontrar recursos que fazem sentido em conjunto, mas sem dependências declaradas explicitamente. Ou talvez elas estejam declaradas, mas não por meio de variáveis.
Por exemplo, talvez você tenha uma regra de grupo de segurança declarada e vinculada ao ID desse grupo, e tudo funcione corretamente. Mas, se não houver um vínculo interno — ou, mais precisamente, uma dependência no código —, na próxima vez que você tentar reimplantá-lo em outra região, provavelmente implantará regras e um grupo de segurança que não estarão conectados.
Por fim, mas não menos importante: garanta a reprodutibilidade usando aleatoriedade
A última etapa essencial é garantir a reprodutibilidade usando aleatoriedade. Basicamente, basta adicionar alguns caracteres aleatórios aos nomes.
Eu costumo usar uma string aleatória como sufixo. Isso gera uma string aleatória simples de oito caracteres, sem caracteres especiais, para evitar nomes estranhos. Aqui, basta criar variáveis locais.
Nos meus ambientes de produção e de homologação, basta adicionar esses valores como sufixos. Assim, sei que terei um nome aleatório exclusivo tanto em produção quanto em homologação. E, com uma simples cópia e colagem, posso criar facilmente outro ambiente para testes.
Para concluir
Importar seus recursos é apenas a primeira etapa e raramente é suficiente.
Para que seu código esteja pronto para uso, as próximas etapas são:
Garantir que tudo use variáveis
Garantir que todas as variáveis estejam padronizadas.
Declarar as dependências e vinculá-las
Adicionar valores aleatórios às variáveis para gerar nomes exclusivos.
Proteja seu código Terraform
Snyk IaC protege suas configurações do Terraform (e também seus templates de Kubernetes, CloudFormation e ARM!) durante o desenvolvimento, com correções guiadas para que você possa integrar as alterações e seguir em frente. Teste enquanto escreve, monitore mudanças nos seus repositórios Git e automatize os testes nos pipelines de build antes da implantação. Leva apenas alguns minutos para começar com um plano gratuito, enquanto uma violação causada por uma configuração incorreta de IaC pode gerar danos para a vida toda. Cadastre-se abaixo e comece a proteger suas configurações.
Proteja a infraestrutura desde a origem
A Snyk automatiza a segurança e a conformidade de IaC nos fluxos de trabalho e detecta recursos com configurações divergentes ou ausentes.
