Options for Automating AWS

As we’ve seen in previous posts, boto and cloudformation are both options for helping automate your AWS resources, and can even compliment each other.

But not everyone will want to use Amazon’s CFN (which we covered in depth in the day 6 post) or a Python library, so I thought we’d explore some of the options for automating your usage of AWS in various programming languages.

Python – boto, libcloud

Python has a few options for libraries. The most actively developed and used one’s I’ve seen are boto and libcloud

Boto

Boto is meant to be a Python library for interacting with AWS service. It mirrors the AWS APIs in a Pythonic fashion and gives you the ability to build tools in Python on top of it, to manipulate and manage your AWS resources.

The project is lead by Mitch Garnaat, who is currently a Sr Engineer at Amazon.

Boto has a number of tutorials to get you started, including

Currently the following AWS services are supported:

Compute

  • Amazon Elastic Compute Cloud (EC2)
  • Amazon Elastic Map Reduce (EMR)
  • AutoScaling
  • Elastic Load Balancing (ELB)

Content Delivery

  • Amazon CloudFront

Database

  • Amazon Relational Data Service (RDS)
  • Amazon DynamoDB
  • Amazon SimpleDB

Deployment and Management

  • AWS Identity and Access Management (IAM)
  • Amazon CloudWatch
  • AWS Elastic Beanstalk
  • AWS CloudFormation

Application Services

  • Amazon CloudSearch
  • Amazon Simple Workflow Service (SWF)
  • Amazon Simple Queue Service (SQS)
  • Amazon Simple Notification Server (SNS)
  • Amazon Simple Email Service (SES)

Networking

  • Amazon Route53
  • Amazon Virtual Private Cloud (VPC)

Payments and Billing

  • Amazon Flexible Payment Service (FPS)

Storage

  • Amazon Simple Storage Service (S3)
  • Amazon Glacier
  • Amazon Elastic Block Store (EBS)
  • Google Cloud Storage

Workforce

  • Amazon Mechanical Turk

Other

  • Marketplace Web Services

libcloud

libcloud is a mature cloud provider library that is an Apache project. It’s meant to provide a Python interface to multiple cloud providers, with AWS being one of the first it supported and among the most mature in those that libcloud supports.

libcloud is organized around four components

  • Compute – libcloud.compute.*
  • Storage – libcloud.storage.*
  • Load balancers – libcloud.loadbalancer.*
  • DNS – libcloud.dns.*

Given the above components and my review of the API docs, libcloud effectively supports the following AWS services

  • EC2
  • S3
  • Route53

If you’re interested in learning more about libcloud, take a look at the Getting Started guide and the API documentation

Ruby – fog, aws-sdk gem

The main Ruby options seem to be Fog and the aws-sdk gem.

Fog

Similar to libcloud, Fog’s goal is to a be a mature cloud provider library with support for many providers. It provides a Ruby interface to them, with AWS being one of the first it supported and among the most mature in those that Fog supports. It’s also used to provide EC2 support for Opscode Chef’s knife

Fog is organized around four components

  • Compute
  • Storage
  • CDN
  • DNS

Based on a review of the supported services list and the aws library code, Fog currently has support for all the major AWS services.

If you’re interested in learning more about Fog, take a look at the Getting Started tutorial and the source code

aws-sdk

The aws-sdk gem is the official gem from Amazon that’s meant to help Ruby developers integrate AWS services into their applications, with special support for Rails applications in particular.

It currently supports the following AWS services:

  • Amazon Elastic Compute Cloud (EC2)
  • Amazon SimpleDB (SDB)
  • Amazon Simple Storage Service (S3)
  • Amazon Simple Queue Service (SQS)
  • Amazon Simple Notifications Service (SNS)

If you’re interested in learning more about the ruby sdk, see the Getting Started guide and the FAQ

Java – jclouds, AWS SDK for Java

The Java world has a number of options, including jclouds and the official SDK for Java

jclouds

jclouds is a Java and Clojure library whose goal is to a be a mature cloud provider library with support for many providers. It provides a Java interface to them, with AWS being one of the first it supported and among the most mature in those that jclouds supports.

jclouds is organized into two main components

  • Compute API
  • Blobstore API

jclouds currently has support for the following AWS services

  • EC2
  • SQS
  • EBS
  • S3
  • CloudWatch

SDK for Java

The SDK for Java is the official Java library from Amazon that’s meant to help Java developers integrate AWS services into their applications.

It currently supports all the AWS services.

If you’re interested in learning more about the Java sdk, see the Getting Started guide and the API documentation

PHP – AWS SDK for PHP

The only PHP full featured PHP library I could find was the official SDK for PHP

The SDK for PHP is the official PHP library from Amazon that’s meant to help PHP developers integrate AWS services into their applications.

It currently supports all the AWS services.

If you’re interested in learning more about the PHP sdk, see the Getting Started guide and the API documentation

JavaScript – AWS SDK for Node.JS, AWSLib

There seem to be two JavaScript options, the AWS SDK for Node.js and aws-lib

SDK for Node.js

The SDK for Node.js is the official JavaScript library from Amazon that’s meant to help Javascript and Node.js developers integrate AWS services into their applications. This SDK is currently considered a developer preview

It currently supports the following AWS services

  • EC2
  • S3
  • DynamoDB
  • Simple Workflow

If you’re interested in learning more about the Node.js sdk, see the Getting Started guide and the API documentation

aws-lib

aws-lib is a simple Node.js library to communicate with the Amazon Web Services API.

It currently supports the following services

  • EC2
  • Product Advertising API
  • SimpleDB
  • SQS (Simple Queue Service)
  • SNS (Simple Notification Service)
  • SES (Simple Email Service)
  • ELB (Elastic Load Balancing Service)
  • CW (CloudWatch)
  • IAM (Identity and Access Management)
  • CFN (CloudFormation)
  • STS (Security Token Service)
  • Elastic MapReduce

If you’re interested in learning more about aws-lib, see the Getting started page and read the source code.