When working with AWS EC2, it’s often handy to be able to reference certain information about an instance. The obvious solution is the AWS Metadata service, accessible with a simple cURL command. For example, to get the private IP address of an instance:
curl -s http://169.254.169.254/latest/meta-data/local-ipv4 220.127.116.11
Since I hate writing boilerplate code, and don’t need to make an HTTP request each time I want to know something about my environment, I put together a Docker image that fetches most of the available metadata and outputs environment variable settings. Also, I’ve been itching to write something in Go.
My primary use case is to create /etc/aws.env when a new CoreOS instance starts, but this should work on any system with systemd. To do this, aws-env.service should be installed and configured to run at startup. One way to do this is via cloud-config (EC2 User Data):
#cloud-config coreos: units: - name: aws-env.service command: start enable: yes content: | [Unit] # Contents from 'aws-env.service' go here
Alternatively, you can use it with eval:
eval $(docker run --rm -t cmattoon/aws-env)