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
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
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
Viene eseguita la seconda fase della pipeline CodeBuild, che convalida e crea il modello Packer.
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
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à | Descrizione | Competenze 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.
| Sviluppatore, amministratore di sistema, ingegnere DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea un CodeCommit repository. | Per creare un CodeCommit repository, esegui il comando seguente.
| 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.
| 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.
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.