Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

I'm developing Puppet classes that implement an AWS "arbiter" and defined types for EC2 & RDS instances that wrap around the puppetlabs/aws resources. The intent is for the arbiter to be an EC2 instance running in the AWS availability zone where resources are to be managed; it's assigned an IAM role that grants it admin permissions for the resources required.

My current arbiter is just a t2.micro Linux instance classified with the prerequisites specified in the AWS module docs:

# install required ruby gems for Puppetlabs/aws
package { ['aws-sdk-core','retries']:
  ensure   => present,
  provider => 'pe_gem',
}

For defining the classes that manage AWS infrastructure (which are assigned to the arbiter) I'm experimenting with a "stacks & blocks" paradigm that mirrors the roles & profiles pattern. In the blocks are resource definitions for infrastructure requirements; stacks include all the blocks required to implement an application. Stacks are the classes assigned to the arbiter. It's an attempt to control dependencies in the same way that roles & profiles does, but in a separate way since some roles may depend on stacks.

The only quirk I've found so far is that the stacks assigned to the arbiter always result in "change" status during agent runs if it successfully deployed the stack, even after the managed AWS resources have been created and are running.