On 23/07/2012 19:37, John Martinez wrote:
We also use CloudFormation with Autoscaler for deploying Hosted Chef
managed instances in AWS. The biggest issues are:
- Chef bootstrap, since you can’t use any of the knife bootstrap
methods to launch instances
- Dealing with the Chef validation key
- Dealing with encrypted data bag secrets
We use a combination of EC2 instance metadata (user-data), custom
bootstrap scripts and policy-secured S3 buckets to make this all work.
I’d be interested to here how you do ongoing application deployments to
your application servers. We’ve developed our template to the point the
initial deployment works well and scales. Looking at deploying new
versions of our application code to our server we’ve come up with
suspending autoscaling on our app servers, deploying using capistrano
with the capify_cloud plugin (previously capify_ec2), then resuming
scaling. This prevents the race condition where new instances are
started mid deployment and we’d get a mix of code versions deployed.
We’ve looked at a few alternatives such as starting a new stack and
switching DNS entries to that, however we’re using RDS which is part of
the stack, so we’d lose data. We’ve also looked at creating new auto
scaling groups and launch configs within the template and updating the
stack with the new template, but there’s no way to enforce (that I can
see) that the new AS group is up and running and attached to the ELB
before the old one is removed.
The solution we’ve got works, however I don’t think it’s very slick and
I’d like to reduce the moving parts where possible.