Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Use Serverspec para desarrollar código de infraestructura basado en pruebas
Creado por Sushant Jagdale (AWS)
Entorno: PoC o piloto | Tecnologías: Infraestructura DevOps; Nube híbrida | Servicios de AWS: Amazon EC2; AWS; AWS CodeBuild CodeDeploy |
Resumen
Este patrón muestra cómo usar Serverspec
Serverspec ayuda a refactorizar el código de infraestructura. Serverspec le permite escribir pruebas de RSpec para comprobar la instalación de distintos paquetes y software, ejecutar comandos, comprobar procesos y puertos en ejecución, comprobar la configuración de permisos de los archivos, etc. Serverspec comprueba si sus servidores están configurados correctamente. Solo tiene que instalar Ruby en sus servidores. No es necesario instalar ningún software de agente.
La infraestructura basada en pruebas proporciona los siguientes beneficios:
Actualizaciones entre plataformas
Validación de las expectativas
Confianza en su automatización
Coherencia y estabilidad de la infraestructura
Errores tempranos
Puede usar este patrón para ejecutar pruebas unitarias de Serverspec en el software Apache y comprobar la configuración de permisos de los archivos durante la creación de imágenes de máquina de Amazon (AMI). Solo se creará la AMI si se superan todos los casos de prueba. Serverspec realizará las siguientes pruebas:
El proceso de Apache se está ejecutando.
El puerto de Apache se está ejecutando.
Los archivos y directorios de configuración de Apache existen en sus ubicaciones, etc.
Los permisos de los archivos están configurados correctamente.
Requisitos previos y limitaciones
Requisitos previos
Una cuenta de AWS activa
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
Una nube privada virtual (VPC) con una subred pública
Instalación de la Interfaz de la línea de comandos de AWS (AWS CLI) y Git
Versiones de producto
HashiCorp Versión Packer: 1.6.6
Versión 2.5.1 y posteriores
AWS CLI versión 1.18.185
Arquitectura
Arquitectura de destino
![](images/pattern-img/8092a64f-857c-4baa-b41c-a32c9098c4cf/images/eae48272-8e43-4e6c-aad8-e4fefe191fee.png)
Cuando insertas el código en el CodeCommit repositorio, un evento de Amazon CloudWatch Events activa el CodePipeline. En la primera etapa de la canalización, se obtiene el código de. CodeCommit
Se ejecuta la segunda etapa de canalización CodeBuild, que valida y crea la plantilla de Packer.
Como parte del aprovisionador de compilaciones de Packer, Packer instala el software Ruby y Apache. A continuación, el aprovisionador llama a un script de intérprete de comandos que usa Serverspec para realizar pruebas unitarias del proceso, el puerto, los archivos y los directorios de Apache. El postprocesador Packer escribe un archivo de notación de JavaScript objetos (JSON) con una lista de todos los artefactos producidos por Packer durante una ejecución
Por último, se crea una instancia de Amazon Elastic Compute Cloud (Amazon EC2) con el ID de AMI producido por Packer.
Herramientas
AWS CLIla linterfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su intérprete de comandos de línea de comandos.
Amazon CloudWatch Events: Amazon CloudWatch Events ofrece una near-real-time secuencia de eventos del sistema que describen los cambios en los recursos de Amazon Web Services (AWS).
AWS CodeBuild: AWS CodeBuild es un servicio de compilación en la nube totalmente gestionado. CodeBuild compila su código fuente, ejecuta pruebas unitarias y produce artefactos listos para su implementación.
AWS CodeCommit: AWS CodeCommit es un servicio de control de versiones hospedado por Amazon Web Services. Puede utilizarlo CodeCommit para almacenar y gestionar de forma privada activos (como documentos, código fuente y archivos binarios) en la nube.
AWS CodePipeline: AWS CodePipeline es un servicio de entrega continua que puede utilizar para modelar, visualizar y automatizar los pasos necesarios para lanzar su software. Puede diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software.
HashiCorp Packer
: HashiCorp Packer es una herramienta para automatizar la creación de imágenes de máquinas idénticas a partir de una configuración de fuente única. Serverspec
: Serverspec ejecuta pruebas de RSpec para comprobar la configuración del servidor. Serverspec usa Ruby, y no es necesario instalar el software del agente.
Código
El código está adjunto. El código emplea la siguiente estructura, con tres directorios y ocho archivos.
├── 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)
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Cree un usuario de IAM. | Cree un usuario de AWS Identity and Access Management (usuario de IAM) con acceso de consola y programático. Para obtener más información, consulte la documentación de AWS. | Desarrollador, administrador de sistemas, ingeniero DevOps |
Configurar credenciales de AWS. | En su computadora local o en su entorno, configure las credenciales de AWS para el usuario de IAM. Para obtener instrucciones, consulte la documentación de AWS. | Desarrollador, administrador de sistemas, DevOps ingeniero |
Pruebe sus credenciales. | Para validar las credenciales configuradas, ejecute el siguiente comando.
| Desarrollador, administrador de sistemas, DevOps ingeniero |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Cree un CodeCommit repositorio. | Para crear un CodeCommit repositorio, ejecute el siguiente comando.
| Desarrollador, administrador de sistemas, DevOps ingeniero |
Escriba pruebas de RSpec. | Cree casos de prueba de RSpec para su infraestructura. Para obtener más información, consulte la sección Información adicional. | Desarrollador, DevOps ingeniero |
Envía el código al CodeCommit repositorio. | Para enviar el código adjunto al CodeCommit repositorio, ejecuta los siguientes comandos.
| Desarrollador, administrador de sistemas, DevOps ingeniero |
Cree la canalización. | Para crear el proceso, ejecute en la CLI de AWS el comando que encontrará en la sección Información adicional. | Desarrollador, administrador de sistemas, DevOps ingeniero |
Iniciar la canalización. | Envíe el código al CodeCommit repositorio. La confirmación en el repositorio iniciará el proceso. | Desarrollador, administrador de sistemas, DevOps ingeniero |
Pruebe la URL de Apache. | Para probar la instalación de la AMI, use la siguiente URL.
La página mostrará un mensaje de “Hola desde Apache”. | Desarrollador, administrador de sistemas, DevOps ingeniero |
Recursos relacionados
Introducción a ServerSpec: ¿Qué es Serverspec y cómo lo utilizamos en Stelligent?
(entrada de blog externa) Desarrollo de código de infraestructura basado en pruebas
(publicación de blog externa) Creación y prueba de imágenes con HashiCorp Packer y ServerSpec
(artículo externo)
Información adicional
Escriba pruebas de RSpec
La prueba RSpec para este patrón se encuentra en <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
Puede añadir sus propias pruebas al directorio /spec
.
Creación de la canalización
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
Detalles de los parámetros
repository-name
— El nombre del CodeCommit repositorio de AWS
application-name
: Los nombres de recurso de Amazon (ARN) están vinculados con ApplicationName
; proporcione cualquier nombre
SecurityGroupId
: Cualquier ID de grupo de seguridad de su cuenta de AWS que tenga el puerto 80 abierto
VpcId
: ID de su VPC
SubnetId
: ID de una subred pública de su VPC
Region
: Región de AWS en la que se ejecuta este patrón
Keypair
: Nombre de la clave de Secure Shell (SSH) para iniciar sesión en la instancia de EC2
AccountId
: Su ID de cuenta de AWS
También puede crear una CodePipeline canalización mediante la consola de administración de AWS y pasar los mismos parámetros que estaban en la línea de comandos anterior.
Conexiones
Para acceder al contenido adicional asociado a este documento, descomprima el archivo: attachment.zip