Teste de infraestrutura como código Terraform: analise testes de unidade e desenvolvimento ponta a ponta testando comportamentos





Para os futuros alunos do curso "Infraestrutura como código na Ansible" e todos os interessados, preparamos uma tradução de material útil.



Também convidamos você a se inscrever em uma aula aberta sobre o tópico "Gerenciando Kubernetes com Kubespray" .









Bem vindo de volta! Este é outro artigo técnico em uma série de artigos de terraform e kubernetes sobre infraestrutura como código da Contino.



TL; DR O

tamanho do comando não importa. De qualquer maneira, a implementação de uma boa análise de configuração de infraestrutura de terraform e teste de sanidade de ponta a ponta não precisa ser um processo longo e complexo.



Eu me deparei com um desafio empolgante: explorar, desenvolver e apresentar uma estrutura de teste de software livre adequada para a base de código do terraform como parte do pipeline de lançamento de infraestrutura. O princípio de “controle de qualidade em tudo” está longe de ser novo. Mas sua implementação depende da maturidade da infraestrutura da organização e do nível de risco aceitável - até o estágio de se chegar a um produto acabado [de alguma forma].



Dar uma nova olhada no campo de código de infraestrutura de teste permitiu que eu me familiarizasse com as estruturas de teste mais recentes e atualizasse meus conhecimentos.



imagem



É certo que, no início de minha jornada, sofri com o preconceito de que preparar e implementar esse "controle de qualidade de classe empresarial" pode exigir muito trabalho.



Afinal, o Hashicorp Terraform tem funcionalidade suficiente pronta para usar para validar e validar sua base de código .



  • Controle de qualidade do código - terraform fmt -check



    e terraform validate



    .
  • Visualização - terraform plan



    .
  • Construção - TFLOG=debug terraform apply



    para verificação meticulosa.


Ferramentas de análise de código estático do Terraform



Uma pesquisa no Google revelou uma lista muito extensa de ferramentas de teste de terraforma potencialmente úteis.



Mas primeiro, vamos examinar a lista de nossos requisitos.



  • Ter testes de unidade na configuração de recursos do terraform e a capacidade de estender qualquer lista genérica de verificações de práticas recomendadas * para um provedor de nuvem específico. Além disso, estamos interessados ​​em ferramentas fáceis de usar com as quais você possa começar imediatamente.


* Falta de instâncias ec2 expostas ao mundo 0.0.0.0/0 - e assim por diante.



  •  — «» , . , , , EKS.


  • , , — , , . , , .


  • , . , , Go Python. , , , , . , , . , .


Destaque: Analisando e comparando ferramentas e plataformas de teste do Terraform



Esperamos que a lista a seguir torne seu trabalho em análise de infraestrutura estática como código e controle de qualidade mais fácil. Observe que esta é uma lista completa de todas as ferramentas de teste de terraform relevantes que encontrei, que é uma mistura de teste de validade de configuração, controle de qualidade de código e melhores práticas focadas em secOps com testes de unidade. Esta lista é apresentada a seguir.









Vamos resumir. Tentei encontrar um teste de unidade padronizado para componentes de recursos do terrenoform e um conjunto mais personalizado de testes que usam a configuração de recursos para validar os resultados terraform plan



.



Depois de revisar as vantagens e desvantagens de cada plataforma, optei por uma ferramenta checkov



e plataforma com nomes muito apropriados terraform-compliance



 - ambas escritas em python. Eles atenderam a todos os meus requisitos descritos acima.



A infraestrutura como pipeline de liberação de código se parece com isso em termos gerais.



Depois de mergulhar profundamente nessas plataformas, inevitavelmente revisei minha própria experiência e cheguei às seguintes conclusões relevantes sobre o tópico em discussão:



  • .
  • , , , .
  • , , , - « » « ».




 — Checkov BridgeCrew



www.checkov.io



Checkov é uma ferramenta de análise de código estático para infraestrutura como código.



Ele verifica a infraestrutura em nuvem provisionada com Terraform, Cloudformation, Kubernetes, Serverless ou modelos ARM e identifica configurações incorretas para segurança e conformidade.


Existem vários testes de unidade padrão executados durante a varredura do repositório de código do terraform que mostram desvios das melhores práticas - por exemplo, quando, de acordo com sua configuração de segurança, você tem uma máquina virtual na porta 22 exposta ao mundo (0.0.0.0/0).



Todos os testes podem ser encontrados neste link do GitHub.



É muito fácil começar a usar a plataforma.



  • Instale o binário.
  • Inicialize o diretório terraform com o terraform init.
  • Execute chechov neste diretório.


Todos os testes de unidade executados por padrão podem ser listados na linha de comando. Além disso, quando o checkov é executado, a plataforma, por padrão, retorna todos os testes de unidade aprovados e reprovados. Muito conveniente, fácil de usar. Os métodos avançados do Terraform são testados, mas não todos. Essa é uma diferença fundamental.



Chechov ficará feliz em avaliar SOMENTE o seu código terraform



. A plataforma pode funcionar imediatamente depois terraform init



. Ela não se preocupa com o seu terraform plan



 - com todas as vantagens e desvantagens. A plataforma faz o que é declarado, ou seja, "análise estática de código". Esteja ciente das possíveis consequências, bem como de quaisquer considerações lógicas, para seus recursos.



imagem



imagem



checkov .



Se você estiver pronto para fazer um desenvolvimento Python profundo, poderá escrever testes de unidade adicionais. A linguagem de desenvolvimento da plataforma era um dos meus requisitos, porque às vezes tenho que analisar a base de código dos testes para estimar o quão difícil seria [se necessário] criar tais métodos adicionais. Este momento, aliado às questões de atendimento para o grupo como um todo, tornou-se o principal fator na escolha desta plataforma em detrimento de uma alternativa, que alcançaria o mesmo resultado.



Para resumir, a plataforma checkov é ótima na área de análise estática de código. Especificamente, se eu precisar colocar na lista de permissões a sub-rede IP definida inicialmente. Mas essa opção não é adequada para testes e2e que precisam de uma plataforma de teste separada.



Por outro lado, como solução, posso replicar o teste de unidade e codificar minhas configurações de sub-rede / IP. E então se eu tiver várias instâncias e projetos - pular este teste, mesmo se eu precisar? Talvez. Ou talvez não.



É aqui que a segunda plataforma de teste entra em jogo - terraform-compliance



.



Terraform-compliance



terraform-compliance.com



Terraform-compliance  é uma plataforma de teste leve projetada para auditorias de segurança e conformidade em terraform para garantir que sua infraestrutura seja testada negativamente como o código.


fundo



Novamente, o desenvolvimento de teste comportamental ponta a ponta (BDD) entrou recentemente em uso como uma estrutura de teste, destacando a necessidade de uma estrutura de teste universal. Mas esse não é o único benefício. Simplicidade.



Na verdade, parece-me que o BDD não está recebendo atenção suficiente. Você pode ter ouvido falar do Test Driven Development (TDD), que tem raízes profundas, principalmente no ambiente de desenvolvimento de software. Mas é aqui que plataformas como o BDD facilitam a criação de lógica adicional, oferecendo ao mantenedor de infraestrutura médio uma maneira mais simples, concisa e repetível de desenvolver testes personalizados de ponta a ponta sem conhecimento profundo de qualquer nova linguagem de programação especializada.



E embora o código possa descrever, de fato, tudo no mundo, em última análise, tudo se resume à capacidade de gerenciamento, a capacidade de compreender a complexidade do código (o que pode exigir a preparação de documentação extensa), sem mencionar o suporte e a manutenção.  Leia mais sobre o BDD aqui.



Cucumber.io  não é apenas uma linguagem, é um sistema que simplifica o trabalho de teste, adotando uma abordagem WYSIWYG para a criação, compreensão e manutenção de testes. Esses exemplos são determinados antes do desenvolvimento e são usados ​​como critérios de aceitação.



Eles fazem parte da definição.



Testando com Terraform-Compliance



Cada plataforma é revisada por seus méritos, com um estudo aprofundado de onde seus recursos e nuances podem ser melhor usados. Olhando para o futuro, posso dizer que ambas as plataformas podem ser usadas.



Aqui está um exemplo de tal teste desenvolvido usando a plataforma terraform-compliance



BDD. Ele permite que você execute testes de ponta a ponta bastante complexos.



A plataforma terraform-compliance



usa a saída terraform plan



... Como resultado, ele permite que “planos” de liberação completos sejam formados e testados exaustivamente. Por exemplo, controle se o par de chaves de criptografia correto [para seu provedor de nuvem] é usado para conta, ambiente e assim por diante. Você tem muita liberdade criativa e, o mais importante, a plataforma é muito fácil de usar.



Basta verificar as etapas abaixo e exemplos.



  • Etapa 1. Inicialize o diretório terraform: # terraform init
  • Etapa 2. Você pode gerar rapidamente um plano de terreno com o seguinte comando: #terraform plan -out = plan.out
  • Etapa 3. Escreva alguns testes. É uma questão simples - já existe uma pasta com exemplos. Vamos examinar meus próprios exemplos de teste abaixo, escritos com base na saída do meu plano de terreno.


Este é um trecho do plano de terraform



 configuração do terreno que cria o EKS com o grupo de lançamento especificado. Vamos fazer com que o nosso código terraform



não usa a infra-estrutura instancetype



, mas usa o "aprovado" a1.xlarge



ou a1.2xlarge



.



Agora vou alterá-lo propositalmente t2.small



para simular falhas de teste.



Vamos escrever um teste para garantir que esse requisito seja validado com sucesso.



  • Etapa 4. Vamos fazer as terraform-compliance



    placas avaliarem usando cenários de teste:#terraform-compliance -p plan.out -f ./<test-cases-folder>







Executando testes



Exemplo de resultado de aprovação e reprovação



imagem



Se nosso código de estrutura do Terraform estiver usando o correto instancetype



, todos os resultados serão verdes SUCCESS.



Se nosso código de infraestrutura do Terraform violar o requisito por estar incorreto instancetype



, os resultados serão FALHA em vermelho.



Vamos escrever ainda mais testes.



imagem



Alguns testes mais simples retirados do diretório de exemplos:



imagem



Se um falhar, o usuário verá "valor_real" que é recuperado e exibido para fins de ajuda e depuração.



Resultado dos testes



Depois que todos os testes foram executados, um resumo conveniente de todos os testes aprovados e reprovados é exibido, o que também inclui os testes perdidos. Gosto porque me permite escrever uma longa lista de testes rigorosos, bem como fornecer informações claras ao final de quais testes falharam e quando. Além disso, se falhar, alguns testes podem ser pulados com uma tag @warning



, conforme mostrado no exemplo abaixo.

habrastorage.org/getpro/habr/upload_files/c22/910/cb9/c22910cb95fb4ccc7555d44 Budapb5436b



Resultado



Sem dúvida, esta foi uma grande oportunidade para dar uma olhada em alguns dos frameworks de validação e teste superiores disponíveis para código como frameworks Terraform.



Eu gostei de olhar para essas duas plataformas e fiquei particularmente surpreso com a facilidade de integração do checkov, bem como as incríveis e2e terraform plan



opções de validação e teste personalizado que ele oferece terraform-compliance



.



Este último me lembra o comportamento do behave, outro ótimo framework de teste de kubernetes BDD e2e com o qual trabalhei no passado.



Estruturas de teste escritas inteiramente em Python facilitam o compartilhamento de conhecimento Python entre plataformas e reduzem a quantidade de inteligência necessária para manter e desenvolver testes no futuro.



Se você precisar verificar sua configuração em relação às práticas recomendadas quando não precisar de um plano de terreno, checkov pode ser o ideal para você. Caso contrário, a resposta pode ser uma plataforma terraform-compliance



com um conjunto mais rico de recursos de validação terraform plan



. O melhor de tudo é que ser uma plataforma BDD é terraform-compliance



muito fácil de aprender.



O teste de unidade vem primeiro. Fácil como uma torta. A plataforma Checkov da Bridgecrewio permite verificação de conformidade com as melhores práticas prontas para uso.



Não há realmente nenhuma razão legítima para pular qualquer um desses testes de controle de qualidade, seja qual for o tamanho do seu grupo. Especialmente considerando os custos de mão-de-obra insignificantes que precisam ser aplicados para implementá-los (ver exemplos no artigo).



PS Contino tem um bom número de projetos fantásticos. Se você gostaria de trabalhar em projetos de infraestrutura ultramodernos ou está procurando tarefas sérias - entre em contato conosco! Estamos contratando funcionários e procurando mentes brilhantes em todos os níveis. Na Contino, temos orgulho de desenvolver projetos de transformação de nuvem de ponta para empresas de médio e grande porte.

«Infrastructure as a code in Ansible».



« Kubernetes Kubespray».





All Articles