On this page:
1.1 Which services?
1.2 Scope

1 Introduction

This library provides support for many of the Amazon Web Services.

Speaking of support: It is not free (long-term) to use AWS — including when developing and testing this package. To the extent this package provides any financial value to you or your organization, I welcome your recognition and support thank you!

1.1 Which services?

The services supported are those most likely to be used both

Not supported are services like EC2 that are mainly about managing the “infrastructure” for your application, such as creating servers on which to run. The assumption is that you can use Amazon’s command line tools or web app console to do that. (If your application is about managing infrastructure, sorry.)

Also not supported is the ElastiCache service. Its application use interface is the usual memcached protocol. Amazon provides another interface for managing the infrastructure of ElastiCache, not for using it.

Likewise RDS: Although Amazon lets you programatically create and manage database servers, your application uses them in the usual way, for example via Racket’s db library.

1.2 Scope

The goal is to provide enough “wrapper” around a service’s HTTP interface to make it convenient to use from Racket, but not obscure the service’s semantics.

The single most error-prone and time-consuming thing about working with AWS is calculating an authentication signature. If you don’t do it exactly right, the request will be rejected and the specific reason why is often not apparent. Furthermore, the method can vary subtly among some services. You can burn many hours on this, or you can use this library.

In addition there is help for the tedium of marshalling values into and out of the HTTP requests and responses.

This library uses my http library to make HTTP requests, instead of net/url. Why? To use HTTP 1.1 capabilities such as the Expect: 100-continue request header (to fail PUT requests quickly) and the Range request header (a sort of subbytes for GETs).