何ヶ月もの間、opsworksにプッシュする前に、ローカルでawsopsworksクックブックを構築およびテストするための最適なワークフローを見つけるのに苦労してきました。
何度も行き詰まった試みの後で、Mike Greilingによるブログ投稿を見つけ、それ以来、私にとってうまく機能する環境に落ち着きました。動く部分がたくさんあるので、セットアップ/構成を共有したいと思います。
シェフ用の独自のビルド/テスト環境を持っていて、特にopsworksクックブックを対象としている人は、ここにも回答を投稿することをお勧めします- -ありがとう!!。
Mike Greilingのブログ投稿 Simplify OpsWorks Development With Packer と彼のgithubリポジトリ opsworks-vmをチェックすることを強くお勧めします。 opsworksエージェントのインストールを含むopsworksスタック全体をモックして、アプリのデプロイレシピ、複数のレイヤー、複数のインスタンスなどを同時にテストすることもできます。これは非常に印象的です。
MikeGreilingのPackerVirtualboxビルドを使用する前に、環境を準備するために必要なすべてのセットアップを含めました。
注:virtualboxは64ビットマシンのネストされた仮想化をサポートしていないため、これはubuntu仮想マシンからは実行できません。
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
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
_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
_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
_mkdir ~/packer && cd ~/packer
_git clone https://github.com/pixelcog/opsworks-vm.git
_cd opsworks-vm
_rake build install
_単一のopsworksインスタンスをモックするには、次のように新しいVagrantfileを作成します。
_Vagrant.configure("2") do |config|
config.vm.box = "ubuntu1404-opsworks"
config.vm.provision :opsworks, type: 'Shell', args: 'path/to/dna.json'
end
_
_dna.json
_ファイルパスはVagrantfileを基準にして設定され、OpsWorksChefに送信するJSONデータが含まれている必要があります。
例えば:
_{
"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]"
]
}
}
_
複数のopsworksインスタンスをモックしてレイヤーを含めるには、彼の AWS OpsWorks "Getting Started" Example を参照してください。これには以下の stack.json が含まれます。
Vagrantfile(複数のインスタンス用)
_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"
}
}
}
_
Vagrantに慣れていない場合は、_vagrant up
_を実行してインスタンスを開始します。次に、クックブックをローカルで変更し、_vagrant provision.
_を使用して既存のインスタンスに対してchefを再実行することで、変更を適用できます。_vagrant destroy
_および_vagrant up
_を最初から実行できます。 。