When you start for the first (or even second) time with AWS, it is a bit tricky to get your head around all the bits and bolts than need to be connected together. If on top of this you try to work with AWS in Beijing from outside China, the web GUI makes your work even harder because of slowness or even timeouts.
This scripts set up for you a full set of resources (vpc, route table, security group, subnet, internet gateway, instance with the relevant associations and attachments) for easy testing or bootstrapping of your infrastructure.
It is mostly meant as a testing help, so it does not handle all the options possible, but I find it invaluable to get started. You just need the AWS basics:
- A keypair,
- Your credentials properly setup,
- boto3 available,
- The id of the ami you want to use,
and it will do the rest for you. You need to provide a tag name (defaults to ‘roles’) and value, and all resources will be created and located via this tag, to allow for easy spawning and tearing down.
usage: fullspawn.py3 [-h] [--tag TAG] [--up | --down] [--wet | --dry] [--log {DEBUG,INFO,WARNING,ERROR,CRITICAL}] [--cidr CIDR] [--ami AMI] [--keypair KEYPAIR] [--profile PROFILE] [--instance INSTANCE] role Spawns a full AWS self-contained infrastructure. positional arguments: role Tag value used for marking and fetching resources. optional arguments: -h, --help show this help message and exit --tag TAG, -t TAG Tag name used for marking and fetching resources. (default: roles) --up, -u Creates a full infra. (default: up) --down, -d Destroys a full infra. (default: up) --wet, -w Actually performs the action. (default: dry) --dry Only shows what would be done, not doing anything. (default: dry) --log {DEBUG,INFO,WARNING,ERROR,CRITICAL} Verbosity level. (default: WARNING) --cidr CIDR The network range for the VPC, in CIDR notation. For example, 10.0.0.0/16 (default: 10.0.42.0/28) --ami AMI The AMI id for your instance. (default: ami-33734044) --keypair KEYPAIR A keypair aws knows about. (default: yourkey) --profile PROFILE Profile to use for credentials. Will use AWS_PROFILE environment variable if set. (default: default) --instance INSTANCE Instance type. (default: t2.micro)
For instance:
# Let's see what would happen when creating a full infra... ./fullspawn.py3 -t tag --up --dry testing # Look good let's do it. ./fullspawn.py3 -t tag --up --wet testing # oops, this was a stupid tag name ./fullspawn.py3 -t tag --down --wet testing
You probably want to have a look at some variables inside the script, setting a few defaults which might not be relevant for you. I am thinking about the ami (AMI), the keypair (KEYPAIR) and the ingress rules (INGRESS) all defined before the argparse calls.
The code is available on github.
Enjoy!