Seit Monaten versuche ich, den besten Workflow zum Erstellen und Testen meiner AWS OpsWorks-Cookbooks vor dem lokalen Übertragen auf OpsWorks zu finden.
Nach vielen erfolglosen Versuchen fand ich einen Blogbeitrag von Mike Greiling und habe mich seitdem für eine Umgebung entschieden, die für mich gut funktioniert. Ich möchte das Setup/die Konfiguration teilen, da es viele bewegliche Teile gibt.
Ich ermutige jeden, der seine eigenen Build-/Testumgebungen für Chef hat,die speziell auf Opsworks-Kochbücher ausgerichtet sind, um auch hier Antworten zu posten – danke!!
Antwort1
Ich kann jedem nur wärmstens empfehlen, Mike Greilings Blogbeitrag zu lesen.Vereinfachen Sie die OpsWorks-Entwicklung mit Packerund sein GitHub-Repoopsworks-vm die Ihnen helfen, den gesamten Opsworks-Stack einschließlich der Installation des Opsworks-Agenten zu simulierenSie können also auch App-Bereitstellungsrezepte, mehrere Ebenen, mehrere Instanzen gleichzeitig usw. testen. Es ist äußerst beeindruckend.
Ich habe alle erforderlichen Setups beigefügt, um Ihre Umgebung vorzubereiten, bevor Sie Mike Greilings Packer Virtualbox-Build verwenden.
Schnellstart unter Ubuntu 14.04
HINWEIS: Dies kann NICHT von einer virtuellen Ubuntu-Maschine aus durchgeführt werden, da Virtualbox die verschachtelte Virtualisierung von 64-Bit-Maschinen nicht unterstützt.
- InstallierenChefDK
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
- InstallierenVirtualBox
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
- InstallierenLandstreicher
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
- InstallierenPacker
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
- Bauen Sie Mike Greiling'sopsworks-vmVirtualbox-Image mit Packer
mkdir ~/packer && cd ~/packer
git clone https://github.com/pixelcog/opsworks-vm.git
cd opsworks-vm
rake build install
- Dadurch wird eine neue Virtualbox-VM in ~/.vagrant.d/boxes/ubuntu1404-opsworks/ installiert.
Um eine einzelne Opsworks-Instanz zu simulieren, erstellen Sie eine neue Vagrant-Datei wie folgt:
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu1404-opsworks"
config.vm.provision :opsworks, type: 'shell', args: 'path/to/dna.json'
end
Der dna.json
Dateipfad wird relativ zur Vagrant-Datei festgelegt und sollte alle JSON-Daten enthalten, die Sie an OpsWorks Chef senden möchten.
Zum Beispiel:
{
"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]"
]
}
}
Um mehrere Opsworks-Instanzen zu simulieren und Ebenen einzubinden, siehe seineAWS OpsWorks „Erste Schritte“-BeispielDazu gehören diestapel.jsonunten.
Vagrantfile (für mehrere Instanzen)
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
stapel.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"
}
}
}
Für diejenigen, die mit Vagrant nicht vertraut sind: Führen Sie einfach ein aus, vagrant up
um die Instanz(en) zu starten. Anschließend können Sie Ihr Kochbuch lokal ändern und alle Änderungen können angewendet werden, indem Sie Chef erneut mit den vorhandenen Instanz(en) ausführen. vagrant provision.
Sie können ein vagrant destroy
und ausführen vagrant up
, um von vorne zu beginnen.