Verwenden Sie Serverspec für die testgetriebene Entwicklung von Infrastrukturcode - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie Serverspec für die testgetriebene Entwicklung von Infrastrukturcode

Erstellt von Sushant Jagdale (AWS)

Umgebung: PoC oder Pilotprojekt

Technologien: DevOps; Infrastruktur; Hybrid-Cloud

AWS-Dienste: Amazon EC2; AWS CodeBuild; AWS CodeDeploy

Übersicht

Dieses Muster zeigt Ihnen, wie Sie Serverspec verwenden, um Test-Driven Development (TDD) beim Schreiben von Infrastrukturcode in der Amazon Web Services (AWS) -Cloud zu verwenden. Das Muster deckt auch die Automatisierung mit AWS ab CodePipeline. TDD wird die Aufmerksamkeit darauf lenken, was der Infrastrukturcode tun muss, und eine klare Definition von erledigt festlegen. Sie können Serverspec verwenden, um Infrastrukturen zu testen, die mit Tools wie AWS CloudFormation, Terraform by HashiCorp und Ansible erstellt wurden.

Serverspec hilft beim Refactoring von Infrastrukturcode. Mit Serverspec können Sie RSpec-Tests schreiben, um die Installation verschiedener Pakete und Software zu überprüfen, Befehle auszuführen, nach laufenden Prozessen und Ports zu suchen, Dateiberechtigungseinstellungen zu überprüfen usw. Serverspec überprüft, ob Ihre Server korrekt konfiguriert sind. Sie installieren nur Ruby auf Ihren Servern. Sie müssen keine Agentsoftware installieren.

Eine testgetriebene Infrastruktur bietet die folgenden Vorteile:

  • Plattformübergreifendes Testen

  • Validierung der Erwartungen

  • Vertrauen in Ihre Automatisierung

  • Konsistenz und Stabilität der Infrastruktur

  • Früh scheitern

Sie können dieses Muster verwenden, um Serverspec-Komponententests für Apache-Software auszuführen und die Dateiberechtigungseinstellungen während der Erstellung von Amazon Machine Image (AMI) zu überprüfen. Ein AMI wird nur erstellt, wenn alle Testfälle erfolgreich sind. Serverspec führt die folgenden Tests durch:

  • Der Apache-Prozess läuft.

  • Der Apache-Port läuft.

  • Apache-Konfigurationsdateien und -verzeichnisse existieren an bestimmten Orten usw.

  • Die Dateiberechtigungen sind korrekt konfiguriert.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktives AWS-Konto

  • AWS CodeBuild

  • AWS CodeCommit

  • AWS CodePipeline

  • Eine virtuelle private Cloud (VPC) mit einem öffentlichen Subnetz

  • Installation von AWS Command Line Interface (AWS CLI) und Git

Produktversionen

  • HashiCorp Packer-Version: 1.6.6

  • Ruby-Version: 2.5.1 und später

  • AWS-CLI-Version: 1.18.185

Architektur

Zielarchitektur

Developer workflow diagram showing CodeCommit, Event, CodePipeline, AWS CodeBuild, and AMI creation.
  1. Wenn Sie den Code in das CodeCommit Repository übertragen, aktiviert ein Amazon CloudWatch Events-Ereignis den CodePipeline. In der ersten Phase der Pipeline wird der Code von abgerufen. CodeCommit

  2. Die zweite Pipeline-Phase wird ausgeführt CodeBuild, in der die Packer-Vorlage validiert und erstellt wird.

  3. Als Teil des Packer-Build-Provisioners installiert Packer die Apache- und Ruby-Software. Anschließend ruft der Provisioner ein Shell-Skript auf, das Serverspec verwendet, um den Apache-Prozess, den Port, die Dateien und Verzeichnisse auf Einheiten zu testen. Der Packer-Postprozessor schreibt eine JSON-Datei ( JavaScript Object Notation) mit einer Liste aller Artefakte, die Packer während eines Laufs erzeugt hat

  4. Schließlich wird eine Amazon Elastic Compute Cloud (Amazon EC2) -Instance mit der von Packer erstellten AMI-ID erstellt.

Tools

  • AWS CLI — Amazon Command Line Interface (AWS CLI) ist ein Open-Source-Tool für die Interaktion mit AWS-Services mithilfe von Befehlen in Ihrer Befehlszeilen-Shell.

  • Amazon CloudWatch Events — Amazon CloudWatch Events stellt eine Reihe von near-real-time Systemereignissen bereit, die Änderungen an den Ressourcen von Amazon Web Services (AWS) beschreiben.

  • AWS CodeBuild — AWS CodeBuild ist ein vollständig verwalteter Build-Service in der Cloud. CodeBuild kompiliert Ihren Quellcode, führt Komponententests durch und produziert Artefakte, die sofort einsatzbereit sind.

  • AWS CodeCommit — AWS CodeCommit ist ein Versionskontrollservice, der von Amazon Web Services gehostet wird. Sie können ihn verwenden CodeCommit , um Ressourcen (wie Dokumente, Quellcode und Binärdateien) privat in der Cloud zu speichern und zu verwalten.

  • AWS CodePipeline — AWS CodePipeline ist ein Continuous Delivery Service, mit dem Sie die zur Veröffentlichung Ihrer Software erforderlichen Schritte modellieren, visualisieren und automatisieren können. Sie können die verschiedenen Phasen eines Prozesses für die Veröffentlichung von Software schnell modellieren und konfigurieren.

  • HashiCorp Packer — HashiCorp Packer ist ein Tool zur Automatisierung der Erstellung identischer Maschinenabbilder aus einer einzigen Quellkonfiguration.

  • Serverspec — Serverspec führt RSpec-Tests durch, um die Serverkonfiguration zu überprüfen. Serverspec verwendet Ruby, und Sie müssen keine Agentsoftware installieren.

Code

Der Code ist angehängt. Der Code verwendet die folgende Struktur mit drei Verzeichnissen und acht Dateien.

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

Epen

AufgabeBeschreibungErforderliche Fähigkeiten
Erstellen Sie einen IAM-Benutzer.

Erstellen Sie einen AWS Identity and Access Management (IAM) -Benutzer mit programmatischem Zugriff und Konsolenzugriff. Weitere Informationen finden Sie in der AWS-Dokumentation.

Entwickler, Systemadministrator, Ingenieur DevOps
Konfigurieren Sie AWS-Anmeldeinformationen.

Konfigurieren Sie auf Ihrem lokalen Computer oder in Ihrer Umgebung AWS-Anmeldeinformationen für den IAM-Benutzer. Anweisungen finden Sie in der AWS-Dokumentation.

Entwickler, Systemadministrator, DevOps Ingenieur
Testen Sie Ihre Anmeldeinformationen.

Führen Sie den folgenden Befehl aus, um die konfigurierten Anmeldeinformationen zu überprüfen.

aws sts get-caller-identity --profile <profile>
Entwickler, Systemadministrator, DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten
Erstellen Sie ein CodeCommit Repository.

Führen Sie den folgenden Befehl aus, um ein CodeCommit Repository zu erstellen.

aws codecommit create-repository --repository-name "<provide repository-name>" --repository-description "repository to unit test the infrastructure code"
Entwickler, Systemadministrator, DevOps Ingenieur
Schreiben Sie RSpec-Tests.

Erstellen Sie RSpec-Testfälle für Ihre Infrastruktur. Weitere Informationen finden Sie im Abschnitt Zusätzliche Informationen.

Entwickler, DevOps Ingenieur
Senden Sie den Code in das CodeCommit Repository.

Führen Sie die folgenden Befehle aus, um den angehängten Code in das CodeCommit Repository zu übertragen.

git clone <repository url> cp -R /tmp/<code folder>/ <repository_folder>/ git add . git commit -m"initial commit" git push
Entwickler, Systemadministrator, DevOps Ingenieur
Erstellen Sie die Pipeline.

Um die Pipeline zu erstellen, führen Sie den AWS-CLI-Befehl aus, der sich im Abschnitt Zusätzliche Informationen befindet.

Entwickler, Systemadministrator, DevOps Ingenieur
Starten Sie die Pipeline.

Übergeben Sie den Code in das CodeCommit Repository. Jeder Commit an das Repository initiiert die Pipeline.

Entwickler, Systemadministrator, DevOps Ingenieur
Testen Sie die Apache-URL.

Verwenden Sie die folgende URL, um die AMI-Installation zu testen.

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

Auf der Seite wird die Meldung „Hello from Apache“ angezeigt.

Entwickler, Systemadministrator, DevOps Ingenieur

Zugehörige Ressourcen

Zusätzliche Informationen

Schreiben Sie RSpec-Tests

Der RSpec-Test für dieses Muster befindet sich unter. <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

Sie können dem Verzeichnis Ihre eigenen Tests hinzufügen. /spec

Erstellen Sie die 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

Einzelheiten zu den Parametern

repository-name— Der Name des CodeCommit AWS-Repositorys

application-name— Der Amazon-Ressourcenname (ARNs), mit dem verknüpft istApplicationName; geben Sie einen beliebigen Namen an

SecurityGroupId— Jede Sicherheitsgruppen-ID von Ihrem AWS-Konto, für das Port 80 geöffnet ist

VpcId— Die ID Ihrer VPC

SubnetId— Die ID eines öffentlichen Subnetzes in Ihrer VPC

Region— Die AWS-Region, in der Sie dieses Muster ausführen

Keypair— Der Secure Shell (SSH) -Schlüsselname für die Anmeldung bei der EC2-Instance

AccountId— Ihre AWS-Konto-ID

Sie können auch eine CodePipeline Pipeline erstellen, indem Sie die AWS-Managementkonsole verwenden und dieselben Parameter wie in der vorherigen Befehlszeile übergeben.

Anlagen

Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, entpacken Sie die folgende Datei: attachment.zip