junkb / tiny-ec2-bootstrap

A tiny EC2 instance bootstrapper that uses instance metadata

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Tiny EC2 Bootstrapper

This is designed to do the minimal amount of work required to bootstrap an EC2 instance based on the local settings assigned at boot time as well as the user's configured settings. This is, in-concept, similar to cloud-init but trades features and cloud platform support for small size and limited external dependencies.

Requirements

The most important feature of this bootstrapper is the very limited set of dependencies. In-fact, this works with just busybox -- provided the wget applet is built-in -- and resize2fs. The only required dependencies are:

  • bash-like shell (e.g. bash, dash, ash)
  • wget
  • resize2fs

Supported Features and Environments

cloud-init has support for many different cloud providers. This project only supports EC2; EC2 metadata service is a hard requirement of using this bootstrapper. All of the data for the supported features below is sourced from the EC2 instance metadata service which runs on every EC2 instance at IP 169.254.169.254.

cloud-init also has a very rich feature set with support for adding users, installing packages, and many other things. This bootstrap does not support those things. Instead it supports:

  • setting system hostname
  • installing the instance's SSH keys in the EC2 user's authorized_keys file
  • running any script-like user data (must start with #!)
  • disabling root and the EC2 user's password
  • resizing root partition to available disk space

These steps only run once. After the initial bootstrap the bootstrapper script is a no-op. To force the script to run again at boot time remove the file /var/lib/cloud/.bootstrap-complete and reboot the instance.

The default EC2 user is alpine; this can be overriden with a /etc/conf.d/tiny-ec2-bootstrap containing...

EC2_USER="otheruser"

The EC2 user must already exist in the AMI -- tiny-ec2-bootstrap will NOT add the user automatically.

User Data

User data is provided at instance boot time and can be any arbitrary string of data. The bootstrapper will consider any user data that begins with the ASCII characters #! to be a script. It will write the entire contents of the user data to /var/lib/cloud/user-data.sh, make the file executable, and execute the file piping any output to /var/log/cloud-bootstrap.log.

The user data script can do anything it pleases with the instance. It will be run as root and networking will be up. No other guarantees about system state are made at the point the script runs.

Assumptions

  • This was written for Alpine Linux; use on other distributions has not been tested.

  • The script is run by OpenRC.

About

A tiny EC2 instance bootstrapper that uses instance metadata

License:MIT License


Languages

Language:Shell 95.4%Language:Makefile 4.6%