Tag Archives: java

Amazon AMI Cloner using SmartGWT and Grails

As what I have posted earlier this month about the Amazon EC2 AMI cloner/migrator. Where it can launch and bundle a new AMI to another EC2 account, here comes it’s basic web interface :).

I’m no expert in Ajax and just luckily found Gooogle Web Toolkit(GWT) and finally the SmartGWT for this application. See sample screen shots using SmartGWT application. A Grails service works to fetch the AMI list, using the same cloner codes. The service generates a page with JSON string which can easily be use for SmartGWT datasource. I’ve learned that for me it’s much easier to get the web interface using SmartGWT and build the services inside grails. So far, I’m having fun and while keeping myself on the edge of these technologies.

Amazon EC2 AMI Cloner

Since 2007, I’ve been architecting, implementing, and part of it is bundling EC2 images for my client’s projects. Some clients cannot provide they keys/certs for security reasons and so my usual option is to bundle the AMIs using my account, and once these images are tested or proven to meets my client’s requirements, I’d share those AMIs and let my clients do the bundling.

I was working with Informascale currently doing lots of fun stuff with Amazon AWS, Puppet, Linux, MySQL, Java and Groovy, Apache and Haproxy servers..obviously, most of these are related to scaling virtual servers, on demand applications, and cloud computing technology ideas.

Going back to this EC2 Image Cloner, the good thing about this tool is that you can run its CLI (command line interface) to bundle a shared AMI from AWS accountA to another AWS account(let’s say accountB). Or call it from a PHP application and run the cloning process in the background.

This cloner application needs to save AWS keys and certs of the AccountB to a database, and use this information to launch, bundle and upload the bundle S3.
Currently, it bundles all shared AMI from accountA to accountB. AccountA however needs to set Launch permission to any of its private AMI to be shared to accountB. Before bundling process exits, it tries to make sure to shutdown each of the launch instances being cloned. More features are underway for this tool, one is to be able to have a drag n drop option for setting launch permissions with any AWS account listed on the tool’s db 🙂 Hope there a lot more we can think of. I hope we can get this into a usable tool for everybody.

We had tested to run the cloner inside PHP app and was able to get ubuntu,debian,centos x386 AMIs successfully cloned. I’m about to test Canonical AMI images with this cloner, they have only two AMI’s for now, (checking how it handles x64 machines), so it safe for me to clone them all. 🙂

The cloner is written using Groovy 1.5.2-1, Typica 1.5, and Trilead SSH2 API.

To bundle AMI manually to another account, see these references:


Rough screenshot/codes of the EC2 Cloner in action: