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
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
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
Die zweite Pipeline-Phase wird ausgeführt CodeBuild, in der die Packer-Vorlage validiert und erstellt wird.
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
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
Aufgabe | Beschreibung | Erforderliche 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.
| Entwickler, Systemadministrator, DevOps Ingenieur |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie ein CodeCommit Repository. | Führen Sie den folgenden Befehl aus, um ein CodeCommit Repository zu erstellen.
| 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.
| 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.
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.