Base environment for Troposphere based CFN project environments
Project description
Cloudformation Environment Generator
What is Environmentbase?
Environmentbase extends troposphere, a library of wrapper objects for programmatically generating Cloudformation templates. Environmentbase embraces this model of automation development and extends it in several ways:
provides a configurable base layer of networking resources enabling you to focus on services instead of networking
provides a small but growing library of functional infrastructure patterns encapsulating industry best practices.
provides an extension mechanism to develop your own configurable, reusable ‘patterns’ using child-templates.
Moreover the Environmentbase platform allows for a service oriented development model, whereby small teams can build, test and deploy independent infrastructure automation templates, each focused on a specific service or function. These templates can be imported and associated to a ‘top-level’ (integration) template to centrally deploy and manage the full environment. The same template can be deployed in any region or AWS account to produce identical environments.
A public (/24) and a private subnet (/22) in three different Availability Zones
A highly available NAT instance per AZ
An S3 bucket configured to allow Amazon ELB (within the same region) and AWS CloudTrail to aggregate logs
This script queries the AWS VPC API to ensure that the AZ’s selected for deployment will allow subnets to be deployed to them (sometimes an issue in older accounts)
Modify the base network CIDR block and subnet size and count via parameters
Set prefixes for S3 key names for ELB and CloudTrail logging paths within the created bucket
Python Usage
from environmentbase.networkbase import NetworkBase
from environmentbase.patterns.bastion import Bastion
class MyEnvClass(NetworkBase):
'''
Class creates a VPC, common network components for the environment and a bastion host
'''
def create_hook(self):
# Do custom troposphere resource creation here
self.add_child_template(Bastion())
def deploy_hook(self):
# Do custom deploy steps here
if __name__ == '__main__':
MyEnvClass()
Overriding these two functions allows you to hook into the template generation and stack creation processes of environmentbase to inject the resources and deployment steps for your environment. This create_hook() will add a bastion host as a child stack of the environment. See the Development documentation for more detailed examples.
See here for more examples of using patterns.
Getting Started
To use this script, you must install some requirements (listed here)
python setup.py install
To use the script itself, you can run it directly from the command line:
environmentbase --help
You must have your AWS credentials configured as required by boto.
If you have the AWS CLI, you can run aws configure to generate the credentials files in the appropriate place. If you have already configured the AWS CLI, then no further steps are necessary.
You must ensure that the account you are authenticating with has at least the following permissions:
{"Statement": [ {"Action": ["ec2:DescribeAvailabilityZones",
"ec2:DescribeRegions"], "Effect": "Allow", "Resource": "*" }]}
This is required to perform the VPC lookups.
Once you have configured your credentials, you can run the generator as follows:
environmentbase init
This initialization command will generate two files: config.json and ami_cache.json. You may override the config filename with the --config-file parameter. This is useful when managing multiple stacks simultaneously.
You should now look at the generated config.json file and fill out at least the following fields:
You must ensure that the above two buckets exist and that you have access to write to them (they can be the same bucket). Also, the logging s3_bucket must have the correct access policy – it needs to allow the AWS ELB and Cloudtrail accounts access to upload their logging data. See a sample access policy here, just replace all instances of %%S3_BUCKET%% with your logging bucket name and attach the policy to your S3 bucket.
You may also edit the other fields to customize the environment to your liking. After you have configured your environment, run:
environmentbase create
This will generate the cloudformation templates using your updated config. It will save them both to S3 in your template bucket as well as locally. You can use the config template.include_timestamp setting to toggle whether or not a timestamp will be included the template filenames (This can be useful for keeping versioned templates, it is enabled by default). Then run:
environmentbase deploy
This will create a cloudformation stack from your generated template on AWS
You can use the config setting global.monitor_stack to enable real time tracking of the event stream from the stack deployment. You can then enable global.write_stack_outputs to automatically save all the stack outputs to a local file as they are brought up in AWS. You can also hook into the stack event stream with your own scripting using the stack_event_hook() function in environmentbase. Simply override this function in your controller and inject any real time deployment scripting.
You may run the following command to delete your stack when you are done with it:
environmentbase delete
See File Descriptions for a detailed explanation on the various files generated and consumed by EnvironmentBase
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file cfn-environment-base-0.9.19.tar.gz
.
File metadata
- Download URL: cfn-environment-base-0.9.19.tar.gz
- Upload date:
- Size: 84.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 33bee0ae5a704e8a27d24e9cf018f947bb3b305496328a3d107cee6e94fc659e |
|
MD5 | 29848b24df7726daedf19d1a42e9ad47 |
|
BLAKE2b-256 | a590b08032748b4f2cd04b64284130e783a6e8c3da4088fe939bfa5a38ec3409 |