I've seen a number of posts saying a disadvantage of running Oracle databases on AWS is that AWS does not support ASM. Not true and it's actually quite simple to set this up.
It turns out that Amazon Web Services Elastic Block Storage (EBS) volumes are raw devices that you can attach to your EC2 database instance. Each such EBS volume can then be prepared as a candidate ASM disk.
Just as in non-cloud environments, more disks are better then fewer so it you need a 100GB database, create five 20GB EBS volumes rather than a single 100GB volume.
Also, strongly consider using EBS optimized volumes where you can request the number of IOPS you need for your database. This is an extra cost option but well worth it for any database with significant I/O.
For the following example, I installed Oracle Grid Infrastructure 12.1.0.2 for Linux x86-64 on an m3-xlarge instance running Amazon Linux.
I wanted a 120GB database so I created six 20GB EBS volumes optimized for 500 IOPS and attached them to my database instance. Note that you should make the disks all the same size. In my example the disk devices were created as /dev/xvdf and /dev/xvdi through /dev/xvdm.
I wanted to install my grid infrastructure as user grid and group asmadmin. Therefore these disks needed to be owned by grid:asmadmin rather than root:disk. You can simply run:
chown grid:asmadmn /dev/xvdf
and it will show the onership change; however, within a few minutes you'll see that the OS changes the ownership back to root:disk.
Bart Sjerps Dirty Cache Blog points out that you need to construct a udev rule to make this ownership change persistent and it showed the basics of the rule structure. However; his particular example was for a SCSI drive which are identified by an ID_SERIAL. EBS devices are not SCSI devices so I needed to do a little poking around to find out how to identify the EBS volumes in the udev rule.
The udev rules can be found in /etc/udev/rules.d. The rules files in this directory start with a number that specifies the order in which the rules fire. We want our rule to fire last so I created a file called 98-AWS.rules. I added a single line to the file as:
OWNER="grid", GROUP="asmadmin", MODE="0660", ENV{DEVTYPE}=="disk", KERNEL=="xvd[f,i-m]"
Note that a singe "=" indicates assignment and a double "==" indicates a conditional. Note the use of a regular expression in the conditional for the KERNEL parameter so it picks up all my disk devices.
For your implementation, simply modify the OWNER, GROUP and KERNEL parametes to match your needs.
You need to restart the instance for this change to take effect.
After these steps the install of the Grid Infrastructure was unremarkable as it found all the above disks as candidate ASM volumes and otherwsie proceeded normally.