Managing multiple AWS identities
I’m running multiple different project on AWS which was so much of a pain to use, as I often find myself having to use the identity of project-a together with the official amazon ec2 tools.
To help myself manage the multiple identities, I wote a set of bash functions, called:
aws_load <config-name>– loads configuration from config-nameec2ssh <instance-number-in-ec2din-list>– ssh’s into a given instance, with the root keyec2scp– a shorthand for scp -i <keyfile>
I keep the configuration files in the directory ~/amazon/conf/name.sh and keypairs in ~/amazon/keypairs/ but that should be obvious to change.
To change or load an identity, one simply calls the function from a shell prompt like so:
mads@workmads ~ % aws_load some-identity loaded certificate ... loaded /Users/mads/amazon/conf/some-identity.sh (...)
I hope someone finds this as useful as I do.
Functions (could be placed in .bashrc or .zshrc).
function aws_load { if [ -n "$1" ]; then ec2_configurations="$HOME/amazon/conf" ec2_keys="$HOME/amazon/keypairs" conf="$ec2_configurations/$1.sh" if [ -x "$conf" ]; then unset AMAZON_ID AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_CERT EC2_PRIVATE_KEY EC2_CERT AWS_KEYPAIR_NAME source $conf if [ -n "$AWS_KEYPAIR_NAME" ]; then export AWS_SSH_KEY="$ec2_keys/id_rsa_${AWS_KEYPAIR_NAME}-keypair" fi if [ -n "$AWS_CERT" ]; then export EC2_PRIVATE_KEY=~/.ec2/pk-$AWS_CERT.pem export EC2_CERT=~/.ec2/cert-$AWS_CERT.pem echo "loaded certificate $AWS_CERT" fi echo "loaded $conf ($AMAZON_ID)" else echo "configuration $conf not found (or not executable)" fi else echo "usage: aws_load <configuration name>" fi } function ec2ssh { if [ -n "$1" ]; then HOST="`ec2din | awk '/i-/ {print $4}' | tail +$1 | head -n 1`" ssh -i $AWS_SSH_KEY -l root ${HOST} else echo "Please write a number" fi } function ec2scp { scp -i $AWS_SSH_KEY $@ }
Configuration “file” template to be placed in ~/amazon/conf/<config-name>.sh:
#!/bin/sh export AMAZON_ID="" export AWS_ACCESS_KEY_ID="" export AWS_SECRET_ACCESS_KEY="" export AWS_CERT="" export AWS_KEYPAIR_NAME=""
Happy identity switching.