As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Use o Serverspec para o desenvolvimento orientado por testes de código de infraestrutura
Criado por Sushant Jagdale (AWS)
Ambiente: PoC ou piloto | Tecnologias: DevOps; Infraestrutura; Nuvem híbrida | Serviços da AWS: Amazon EC2; AWS; AWS CodeBuild CodeDeploy |
Resumo
Esse padrão mostra como usar o Serverspec
O Serverspec ajuda na refatoração do código da infraestrutura. Com o Serverspec, você pode escrever testes RSpec para verificar a instalação de vários pacotes e softwares, executar comandos, verificar processos e portas em execução, verificar as configurações de permissão de arquivos e assim por diante. O Serverspec verifica se seus servidores estão configurados corretamente. Você instala somente o Ruby em seus servidores. Você não precisa instalar nenhum software agente.
A infraestrutura orientada a testes oferece os seguintes benefícios:
Testes entre plataformas
Validação de expectativas
Confiança em sua automação
Consistência e estabilidade da infraestrutura
Falhe antecipadamente
Você pode usar esse padrão para executar testes de unidade do Serverspec para o software Apache e verificar as configurações de permissão do arquivo durante a criação da imagem de máquina da Amazon (AMI). Uma AMI será criada somente se todos os casos de teste forem aprovados. O Serverspec realizará os seguintes testes:
O processo Apache está em execução.
A porta Apache está em execução.
Os arquivos e diretórios de configuração do Apache existem em determinados locais e assim por diante.
As permissões de arquivo estão configuradas corretamente.
Pré-requisitos e limitações
Pré-requisitos
Uma conta AWS ativa
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
Uma nuvem privada virtual (VPC) com uma sub-rede pública
Instalação da AWS Command Line Interface (AWS CLI) e do Git
Versões do produto
HashiCorp Versão do Packer: 1.6.6
Versão do Ruby: 2.5.1 e posterior
Versão da AWS CLI: 1.18.185
Arquitetura
Arquitetura de destino
![](images/pattern-img/8092a64f-857c-4baa-b41c-a32c9098c4cf/images/eae48272-8e43-4e6c-aad8-e4fefe191fee.png)
Quando você envia o código para o CodeCommit repositório, um evento da Amazon CloudWatch Events envolve o. CodePipeline No primeiro estágio do pipeline, o código é obtido CodeCommit em.
A segunda etapa do pipeline é executada CodeBuild, que valida e constrói o modelo do Packer.
Como parte do provisionador de compilação do Packer, o Packer instala os softwares Apache e Ruby. Em seguida, o provisionador chama um script de shell que usa o Serverspec para teste de unidade do processo, porta, arquivos e diretórios do Apache. O pós-processador do Packer grava um arquivo de notação de JavaScript objeto (JSON) com uma lista de todos os artefatos produzidos pelo Packer durante uma execução
Por fim, uma instância do Amazon Elastic Compute Cloud (Amazon EC2) é criada usando a ID da AMI produzida pelo Packer.
Ferramentas
AWS CLI: o Amazon Command Line Interface (AWS CLI) é uma ferramenta de código aberto para interagir com serviços da AWS usando comandos em seu shell de linha de comando.
CloudWatch Eventos da Amazon — A Amazon CloudWatch Events fornece um near-real-time fluxo de eventos do sistema que descrevem as mudanças nos recursos da Amazon Web Services (AWS).
AWS CodeBuild — CodeBuild A AWS é um serviço de construção totalmente gerenciado na nuvem. CodeBuild compila seu código-fonte, executa testes de unidade e produz artefatos prontos para serem implantados.
AWS CodeCommit — AWS CodeCommit é um serviço de controle de versão hospedado pela Amazon Web Services. Você pode usar CodeCommit para armazenar e gerenciar ativos de forma privada (como documentos, código-fonte e arquivos binários) na nuvem.
AWS CodePipeline — CodePipeline A AWS é um serviço de entrega contínua que você pode usar para modelar, visualizar e automatizar as etapas necessárias para lançar seu software. É possível modelar e configurar rapidamente os diferentes estágios de um processo de lançamento de software.
HashiCorp Packer — O
HashiCorp Packer é uma ferramenta para automatizar a criação de imagens de máquina idênticas a partir de uma única configuração de origem. Serverspec
: o Serverspec executa testes RSpec para verificar a configuração do servidor. O Serverspec usa Ruby e você não precisa instalar o software do agente.
Código
O código está anexado. O código usa a estrutura a seguir, com três diretórios e oito arquivos.
├── amazon-linux_packer-template.json (Packer template) ├── buildspec.yaml (CodeBuild .yaml file) ├── pipeline.yaml (AWS CloudFormation template to automate CodePipeline) ├── rspec_tests (RSpec required files and spec) │ ├── Gem-file │ ├── Rakefile │ └── spec │ ├── apache_spec.rb │ └── spec_helper.rb └── scripts └── rspec.sh (Installation of Ruby and initiation of RSpec)
Épicos
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Criar um usuário do IAM. | Crie um usuário do AWS Identity and Access Management (IAM) com acesso programático e ao console. Para obter mais informações, consulte a documentação da AWS. | Desenvolvedor, administrador de sistemas, DevOps engenheiro |
Configurar credenciais da AWS. | Em seu computador local ou em seu ambiente, configure as credenciais da AWS para o usuário do IAM. Para obter instruções, consulte a documentação da AWS. | Desenvolvedor, administrador de sistemas, DevOps engenheiro |
Teste suas credenciais. | Para validar as credenciais configuradas, execute o comando a seguir.
| Desenvolvedor, administrador de sistemas, DevOps engenheiro |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie um CodeCommit repositório. | Para criar um CodeCommit repositório, execute o comando a seguir.
| Desenvolvedor, administrador de sistemas, DevOps engenheiro |
Escreva testes RSpec. | Crie casos de teste RSpec para sua infraestrutura. Para obter mais informações, consulte a seção Informações adicionais. | Desenvolvedor, DevOps engenheiro |
Envie o código para o CodeCommit repositório. | Para enviar o código anexado ao CodeCommit repositório, execute os comandos a seguir.
| Desenvolvedor, administrador de sistemas, DevOps engenheiro |
Criar o pipeline. | Para criar o pipeline, execute o comando da AWS CLI que está na seção Informações adicionais. | Desenvolvedor, administrador de sistemas, DevOps engenheiro |
Iniciar o pipeline. | Confirme o código no CodeCommit repositório. Qualquer confirmação no repositório iniciará o pipeline. | Desenvolvedor, administrador de sistemas, DevOps engenheiro |
Teste o URL do Apache. | Para testar a instalação da AMI, use o seguinte URL.
A página mostrará a mensagem “Hello from Apache”. | Desenvolvedor, administrador de sistemas, DevOps engenheiro |
Recursos relacionados
Introdução a ServerSpec: O que é o Serverspec e como o usamos na Stelligent?
(postagem externa no blog) Desenvolvimento de código de infraestrutura orientado por testes
(publicação externa no blog) Criação e teste de imagens com HashiCorp Packer e ServerSpec
(artigo externo)
Mais informações
Escreva testes RSpec
O teste RSpec para esse padrão está localizado em <repository folder>/rspec_tests/spec/apache_spec.rb
.
require 'spec_helper' describe service('httpd') do it { should be_enabled } it { should be_running } end describe port(80) do it { should be_listening } end describe file('/etc/httpd/conf/httpd.conf') do it { should exist } it { should be_owned_by 'root' } it { should contain 'ServerName www.example.com' } end describe file('/etc/httpd/conf/httpd.conf') do its(:content) { should match /ServerName www.example.com/ } end describe file('/var/www/html/hello.html') do it { should exist } it { should be_owned_by 'ec2-user' } end describe file('/var/log/httpd') do it { should be_directory } end describe file('/etc/sudoers') do it { should be_mode 440 } end describe group('root') do it { should have_gid 0 } end
Você pode adicionar seus próprios testes ao diretório /spec
.
Criar o pipeline
aws cloudformation create-stack --stack-name myteststack --template-body file://pipeline.yaml --parameters ParameterKey=RepositoryName,ParameterValue=<provide repository-name> ParameterKey=ApplicationName,ParameterValue=<provide application-name> ParameterKey=SecurityGroupId,ParameterValue=<provide SecurityGroupId> ParameterKey=VpcId,ParameterValue=<provide VpcId> ParameterKey=SubnetId,ParameterValue=<provide SubnetId> ParameterKey=Region,ParameterValue=<provide Region> ParameterKey=Keypair,ParameterValue=<provide Keypair> ParameterKey=AccountId,ParameterValue=<provide AccountId> --capabilities CAPABILITY_NAMED_IAM
Detalhes do parâmetro
repository-name
— O nome do CodeCommit repositório da AWS
application-name
: o nome do recurso da Amazon (ARN) está vinculado a ApplicationName
; forneça qualquer nome
SecurityGroupId
: qualquer ID de grupo de segurança da sua conta da AWS que tenha a porta 80 aberta
VpcId
: o ID da sua VPC
SubnetId
: o ID de uma sub-rede pública em sua VPC
Region
: a região da AWS na qual você está executando esse padrão
Keypair
: o nome da chave Secure Shell (SSH) para fazer login na instância do EC2
AccountId
: o ID de sua conta da AWS
Você também pode criar um CodePipeline pipeline usando o AWS Management Console e transmitindo os mesmos parâmetros que estão na linha de comando anterior.
Anexos
Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: attachment.zip