Durante meses he estado luchando por encontrar el mejor flujo de trabajo para crear y probar mis libros de cocina de AWS Opsworks localmente antes de pasar a Opsworks.
Después de muchos intentos estancados, encontré una publicación de blog de Mike Greiling y desde entonces me decidí por un entorno que funciona bien para mí. Me gustaría compartir la instalación/configuración porque hay muchas piezas en movimiento.
Animo a cualquiera que tenga sus propios entornos de construcción/prueba para chef,que están específicamente orientados a libros de cocina de opsworks, para publicar también respuestas aquí - ¡¡gracias!!.
Respuesta1
Recomiendo ALTAMENTE a todos que consulten la publicación del blog de Mike Greiling.Simplifique el desarrollo de OpsWorks con Packery su repositorio de githubopsworks-vm que le ayudan a simular toda la pila de opsworks, incluida la instalación del agente de opsworkspor lo que también puedes probar recetas de implementación de aplicaciones, múltiples capas, múltiples instancias al mismo tiempo, etc. Es extremadamente impresionante.
He incluido toda la configuración necesaria para preparar su entorno antes de usar la compilación Packer Virtualbox de Mike Greiling.
Inicio rápido en Ubuntu 14.04
NOTA: Esto NO se puede hacer desde una máquina virtual ubuntu porque virtualbox no admite la virtualización anidada de máquinas de 64 bits.
- InstalarChefDK
mkdir /tmp/packages && cd /tmp/packages
wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.8.1-1_amd64.deb
sudo dpkg -i chefdk_0.8.0-1_amd64.deb
cd /opt/chefdk/
chef verify
which ruby
echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile && source ~/.bash_profile
- InstalarVirtualBox
echo 'deb http://download.virtualbox.org/virtualbox/debian vivid contrib' > /etc/apt/sources.list.d/virtualbox.list
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
sudo apt-get update -qqy
sudo apt-get install virtualbox-5.0 dkms
- InstalarVagabundo
cd /tmp/packages
wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.4_x86_64.deb
sudo dpkg -i vagrant_1.7.4_x86_64.deb
vagrant plugin install vagrant-berkshelf
vagrant plugin install vagrant-omnibus
vagrant plugin list
- InstalarEnvasador
mkdir /opt/packer && cd /opt/packer
wget https://dl.bintray.com/mitchellh/packer/packer_0.8.6_linux_amd64.zip
unzip packer_0.8.6_linux_amd64.zip
echo 'PATH=$PATH:/opt/packer' >> ~/.bash_profile && source ~/.bash_profile
- Construye Mike Greilingopsworks-vmimagen de caja virtual usando Packer
mkdir ~/packer && cd ~/packer
git clone https://github.com/pixelcog/opsworks-vm.git
cd opsworks-vm
rake build install
- Esto instalará una nueva máquina virtual virtualbox en ~/.vagrant.d/boxes/ubuntu1404-opsworks/
Para burlarse de una única instancia de opsworks, cree un nuevo 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
ruta del archivo se establece en relación con Vagrantfile y debe contener cualquier dato 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 múltiples instancias de opsworks e incluir capas, consulte suEjemplo de introducción a AWS OpsWorksque incluye elpila.jsonabajo.
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
pila.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 hagan un vagrant up
para iniciar la(s) instancia(s). Luego, puede modificar su libro de cocina localmente y cualquier cambio se puede aplicar volviendo a ejecutar chef en las instancias existentes con vagrant provision.
Puede hacer un vagrant destroy
y vagrant up
para comenzar desde cero.