RightScale's AWS gems provide Ruby interfaces to five key Amazon Web Services: CloudFront, EC2, S3, SQS, and SDB. The gems use Amazon's REST and query interfaces to provide full programmatic control. An optional HTTP layer retries and clears transient errors.
These Gems have been used in production by RightScale since February 2007 and are continuously improved and updated with any new features offered by Amazon. When we started with AWS we had no choice but to write our own Gems and we're glad to make them available to the Ruby community. The design goals for these gems are:
- Full programmmatic access to CloudFront, EC2, S3, SQS, and SDB.
- Complete error handling: all operations check for errors and report complete error information by raising an AwsError.
- Persistent HTTP connections with network-level retry layer using RightHttpConnection. This includes socket timeouts and retries.
- HTTP-level retry layer. Certain (user-adjustable) HTTP errors returned by Amazon's services are classified as temporary errors. These errors are automaticallly retried using exponentially increasing intervals. The number of retries is user-configurable.
- Fast REXML-based parsing of responses (as fast as a pure Ruby solution allows).
- Uses libxml (if available) for faster response parsing.
- Support for large S3 list operations. Buckets and key subfolders containing many (> 1000) keys are listed in entirety. Operations based on list (like bucket clear) work on arbitrary numbers of keys.
- Support for streaming GETs from S3, and streaming PUTs to S3 if the data source is a file.
- Support for 5GB objects in S3, upload using "Expect:100-continue" header.
- Support for single-threaded usage, multithreaded usage, as well as usage with multiple AWS accounts.
- Test suite (requires AWS account to do "live" testing).
These Gems are supported by RightScale Inc, please email firstname.lastname@example.org with requests for help or suggestions. We will do our best to respond to bug reports quickly, of course we always appreciate patches!
Thorsten von Eicken