-
Notifications
You must be signed in to change notification settings - Fork 5
Workflow
This gem makes a number of assumptions in order to enforce a specific workflow. First among them is the Opsworks stack naming convection. This will need to adhere to the following format:
PROJECT::ENV::REGION
If PROJECT will be comprised of multiple words, they should be joined with underscores, e.g.
my_awesome_rails_app::prod::us-east
So for example, if you have an Elastic cluster in dev and prod in us-east, and dev in us-west:
elastic::dev::us-east
elastic::dev::us-west
elastic::prod::us-east
The next workflow that must be conformed to is berkshelf management. In this context, that means a git repository that conforms to the following setup:
opsworks-project
Inside that repository, you will have branches that match each of your environments and regions.
So in our Elastic example, you would have the following setup:
- a git repository called opsworks-elastic
- branches in that repository called dev-us-east, dev-us-west and prod-us-east
In each of those branches, you should have the following:
- Berksfile
- stack.json (if you want to maintain the stack json using the
opzworks json
utility)
The Berksfile will look similar to the following. If you're familiar with Berkshelf, there's nothing new here:
source 'https://api.berkshelf.com'
# opsworks
cookbook 'apache2' , github: 'aws/opsworks-cookbooks' , branch: 'release-chef-11.10' , rel: 'apache2'
# external
#
cookbook 'lvm', '= 1.0.8'
cookbook 'sensu', '= 2.10.0'
cookbook 'runit', '= 1.5.10'
cookbook 'java', '= 1.29.0'
cookbook 'nodejs', '= 2.1.0'
cookbook 'elasticsearch', '= 0.3.13'
cookbook 'chef_handler', '= 1.1.6'
# mapzen wrappers
#
cookbook 'mapzen_sensu_clients', git: '[email protected]:mapzen/chef-mapzen_sensu_clients', tag: '0.12.0'
cookbook 'mapzen_elasticsearch', git: '[email protected]:mapzen/chef-mapzen_elasticsearch', tag: '0.16.3'
cookbook 'mapzen_logstash', git: '[email protected]:mapzen/chef-mapzen_logstash', tag: '0.13.1'
cookbook 'mapzen_graphite', git: '[email protected]:mapzen/chef-mapzen_graphite', tag: '0.6.0'
cookbook 'mapzen_pelias', git: '[email protected]:mapzen/chef-mapzen_pelias', tag: '0.34.2'
If we placed that Berkshelf file in opsworks-elastic, in the prod-us-east branch, we would run opzworks berks elastic::prod::us-east
, which would do the following:
- build the berkshelf locally
- push the resultant cookbook tarball to: s3://opzworks/elastic-prod-us-east/cookbooks.tgz
- run
update_custom_cookbook
on the stack (unless you pass the--no-update
flag)
Your stack should be configured to use a berkshelf from an S3 archive. The url will look as below:
https://s3.amazonaws.com/opzworks/elastic-prod-us-east/cookbooks.tgz
You'll need to set up an IAM user or users with permission to access the location.