We are doing the Deltacloud API project because we think that preventing from vendor API lock-in is very important to everyone who uses services provided by a public or private cloud vendor. But what if you are already locked in to one particular cloud API? And yes, I am speaking about the Amazon EC2 API which seems to by widely adopted. Since this API is soo popular, the other projects like OpenStack or Eucalyptus provide an EC2 API adaptor for those who are already locked by Amazon EC2.
In Deltacloud, we have our own API specification and in some case that could be a deal breaker for some clients. Clients would need to change the code they already have and start implementing our API standard. But this no longer true.
Deltacloud API now provides an experimental support for Amazon Elastic Compute Cloud (2012-05-01) API as a frontend. Currently, only few “actions” are supported but it is enough to run an instance in whatever backend cloud Deltacloud project supports.
To use EC2 frontend, you need to checkout the latest Deltacloud code from the GIT repository. Then inside the server/ directory run:
$ bundle install
$ ./bin/deltacloud -i mock -f ec2
Now, Deltacloud API should be running on port 3001 and you can start experimenting:
So far these EC2 Actions are supported:
- DescribeAvailabilityZones
- DescribeImages
- DescribeInstances
- DescribeKeyPairs
- CreateKeyPair
- DeleteKeyPair
- RunInstances
- StopInstances
- StartInstances
- RebootInstances
- TerminateInstances
There are certain limitations currently which we will need to deal with in near future. For now for example, you are not allowed to launch multiple instances (RunInstances) or do operations using multiple instance syntax (InstanceId.n). This frontend only works with one instance per request. Another problem is that you cannot query for the InstanceTypes. The reason for this is that EC2 Query API does not provide any “action” that can list the supported instance types. For this, you will always need to “fallback” to the Deltacloud API to obtain the list you can use for the RunInstances operation.