Overview
This is a faithful translation of the excellent tutorial by Jeff Hunter to BASH script. However, the result is so useful that I felt it is meaningful to share. 🙂
If you are patient enough, you should read the tutorial for all the gory details. If you are not, just follow the steps below. If you are lucky, you can build a CentOS 6 AMI in a hurry.
Pre-requisites
-
- CentOS build host: Should have at 10GB extra space
- Install host tools:
yum -y install e2fsprogs ruby java-1.6.0-openjdk unzip MAKEDEV
-
- Install AWS tools:
# mkdir -p /opt/ec2/tools
# curl -o /tmp/ec2-api-tools.zip http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip
# unzip /tmp/ec2-api-tools.zip -d /tmp
# cp -r /tmp/ec2-api-tools-*/* /opt/ec2/tools
# curl -o /tmp/ec2-ami-tools.zip http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.zip
# unzip /tmp/ec2-ami-tools.zip -d /tmp
# cp -rf /tmp/ec2-ami-tools-*/* /opt/ec2/tools
The script
You can find the script here.
Note you need to configure the following parameters at the beginning the script. Most certainly you need to supply EC2_PRIVATE_KEY, EC2_CERT, AWS_ACCOUNT_NUMBER, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, EC2_KEYPAIR, EC2_SECURITY_GROUP.
export JAVA_HOME=/usr export EC2_HOME=/opt/ec2/tools #export EC2_URL=https://ec2.amazonaws.com export EC2_URL=https://ec2.us-west-1.amazonaws.com export EC2_PRIVATE_KEY=/home/jsun/files/aws-nsp-x509-pk-4USZFXUMLDXAV5Q3BNUUYPURLA6VZWRH.pem export EC2_CERT=/home/jsun/files/aws-nsp-x509-cert-4USZFXUMLDXAV5Q3BNUUYPURLA6VZWRH.pem export AWS_ACCOUNT_NUMBER=XXXXXXXXXX export AWS_ACCESS_KEY_ID=XXXXXXXXXX export AWS_SECRET_ACCESS_KEY=XXXXXXXXXX export AWS_AMI_BUCKET=vyatta-ami/x86-64/Linux/CentOS/6.5 IMG_BASE_NAME=centos-6-x86_64 S3_REGION=us-west-1 AMI_PVGRUB=aki-f77e26b2 EC2_KEYPAIR=XXXX EC2_SECURITY_GROUP=XXXX
Also note you may need to change AMI_PVGRUB depending on the region and architecture. Refer to the tutorial for details. Here is a list of them for us-west-1:
root@localhost ~]# ec2-describe-images --owner amazon --region us-west-1 | grep "amazon\/pv-grub-hd0" | awk '{ print $1, $2, $3, $5, $7 }' IMAGE aki-960531d3 amazon/pv-grub-hd00_1.04-i386.gz available i386 IMAGE aki-920531d7 amazon/pv-grub-hd00_1.04-x86_64.gz available x86_64 IMAGE aki-8e0531cb amazon/pv-grub-hd0_1.04-i386.gz available i386 IMAGE aki-880531cd amazon/pv-grub-hd0_1.04-x86_64.gz available x86_64 IMAGE aki-e97e26ac amazon/pv-grub-hd00_1.03-i386.gz available i386 IMAGE aki-eb7e26ae amazon/pv-grub-hd00_1.03-x86_64.gz available x86_64 IMAGE aki-f57e26b0 amazon/pv-grub-hd0_1.03-i386.gz available i386 IMAGE aki-f77e26b2 amazon/pv-grub-hd0_1.03-x86_64.gz available x86_64
If you are lucky, run the scrip the following order, and you should have a CentOS instance running in AWS. 🙂
commands: init : perform teardown and create new img file/dirs, set up yum setup : mount image, bind run-time dirs install : install centos image (after setup) configure: configure the OS img (after install) teardown : unbind and un-mount bundle : build img bundle for upload (after install/configure/teardown) upload : upload image (after bundle) register : register AMI (after upload) run <id> : run a small instance of the registered AMI
Find out the IP address of the new instance, and ssh into it
ssh -i my_aws.pem root@<pub ip address>
Tricks and Tips
- It takes long time (>2 minutes) for the instance to boot up. Be patient. And don’t panic too soon.
- If somehow you cannot log into the instance with the key pair, you can always pre-create /root/.ssh directory in the OS image and pre-create the authorized_keys file underneath it.