1 Introduction
This libary provides support for many of the Amazon Web Services.
1.1 Which services?
The services supported are those most likely to be used both
In an application.
Via an AWS interface.
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).