Prototype example demonstrating how to do last-mile customizations via bootstrap lambda defined in a cloudformation template. The basic approach is to define a custom resource compatible lambda function that takes in information about the created resources (beanstalk env name, e.g) in order to find those resources through the aws API and apply any custom configurations. The example applies a custom scale-up/down policy that triggers on an SQS metric (available messages), which is not available from beanstalk out of the box.
You'll need an AWS account set up and activated credentials with Admin privileges (this example doesn't engage meaningfully with permissions - it's just meant to be deployed and torn down).
Since beanstalk requires a URL for artifacts, you'll need to set up an S3 bucket that will be referenced later.
Finally, the deploy script (and cleanup command below) requires the awscli, which can be installed with pip:
$> pip install awscli
To deploy the stack, simply run:
$> ./infra/deploy.sh my_artifact_bucket
This will create a stack called lambda-bootstrap-stack
in your AWS account and deploy a dummy beanstalk environment (and lambda).
When you're done inspecting the results, you can clean up by running:
$> aws cloudformation delete-stack --stack-name lambda-bootstrap-stack