몇 달 동안 저는 opsworks를 실행하기 전에 로컬에서 aws opsworks 요리책을 구축하고 테스트하기 위한 최상의 워크플로를 찾기 위해 고군분투했습니다.
많은 지연된 시도 끝에 Mike Greiling의 블로그 게시물을 찾았고 이후 나에게 잘 맞는 환경에 정착했습니다. 움직이는 부분이 많아서 설정/구성을 공유하고 싶습니다.
나는 셰프를 위한 자신만의 빌드/테스트 환경을 갖고 있는 모든 사람을 격려합니다.opsworks 요리책에 특별히 맞춰진 것입니다., 여기에 답변을 게시하려면 -- 감사합니다!!.
답변1
Mike Greiling의 블로그 게시물을 확인하는 것이 좋습니다.Packer로 OpsWorks 개발 단순화그리고 그의 github 레포opsworks-vm opsworks 에이전트 설치를 포함하여 전체 opsworks 스택을 모의하는 데 도움이 됩니다.따라서 앱 배포 레시피, 다중 레이어, 다중 인스턴스 등을 동시에 테스트할 수도 있습니다. 이는 매우 인상적입니다.
Mike Greiling의 Packer Virtualbox 빌드를 사용하기 전에 환경을 준비하는 데 필요한 모든 설정을 포함했습니다.
Ubuntu 14.04의 빠른 시작
참고: Virtualbox는 64비트 시스템의 중첩된 가상화를 지원하지 않기 때문에 우분투 가상 머신에서는 이 작업을 수행할 수 없습니다.
- 설치하다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
- 설치하다버추얼박스
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
- Mike Greiling의 빌드opsworks-vmPacker를 사용하는 virtualbox 이미지
mkdir ~/packer && cd ~/packer
git clone https://github.com/pixelcog/opsworks-vm.git
cd opsworks-vm
rake build install
- 그러면 ~/.vagrant.d/boxes/ubuntu1404-opsworks/에 새로운 virtualbox vm이 설치됩니다.
단일 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을 기준으로 설정되며 OpsWorks Chef로 보내려는 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 "시작하기" 예여기에는 다음이 포함됩니다.스택.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
스택.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.
You can do a vagrant destroy
및 vagrant up
to start from 처음부터 기존 인스턴스에 대해 Chef를 다시 실행하여 모든 변경 사항을 적용할 수 있습니다 .