If you have a linux server with Xen installed, you can develop and test on Xen and migrate your images to EC2 easily when you are ready.
First off you need to have Linux running in a Xen image. This was covered earlier in a post about installing Xen on Debian Hosts & Guests Xen Virtulization with Debian Linux 4 (It’s easy)
Once you have a running image on Xen, migrating to EC2 is fairly easy. There are just a few steps that you need to follow. I’ve outlined them below using Debian 4.0 as the distribution but you can choose your own flavors.
# HOST: (Re)Install & Correct (for Debian) Amazon's EC2 AMI tools & Ruby 1.8.6
sudo su -
apt-get install alien curl
curl -O http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.noarch.rpm
alien -i ec2-ami-tools.noarch.rpm
rm ec2-ami-tools.noarch.rpm
# IF YOU DO _NOT_ HAVE RUBY 1.8.6 installed from source
apt-get install ruby libopenssl-ruby1.8
ln -s /usr/lib/site_ruby/aes /usr/lib/ruby/1.8/
# IF YOU DO HAVE RUBY 1.8.6 installed from source
ln -s /usr/lib/site_ruby/aes /usr/local/lib/ruby/1.8/
# THEN
vi /usr/lib/site_ruby/aes/amiutil/image.rb
# exec( 'for i in console null zero ; do /sbin/MAKEDEV -d ' + dev_dir + ' -x $
# i ; done' )
# ......Should be......
# exec("cd #{dev_dir} && /sbin/MAKEDEV console && /sbin/MAKEDEV std && /sbin/MAKEDEV generic")
exit
# HOST: (Re)Install Amazon's EC2 API tools
sudo apt-get install sun-java5-jre unzip
cd /usr/local
sudo rm -rf ec2*
sudo symlinks -crsd .
curl -O http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip
unzip ec2-api-tools.zip
rm ec2*/bin/*.cmd
chmod -R og-w ec2*
sudo chown -R debian:staff ec2*
rm ec2-api-tools.zip
ln -sf ec2-api-tools* ec2-api-tools
cd /usr/local/bin
ln -sf ../ec2-api-tools/bin/* .
# Download your ec2 certificate and put it in ~/.amazon/cert.pem
# Download your ec2 private key and put it in ~/.amazon/pk.pem
# Put your AWS Access key in ~/.amazon/access.txt
# Put your AWS Secret key in ~/.amazon/secret.txt
# Put your AWS Account # in ~/.amazon/user.txt
cat >> ~/.profile << EOF
export JAVA_HOME=/usr
export EC2_HOME=/usr/local/ec2-api-tools
export EC2_PRIVATE_KEY=$HOME/.amazon/pk.pem
export EC2_CERT=$HOME/.amazon/cert.pem
export AMAZON_ACCESS_KEY_ID=`cat ~/.amazon/access.txt`
export AMAZON_SECRET_ACCESS_KEY=`cat ~/.amazon/secret.txt`
export PATH=$EC2_HOME/bin:$PATH
EOF
source ~/.profile
ec2-add-keypair sandbox # put key in ~/.amazon/id_rsa-sandbox
ec2-add-keypair development # put key in ~/.amazon/id_rsa-development
ec2-add-keypair test # put key in ~/.amazon/id_rsa-test
ec2-add-keypair production # put key in ~/.amazon/id_rsa-production
chomod -R go-rwsx ~/.amazon
#
# When are ready to deploy the image
#
# GUEST: Create an Amazon EC2 fstab
sudo su -
cd /etc
mv fstab fstab.xen
ln -sf fstab.xen fstab
cat > /etc/fstab.ec2 << EOF
/dev/sda1 / ext3 defaults 1 1
/dev/sda2 /mnt ext3 defaults,user_xattr 1 2
/dev/sda3 swap swap defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
EOF
exit
# GUEST: Install Amazon's Linux Kernel modules on your image
sudo su -
cd /tmp
wget http://s3.amazonaws.com/ec2-downloads/modules-2.6.16-ec2.tgz
tar -xzf /tmp/files/modules-2.6.16-xenU.tgz
rm -rf /tmp/files
exit
# HOST: Stop the Xen image && mount the disk && switch to EC2 fstab
sudo xm shutdown image; # Wait for it to stop
sudo mount -t ext3 -o loop /xen/domains/image/disk.img /mnt
cd /mnt/etc
sudo ln -sf fstab.ec2 fstab
cd
sudo umount /mnt
#
# Setup EC2
#
# Add Groups
ec2-add-group sandbox -d 'Sandbox'
ec2-add-group website -d 'Website'
ec2-add-group database -d 'Database'
ec2-add-group backend -d 'Backend'
# Open Ports
ec2-authorize sandbox -p 22
ec2-authorize website -p 80
ec2-authorize website -p 443
ec2-authorize default -p 54321
#
# Deploy to EC2
#
# Bundle Image
ec2-bundle-image -p image -i /xen/domains/image/disk.img
-u `cat ~/.amazon/user.txt`
# Upload Image
ec2-upload-bundle -b ami.soniannetworks.com -m /tmp/image.manifest.xml
-a `cat ~/.amazon/access.txt` -s `cat ~/.amazon/secret.txt`
# Register Image
ec2-register ami.soniannetworks.com/image.manifest.xml
# List Images
ec2-describe-images
ec2-describe-images -x all
# Run Image
ec2-run-instances -g sandbox -k sandbox ami-XXXXXXX
# List
ec2-describe-instances
# Login
ssh -i ~/.amazon/id_rsa-sandbox root@myhost.amazonaws.com
# Shutdown
ec2-terminate-instances i-XXXXXXX
# Unregister
ec2-deregister ami-XXXXXXX
#
# Post-Deploy Config @ EC2
#
# EC2: SSH in (as debian user)
ssh -p 54321 debian@my.host.at.ec2.amazonws.com
# EC2: Change password (as debian user)
# EC2: Reconfigure the new guests hostname
sudo su -
hostname myhost.ec2.mydomain.com
echo `hostname` > /etc/hostname
exit
# GUEST: Reconfigure mail (see xen.txt doc)
# GUEST: Configure services as needed (see xen.txt doc)
#
# Switching the Xen image back to work with Xen
#
# HOST: Mount the disk && switch to Xen fstab && start the Xen image again
sudo mount -t ext3 -o loop /xen/domains/image/disk.img /mnt
cd /mnt/etc
sudo ln -sf fstab.xen fstab
cd
sudo umount /mnt
sudo xm create /etc/xen/image.cfg
sudo xm console image
Posted on July 28th, 2007 by dysinger
Filed under: Uncategorized