With AWS you can add ephemeral storage to an EC2 instance. The downside of this storage is that it’s gone once you reboot the machine. This makes it perfectly suitable for swapspace. However you can’t add this swap to your /etc/fstab file. It will block the booting of your EC2 instance, as ephemeral storage will always reset. Any swap partitions assigned will vanish.
My way of coping with this is creating a little service that creates the swap at boot time.
Let’s create a service named ‘swapon’.
sudo nano /etc/init.d/swapon
And add the following content:
# chkconfig: 2345 95 20
# description: Adding swap to ephemeral0
# Adding swap to ephemeral0
# processname: swap
dd if=/dev/zero of=/media/ephemeral0/swap bs=1024 count=8M
chown root:root /media/ephemeral0/swap
chmod 600 /media/ephemeral0/swap
This service will generate a swap file of 8GB (hence the 8M * 1024byte). If you need less or more, change the ‘count’ parameter.
Now last step: let’s assign execute rights and enable this script/service at boot time.
sudo chmod +x /etc/init.d/swapon
sudo chkconfig --level 345 swapon on
Now your swap will be created every time you boot (or reboot) your EC2 instance. The only drawback of this method is that it will run in the background and your swap won’t be immediately available. But adding swap won’t block your machine boot process.
Example: my m1.small instance it takes about 5 minutes to create an 8GB swap file.
By default Amazon Webservices doesn’t assigns the ephemeral storage. I don’t know whether or not this is done to favor their EBS products. But once you created a machine. It’s a real pain in the ass to enable it. At the moment of writing there is no way to add ephemeral storage to an existing EC2 instance. The only way I found to do this is to migrate the instance to a new one.
Step 1: Shutdown the EC2 instance you wish to migrate.
Step 2: Write down the associated and attached EBS volumes from the EC2 instance.
Step 3: In the EC2 dashboard, go to the ‘Volumes’ section of the ‘Elastic Block Store’ menu, from there right click on all attached volumes and detach these.
Step 4: Go to the instances menu, right click on your EC2 instance and select ‘Launch more like this’. It’s also possible to create one from scratch but with the ‘Launch more like this’ option you will have the same configuration pre-selected.
Now from the ‘Storage’ options you can select the ‘Edit Storage’ option.
Press ‘Add new volume’ and select ‘Instance Store 0’. This is your ephemeral storage. It will depend how much you can assign. An m1.medium instance will have one 410GB disk drive.
More information at: Amazon EC2 Instance Store – Amazon Elastic Compute Cloud.
Step 5: Once your EC2 instance is created, stop it.
Step 6: Once your EC2 instance has been shutdown, move to the ‘Volumes’ section again and detach the newly created volume from the newly created EC2 instance.
Step 7: Attach the old volumes from the to migrate instance to your newly created one and attach it on the associated mappings. (Don’t worry, /dev/sda1, is ok to assign)
Step 8: Delete the volume created from the ‘Launch more like this’ option and start your new EC2 instance. You can also delete the old EC2 instance. We won’t need it anymore.
The only downside of this procedure is that the new instance will have a new instance id. Hopefully Amazon adds a way to do this once the runtime has been created.