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.