chef aws-opsworks

chef - ¿Cómo está la gente probando libros de cocina opsworks?



aws-opsworks (6)

Tengo un despliegue bastante complejo de instancias configuradas dinámicamente de una aplicación ferroviaria en nginx que utiliza pasajeros para los que actualmente uso Capistrano. Estoy tratando de automatizar todo el proceso en Opsworks desde la creación de la pila, las capas, las instancias y el despliegue dinámico de aplicaciones. Ninguna de las recetas de Opsworks existentes se acerca a lo que necesito, así que comencé mis propios libros de cocina personalizados. Estoy tratando de probarlos usando Test-Kitchen y Vagrant, pero los libros de cocina de Opsworks tienen demasiadas dependencias personalizadas para ser usadas localmente. Así que parece que estoy atascado, ya sea reinventando la rueda usando solo mis propias recetas que no dependen de los libros de cocina de Opsworks o intentando probar mis libros de cocina en AWS, que es lento y costoso.

¿Alguien está haciendo algún desarrollo de libro de recetas personalizado en Opsworks y si es así, cómo lo está probando? ¿Está utilizando libros de cocina de la comunidad y, si es así, qué tan dolorosos han sido al comenzar a trabajar en Opsworks?



Estamos utilizando Opsworks con una gran cantidad de libros de cocina personalizados, y vagrant también. Si bien la cobertura de prueba está lejos de ser perfecta, funciona bastante bien, y también adapta los libros de cocina de la comunidad. Nuestro repositorio de libros de cocina es público: https://github.com/till/easybib-cookbooks

Los bits interesantes de este repo son:

Navegar por nuestros libros de cocina debería darle algunos consejos más para sus preguntas. Probamos nuestros libros de cocina con Travis y no probamos en absoluto los libros de cocina de opsworks. Aunque debo tener en cuenta que actualmente estoy jugando con algunas ideas de cómo integrarlas en nuestras pruebas, ya que sin sus proveedores, probar nuestro libro de recetas de implementación es prácticamente imposible.


Hay muchas sugerencias útiles en esta página, pero recomendaría ALTAMENTE a todos, eche un vistazo al blog de Mike Greiling Simplifique OpsWorks Development With Packer y su github repo opsworks-vm que le ayudan a burlarse de toda la pila de opsworks, incluida la instalación del agente de opsworks para que también pueda probar las recetas de implementación de la aplicación, varias capas, varias instancias al mismo tiempo, etc. Es extremadamente impresionante.

Inicio rápido en Ubuntu 14.04

NOTA: Esto NO se puede hacer desde una máquina virtual de ubuntu porque virtualbox no admite la virtualización anidada de máquinas de 64 bits.

  1. Instalar ChefDK
    1. mkdir /tmp/packages && cd /tmp/packages
    2. wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.8.1-1_amd64.deb
    3. sudo dpkg -i chefdk_0.8.0-1_amd64.deb
    4. cd /opt/chefdk/
    5. chef verify
    6. which ruby
    7. echo ''eval "$(chef shell-init bash)"'' >> ~/.bash_profile && source ~/.bash_profile
  2. Instalar VirtualBox
    1. echo ''deb http://download.virtualbox.org/virtualbox/debian vivid contrib'' > /etc/apt/sources.list.d/virtualbox.list
    2. wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
    3. sudo apt-get update -qqy
    4. sudo apt-get install virtualbox-5.0 dkms
  3. Instalar Vagrant
    1. cd /tmp/packages
    2. wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.4_x86_64.deb
    3. sudo dpkg -i vagrant_1.7.4_x86_64.deb
    4. vagrant plugin install vagrant-berkshelf
    5. vagrant plugin install vagrant-omnibus
    6. vagrant plugin list
  4. Instala Packer
    1. mkdir /opt/packer && cd /opt/packer
    2. wget https://dl.bintray.com/mitchellh/packer/packer_0.8.6_linux_amd64.zip
    3. unzip packer_0.8.6_linux_amd64.zip
    4. echo ''PATH=$PATH:/opt/packer'' >> ~/.bash_profile && source ~/.bash_profile
  5. Cree la imagen de la opsworks-vm virtual de opsworks-vm Mike Greiling usando Packer
    1. mkdir ~/packer && cd ~/packer
    2. git clone https://github.com/pixelcog/opsworks-vm.git
    3. cd opsworks-vm
    4. rake build install
    5. Esto instalará un nuevo virtualbox vm en ~ / .vagrant.d / boxes / ubuntu1404-opsworks /

Para burlarse de una sola instancia de opsworks, cree un nuevo archivo Vagrantfile así:

Vagrant.configure("2") do |config| config.vm.box = "ubuntu1404-opsworks" config.vm.provision :opsworks, type: ''shell'', args: ''path/to/dna.json'' end

La dna.json archivo dna.json se establece en relación con el Vagrantfile y debe contener todos los datos JSON que desee enviar a OpsWorks Chef.

Por ejemplo:

{ "deploy": { "my-app": { "application_type": "php", "scm": { "scm_type": "git", "repository": "path/to/my-app" } } }, "opsworks_custom_cookbooks": { "enabled": true, "scm": { "repository": "path/to/my-cookbooks" }, "recipes": [ "recipe[opsworks_initial_setup]", "recipe[dependencies]", "recipe[mod_php5_apache2]", "recipe[deploy::default]", "recipe[deploy::php]", "recipe[my_custom_cookbook::configure]" ] } }

Para simular varias instancias de opsworks e incluir capas, vea su Ejemplo de "Introducción" de AWS OpsWorks que incluye el stack.json continuación.

Vagrantfile (para múltiples instancias)

Vagrant.configure("2") do |config| config.vm.box = "ubuntu1404-opsworks" # Create the php-app layer config.vm.define "app" do |layer| layer.vm.provision "opsworks", type:"shell", args:[ ''ops/dna/stack.json'', ''ops/dna/php-app.json'' ] # Forward port 80 so we can see our work layer.vm.network "forwarded_port", guest: 80, host: 8080 layer.vm.network "private_network", ip: "10.10.10.10" end # Create the db-master layer config.vm.define "db" do |layer| layer.vm.provision "opsworks", type:"shell", args:[ ''ops/dna/stack.json'', ''ops/dna/db-master.json'' ] layer.vm.network "private_network", ip: "10.10.10.20" end end

stack.json

{ "opsworks": { "layers": { "php-app": { "instances": { "php-app1": {"private-ip": "10.10.10.10"} } }, "db-master": { "instances": { "db-master1": {"private-ip": "10.10.10.20"} } } } }, "deploy": { "simple-php": { "application_type": "php", "document_root": "web", "scm": { "scm_type": "git", "repository": "dev/simple-php" }, "memcached": {}, "database": { "host": "10.10.10.20", "database": "simple-php", "username": "root", "password": "correcthorsebatterystaple", "reconnect": true } } }, "mysql": { "server_root_password": "correcthorsebatterystaple", "tunable": {"innodb_buffer_pool_size": "256M"} }, "opsworks_custom_cookbooks": { "enabled": true, "scm": { "repository": "ops/cookbooks" } } }

Para aquellos que no están familiarizados con vagrant, simplemente haga un vagrant up para iniciar la (s) instancia (s). Luego, puede modificar su libro de cocina localmente y cualquier cambio puede aplicarse al volver a ejecutar chef en contra de las instancias existentes con vagrant provision. Puedes hacer un vagrant destroy y vagrant up comenzar desde cero.


Los libros de cocina de Opsworks se basan en sus cajas personalizadas, por lo que obtener un VM local donde pueda ejecutar sus libros de cocina junto con el suyo es un desafío.

Afortunadamente, su caja de Ubuntu ha sido recreada por este proyecto. https://github.com/wwestenbrink/vagrant-opsworks

Sobre esta base, he creado un entorno local desagradable que ejecuta los libros de cocina de Opsworks y uno de los míos. https://github.com/erupenkman/opsworks-example

Con esto, puede probar en un entorno local casi idéntico antes de la implementación.


Opsworks ahora es compatible con Chef 11.10 y Berkshelf ( http://berkshelf.com/ ) para administrar las dependencias, lo que facilita el uso de libros de cocina personalizados. mucho. más fácil.

Estoy muy contento con Test Kitchen ( https://github.com/test-kitchen/test-kitchen ) con Vagrant & Chef Solo para las pruebas locales.

Además, puede ejecutar manualmente recetas particulares en una pila de Opsworks desde la página de configuración de la pila. Eche un vistazo aquí: http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-manual.html .

También puede ejecutar pruebas de libros de cocina durante una implementación de Opsworks con algunos JSON personalizados: http://docs.aws.amazon.com/opsworks/latest/userguide/troubleshoot-debug-test.html


Pude resolver este problema usando Chef + Kitchen + Vagrant

Aquí está mi envoltorio: https://github.com/elitechance/opsworks-cookbooks-wrapper

A continuación se muestra cómo probar

git clone https://github.com/elitechance/opsworks-cookbooks-wrapper.git

git clone https://github.com/aws/opsworks-cookbooks.git

cd opsworks-cookbooks-wrapper

cp .kitchen.sample.yml .kitchen.yml

cp Berksfile.sample Berksfile

cp metadata.sample.rb metadata.rb

El último comando simulará las recetas de instalación de OpsWorks NodeJs, consulte .kitchen.sample.yml para obtener más información.

$ chef exec kitchen setup

Errores conocidos

La primera vez que ejecute la $ chef exec kitchen setup , encontrará errores que dicen:

Controladores en ejecución: [2016-04-08T17: 08: 34 + 00: 00] ERROR: Ejecución de controladores de excepciones Los controladores en ejecución completan [2016-04-08T17: 08: 34 + 00: 00] ERROR: Los controladores de excepciones completaron el Cliente Chef. 43 recursos actualizados en 01 minutos 02 segundos [2016-04-08T17: 08: 34 + 00: 00] FATAL: Stacktrace descargado a /tmp/kitchen/cache/chef-stacktrace.out [2016-04-08T17: 08: 34 +00: 00] FATAL: proporcione el contenido del archivo stacktrace.out si presenta un informe de error [2016-04-08T17: 08: 34 + 00: 00] ERROR: ruby_blockFallback for remote_file [/tmp/rubygems-2.2 .2.tgz] tenía un error: NoMethodError: remote_file / tmp / rubygems-2.2.2.tgz tenía un error: NoMethodError: método indefinido `to_sym ''para [: create]: Array [2016-04-08T17: 08: 34 +00: 00] FATAL: Chef :: Excepciones :: ChildConvergeError: El proceso de ejecución del Chef salió sin éxito (código de salida 1)

Sólo ejecuta de nuevo:

$ chef exec kitchen setup