Usa Serverspec per lo sviluppo basato sui test del codice dell'infrastruttura - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Usa Serverspec per lo sviluppo basato sui test del codice dell'infrastruttura

Creato da Sushant Jagdale (AWS)

Ambiente: PoC o pilota

Tecnologie: DevOps; Infrastruttura; Cloud ibrido

Servizi AWS: Amazon EC2; AWS; AWS CodeBuild CodeDeploy

Riepilogo

Questo modello mostra come utilizzare Serverspec per utilizzare lo sviluppo basato su test (TDD) durante la scrittura di codice dell'infrastruttura sul cloud Amazon Web Services (AWS). Il modello copre anche l'automazione con AWS CodePipeline. TDD focalizzerà l'attenzione su ciò che deve fare il codice dell'infrastruttura e stabilirà una chiara definizione di fatto. Puoi utilizzare Serverspec per testare l'infrastruttura creata da strumenti come AWS CloudFormation, Terraform by HashiCorp e Ansible.

Serverspec aiuta a rifattorizzare il codice dell'infrastruttura. Con Serverspec, è possibile scrivere test RSpec per verificare l'installazione di vari pacchetti e software, eseguire comandi, verificare i processi e le porte in esecuzione, controllare le impostazioni di autorizzazione dei file e così via. Serverspec verifica se i server sono configurati correttamente. Installi solo Ruby sui tuoi server. Non è necessario installare alcun software agente.

L'infrastruttura basata sui test offre i seguenti vantaggi:

  • Test multipiattaforma

  • Convalida delle aspettative

  • Fiducia nella vostra automazione

  • Coerenza e stabilità dell'infrastruttura

  • Fallisci presto

Puoi utilizzare questo modello per eseguire test unitari Serverspec per il software Apache e controllare le impostazioni di autorizzazione dei file durante la creazione di Amazon Machine Image (AMI). Un AMI verrà creato solo se tutti i test case vengono superati. Serverspec eseguirà i seguenti test:

  • Il processo Apache è in esecuzione.

  • La porta Apache è in esecuzione.

  • I file e le directory di configurazione di Apache esistono in determinate posizioni e così via.

  • Le autorizzazioni dei file sono configurate correttamente.

Prerequisiti e limitazioni

Prerequisiti

  • Un account AWS attivo

  • AWS CodeBuild

  • AWS CodeCommit

  • AWS CodePipeline

  • Un cloud privato virtuale (VPC) con una sottorete pubblica

  • Installazione di AWS Command Line Interface (AWS CLI) e Git

Versioni del prodotto

  • HashiCorp Versione Packer: 1.6.6

  • Versione Ruby: 2.5.1 e successive

  • Versione AWS CLI: 1.18.185

Architettura

Architettura Target

  1. Quando invii il codice al CodeCommit repository, un evento Amazon CloudWatch Events coinvolge il. CodePipeline Nella prima fase della pipeline, il codice viene recuperato da. CodeCommit

  2. Viene eseguita la seconda fase della pipeline CodeBuild, che convalida e crea il modello Packer.

  3. Come parte del build provisioner di Packer, Packer installa i software Apache e Ruby. Quindi il provisioner chiama uno script di shell che utilizza Serverspec per testare unitariamente il processo, la porta, i file e le directory di Apache. Il postprocessore Packer scrive un file JavaScript Object Notation (JSON) con un elenco di tutti gli artefatti prodotti da Packer durante un'esecuzione

  4. Infine, viene creata un'istanza Amazon Elastic Compute Cloud (Amazon EC2) utilizzando l'ID AMI prodotto da Packer.

Strumenti

  • AWS CLI — Amazon Command Line Interface (AWS CLI) è uno strumento open source per interagire con i servizi AWS utilizzando i comandi nella shell della riga di comando.

  • Amazon CloudWatch Events: Amazon CloudWatch Events offre un near-real-time flusso di eventi di sistema che descrivono i cambiamenti nelle risorse di Amazon Web Services (AWS).

  • AWS CodeBuild: AWS CodeBuild è un servizio di build completamente gestito nel cloud. CodeBuild compila il codice sorgente, esegue test unitari e produce artefatti pronti per la distribuzione.

  • AWS CodeCommit: AWS CodeCommit è un servizio di controllo delle versioni ospitato da Amazon Web Services. Puoi utilizzarlo CodeCommit per archiviare e gestire privatamente risorse (come documenti, codice sorgente e file binari) nel cloud.

  • AWS CodePipeline: AWS CodePipeline è un servizio di distribuzione continua che puoi utilizzare per modellare, visualizzare e automatizzare i passaggi necessari per rilasciare il tuo software. Puoi modellare e configurare rapidamente i diversi stadi del processo di rilascio di un software.

  • HashiCorp Packer — HashiCorp Packer è uno strumento per automatizzare la creazione di immagini di macchine identiche da un'unica configurazione di origine.

  • Serverspec: Serverspec esegue test RSpec per verificare la configurazione del server. Serverspec utilizza Ruby e non è necessario installare il software dell'agente.

Codice

Il codice è allegato. Il codice utilizza la seguente struttura, con tre cartelle e otto file.

├── 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)

Epiche

AttivitàDescrizioneCompetenze richieste
Crea un utente IAM.

Crea un utente AWS Identity and Access Management (IAM) con accesso programmatico e da console. Per ulteriori informazioni, consulta la documentazione di AWS.

Sviluppatore, amministratore di sistema, DevOps ingegnere
Configura le credenziali AWS.

Sul tuo computer locale o nel tuo ambiente, configura le credenziali AWS per l'utente IAM. Per istruzioni, consulta la documentazione AWS.

Sviluppatore, amministratore di sistema, DevOps ingegnere
Verifica le tue credenziali.

Per convalidare le credenziali configurate, esegui il comando seguente.

aws sts get-caller-identity --profile <profile>
Sviluppatore, amministratore di sistema, ingegnere DevOps
AttivitàDescrizioneCompetenze richieste
Crea un CodeCommit repository.

Per creare un CodeCommit repository, esegui il comando seguente.

aws codecommit create-repository --repository-name "<provide repository-name>" --repository-description "repository to unit test the infrastructure code"
Sviluppatore, amministratore di sistema, DevOps ingegnere
Scrivi test RSpec.

Crea casi di test RSpec per la tua infrastruttura. Per ulteriori informazioni, consulta la sezione Informazioni aggiuntive.

Sviluppatore, DevOps ingegnere
Invia il codice al CodeCommit repository.

Per inviare il codice allegato al CodeCommit repository, esegui i seguenti comandi.

git clone <repository url> cp -R /tmp/<code folder>/ <repository_folder>/ git add . git commit -m"initial commit" git push
Sviluppatore, amministratore di sistema, DevOps ingegnere
Crea la pipeline.

Per creare la pipeline, esegui il comando AWS CLI che si trova nella sezione Informazioni aggiuntive.

Sviluppatore, amministratore di sistema, ingegnere DevOps
Avvia la pipeline.

Inserisci il codice nel CodeCommit repository. Qualsiasi commit nel repository avvierà la pipeline.

Sviluppatore, amministratore di sistema, ingegnere DevOps
Verifica l'URL di Apache.

Per testare l'installazione AMI, usa il seguente URL.

http://<your instance public ip>/hello.html

La pagina mostrerà un messaggio «Ciao da Apache».

Sviluppatore, amministratore di sistema, DevOps ingegnere

Risorse correlate

Informazioni aggiuntive

Scrivi test RSpec

Il test RSpec per questo modello si trova in. <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

Puoi aggiungere i tuoi test alla /spec directory.

Crea la 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

Dettagli dei parametri

repository-name— Il nome del CodeCommit repository AWS

application-name— Gli Amazon Resource Name (ARN) sono collegati aApplicationName; fornisci un nome qualsiasi

SecurityGroupId— Qualsiasi ID del gruppo di sicurezza del tuo account AWS con la porta 80 aperta

VpcId— L'ID del tuo VPC

SubnetId— L'ID di una sottorete pubblica nel tuo VPC

Region— La regione AWS in cui viene eseguito questo pattern

Keypair— Il nome della chiave Secure Shell (SSH) per accedere all'istanza EC2

AccountId— ID del tuo account AWS

Puoi anche creare una CodePipeline pipeline utilizzando la Console di gestione AWS e passando gli stessi parametri della riga di comando precedente.

Allegati

Per accedere a contenuti aggiuntivi associati a questo documento, decomprimi il seguente file: attachment.zip