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
- EC2
- S3 / CloudFront
- VPC
- ELB
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.