Utilisez Serverspec pour le développement piloté par les tests du code d'infrastructure - Recommandations AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisez Serverspec pour le développement piloté par les tests du code d'infrastructure

Créée par Sushant Jagdale (AWS)

Environnement : PoC ou pilote

Technologies : infrastructure DevOps ; cloud hybride

Services AWS : Amazon EC2 ; AWS ; AWS CodeBuild CodeDeploy

Récapitulatif

Ce modèle vous montre comment utiliser Serverspec pour utiliser le développement piloté par les tests (TDD) lors de l'écriture de code d'infrastructure sur le cloud Amazon Web Services (AWS). Le modèle couvre également l'automatisation avec AWS CodePipeline. Le TDD concentrera son attention sur ce que le code d'infrastructure doit faire et définira clairement ce qui est fait. Vous pouvez utiliser Serverspec pour tester l'infrastructure créée par des outils tels qu'AWS CloudFormation, Terraform by HashiCorp et Ansible.

Serverspec aide à refactoriser le code de l'infrastructure. Avec Serverspec, vous pouvez écrire des tests RSpec pour vérifier l'installation de divers packages et logiciels, exécuter des commandes, vérifier les processus et les ports en cours d'exécution, vérifier les paramètres d'autorisation des fichiers, etc. Serverspec vérifie si vos serveurs sont correctement configurés. Vous n'installez que Ruby sur vos serveurs. Il n'est pas nécessaire d'installer de logiciel agent.

L'infrastructure axée sur les tests offre les avantages suivants :

  • Tests multiplateformes

  • Validation des attentes

  • Confiance dans votre automatisation

  • Cohérence et stabilité de l'infrastructure

  • Échouer tôt

Vous pouvez utiliser ce modèle pour exécuter des tests unitaires Serverspec pour le logiciel Apache et vérifier les paramètres d'autorisation des fichiers lors de la création d'Amazon Machine Image (AMI). Une AMI ne sera créée que si tous les scénarios de test sont réussis. Serverspec effectuera les tests suivants :

  • Le processus Apache est en cours d'exécution.

  • Le port Apache est en cours d'exécution.

  • Les fichiers et répertoires de configuration Apache existent à certains emplacements, etc.

  • Les autorisations de fichier sont correctement configurées.

Conditions préalables et limitations

Prérequis

  • Un compte AWS actif

  • AWS CodeBuild

  • AWS CodeCommit

  • AWS CodePipeline

  • Un cloud privé virtuel (VPC) avec un sous-réseau public

  • Installation de l'interface de ligne de commande AWS (AWS CLI) et de Git

Versions du produit

  • HashiCorp Version du packer : 1.6.6

  • Version Ruby : 2.5.1 et versions ultérieures

  • Version de l'interface de ligne de commande AWS : 1.18.185

Architecture

Architecture cible

  1. Lorsque vous transférez le code vers le CodeCommit référentiel, un événement Amazon CloudWatch Events engage le CodePipeline. Dans la première étape du pipeline, le code est extrait CodeCommit de.

  2. La deuxième étape du pipeline s'exécute CodeBuild, qui valide et crée le modèle Packer.

  3. Dans le cadre du fournisseur de build Packer, Packer installe les logiciels Apache et Ruby. Le fournisseur appelle ensuite un script shell qui utilise Serverspec pour tester unitaires le processus Apache, le port, les fichiers et les répertoires. Le post-processeur Packer écrit un fichier de notation d' JavaScript objet (JSON) avec une liste de tous les artefacts produits par Packer lors d'une exécution

  4. Enfin, une instance Amazon Elastic Compute Cloud (Amazon EC2) est créée à l'aide de l'ID AMI produit par Packer.

Outils

  • AWS CLI — Amazon Command Line Interface (AWS CLI) est un outil open source permettant d'interagir avec les services AWS à l'aide de commandes dans votre shell de ligne de commande.

  • Amazon CloudWatch Events — Amazon CloudWatch Events fournit un near-real-time flux d'événements système décrivant les modifications apportées aux ressources Amazon Web Services (AWS).

  • AWS CodeBuild — AWS CodeBuild est un service de création entièrement géré dans le cloud. CodeBuild compile votre code source, exécute des tests unitaires et produit des artefacts prêts à être déployés.

  • AWS CodeCommit — AWS CodeCommit est un service de contrôle de version hébergé par Amazon Web Services. Vous pouvez l'utiliser CodeCommit pour stocker et gérer de manière privée des actifs (tels que des documents, du code source et des fichiers binaires) dans le cloud.

  • AWS CodePipeline — AWS CodePipeline est un service de livraison continue que vous pouvez utiliser pour modéliser, visualiser et automatiser les étapes nécessaires à la publication de votre logiciel. Vous pouvez rapidement modéliser et configurer différentes étapes d'un processus de publication logiciel.

  • HashiCorp Packer — HashiCorp Packer est un outil permettant d'automatiser la création d'images de machine identiques à partir d'une configuration source unique.

  • Serverspec — Serverspec exécute des tests RSpec pour vérifier la configuration du serveur. Serverspec utilise Ruby et vous n'avez pas besoin d'installer de logiciel agent.

Code

Le code est joint. Le code utilise la structure suivante, avec trois répertoires et huit fichiers.

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

Épopées

TâcheDescriptionCompétences requises
Créez un utilisateur IAM.

Créez un utilisateur AWS Identity and Access Management (IAM) avec accès à la programmation et à la console. Pour plus d'informations, consultez la documentation AWS.

Développeur, administrateur système, DevOps ingénieur
Configurez les informations d'identification AWS.

Sur votre ordinateur local ou dans votre environnement, configurez les informations d'identification AWS pour l'utilisateur IAM. Pour obtenir des instructions, consultez la documentation AWS.

Développeur, administrateur système, DevOps ingénieur
Testez vos informations d'identification.

Pour valider les informations d'identification configurées, exécutez la commande suivante.

aws sts get-caller-identity --profile <profile>
Développeur, administrateur système, DevOps ingénieur
TâcheDescriptionCompétences requises
Créez un CodeCommit référentiel.

Pour créer un CodeCommit dépôt, exécutez la commande suivante.

aws codecommit create-repository --repository-name "<provide repository-name>" --repository-description "repository to unit test the infrastructure code"
Développeur, administrateur système, DevOps ingénieur
Rédigez des tests RSpec.

Créez des cas de test RSpec pour votre infrastructure. Pour plus d'informations, consultez la section Informations supplémentaires.

Développeur, DevOps ingénieur
Envoyez le code vers le CodeCommit référentiel.

Pour envoyer le code joint au CodeCommit référentiel, exécutez les commandes suivantes.

git clone <repository url> cp -R /tmp/<code folder>/ <repository_folder>/ git add . git commit -m"initial commit" git push
Développeur, administrateur système, DevOps ingénieur
Créez le pipeline.

Pour créer le pipeline, exécutez la commande AWS CLI qui se trouve dans la section Informations supplémentaires.

Développeur, administrateur système, DevOps ingénieur
Démarrez le pipeline.

Validez le code dans le CodeCommit référentiel. Toute validation dans le référentiel initiera le pipeline.

Développeur, administrateur système, DevOps ingénieur
Testez l'URL Apache.

Pour tester l'installation de l'AMI, utilisez l'URL suivante.

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

La page affichera un message « Bonjour d'Apache ».

Développeur, administrateur système, DevOps ingénieur

Ressources connexes

Informations supplémentaires

Écrire des tests RSpec

Le test RSpec pour ce modèle se trouve à l'adresse. <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

Vous pouvez ajouter vos propres tests /spec dans le répertoire.

Création du 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

Détails des paramètres

repository-name— Le nom du CodeCommit référentiel AWS

application-name— Le nom de ressource Amazon (ARN) est lié à ApplicationName ; indiquez n'importe quel nom

SecurityGroupId— Tout identifiant de groupe de sécurité de votre compte AWS dont le port 80 est ouvert

VpcId— L'ID de votre VPC

SubnetId— L'ID d'un sous-réseau public dans votre VPC

Region— La région AWS dans laquelle vous exécutez ce modèle

Keypair— Le nom de clé Secure Shell (SSH) pour se connecter à l'instance EC2

AccountId— Votre identifiant de compte AWS

Vous pouvez également créer un CodePipeline pipeline à l'aide de l'AWS Management Console et en transmettant les mêmes paramètres que ceux de la ligne de commande précédente.

Pièces jointes

Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip