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
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
![Developer workflow diagram showing CodeCommit, Event, CodePipeline, AWS CodeBuild, and AMI creation.](images/pattern-img/8092a64f-857c-4baa-b41c-a32c9098c4cf/images/eae48272-8e43-4e6c-aad8-e4fefe191fee.png)
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.
La deuxième étape du pipeline s'exécute CodeBuild, qui valide et crée le modèle Packer.
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
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âche | Description | Compé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.
| Développeur, administrateur système, DevOps ingénieur |
Tâche | Description | Compétences requises |
---|---|---|
Créez un CodeCommit référentiel. | Pour créer un CodeCommit dépôt, exécutez la commande suivante.
| 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.
| 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.
La page affichera un message « Bonjour d'Apache ». | Développeur, administrateur système, DevOps ingénieur |
Ressources connexes
Présentation de ServerSpec : Qu'est-ce que Serverspec et comment l'utilisons-nous chez Stelligent ?
(billet de blog externe) Développement de code d'infrastructure piloté par
les tests (article de blog externe) Création et test d'images avec HashiCorp Packer et ServerSpec
(article externe)
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.