Eu recomendo a todos que vejam a postagem no blog de Mike Greiling Simplifique o desenvolvimento do OpsWorks com o Packer e seu repositório github opsworks-vm que ajuda você a zombar de toda a pilha do opsworks incluindo a instalação do opsworks agent para que você também possa testar receitas de implantação de aplicativos, várias camadas, várias instâncias ao mesmo tempo, etc. É extremamente impressionante.
Eu incluí toda a configuração necessária para preparar seu ambiente antes de usar o build do Packer Virtualbox de Mike Greiling.
Início rápido no Ubuntu 14.04
NOTA: Isso NÃO pode ser feito a partir de uma máquina virtual do Ubuntu, porque o VirtualBox não suporta virtualização aninhada de máquinas de 64 bits.
- Instale o ChefDK
-
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
-
- Instale o VirtualBox
-
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
-
- Instale o Vagrant
-
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
-
- Instale o Packer
-
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
-
- Crie a imagem do opsworks-vm virtualbox do Mike Greiling usando o Packer
-
mkdir ~/packer && cd ~/packer
-
git clone https://github.com/pixelcog/opsworks-vm.git
-
cd opsworks-vm
-
rake build install
- Isso instalará uma nova virtualbox vm em ~ / .vagrant.d / boxes / ubuntu1404-opsworks /
-
Para zombar de uma única instância do opsworks, crie um novo Vagrantfile assim:
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu1404-opsworks"
config.vm.provision :opsworks, type: 'shell', args: 'path/to/dna.json'
end
O caminho do arquivo dna.json
é definido em relação ao Vagrantfile e deve conter todos os dados JSON que você deseja enviar ao OpsWorks Chef.
Por exemplo:
{
"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 várias instâncias do opsworks e incluir camadas, consulte o Exemplo de "Primeiros passos" do AWS OpsWorks que inclui o stack.json abaixo.
Vagrantfile (para várias instâncias)
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 quem não está familiarizado com o vagrant, basta fazer um vagrant up
para iniciar a (s) instância (s). Então você pode modificar seu livro de receitas localmente e quaisquer alterações podem ser aplicadas re-executando o chef contra as instâncias existentes com vagrant provision.
Você pode fazer um vagrant destroy
e vagrant up
para começar do zero.