On this page:
2.1 Names
2.2 AWS Keys
2.3 Exception handling
exn:  fail:  aws
header&response->exn:  fail:  aws
2.4 Connection pooling

2 All Services

2.1 Names

The names of procedures and structs do not have special prefixes to “group” them. Instead, use the prefix-in option for require if you prefer a prefix (or need one to avoid a name collision).

For example if you want the aws/sns procedures to have an sns- prefix, so that create-topic is renamed to sns-create-topic:

(require (prefix-in sns- aws/sns))
(sns-create-topic "foobar")

2.2 AWS Keys

 (require aws/keys) package: aws


(public-key)  string?

(public-key key)  void?
  key : string?
Your AWS public key, a.k.a. “Access ID.”


(private-key)  string?

(private-key key)  void?
  key : string?
Your AWS private key, a.k.a. “Secret Key.”


(read-keys [file])  void?

  file : path?
   = (build-path(find-system-path 'home-dir) ".aws-keys")
Set the parameters public-key and private-key by reading their values from a plain text file. The file should consist of two lines:



By default this file is ~/.aws-keys. You probably want to chmod the permissions of this file carefully.


(ensure-have-keys)  void?

If either public-key or private-key is "", calls read-keys. If either is still blank, calls error with a hopefully helpful reminder about how to set the parameters.

2.3 Exception handling

Most of the functions do not return a failure value. Instead they raise exn:fail:aws, which you need to “catch” using with-handlers.

 (require aws/exn) package: aws


(struct exn:fail:aws (http-code http-message aws-code aws-message)
    #:extra-constructor-name make-exn:fail:aws)
  http-code : exact-positive-integer?
  http-message : string?
  aws-code : string?
  aws-message : string?


(header&response->exn:fail:aws headers    
  ccm)  exn:fail:aws?
  headers : string?
  body : (or/c bytes? xexpr?)
  ccm : continuation-mark-set?
Given an HTTP response’s headers and body, return a exn:fail:aws constructed with information from the response.


(check-response in headers)

  (or/c string? (raise/c exn:fail:aws?))
  in : input-port?
  headers : string?
Check headers. If the status code is one of 200, 201, 202, 204, 206, 301, 302, or 307, simply return headers (without reading any response body from in).

Otherwise, read the XML response body from in and use the information to construct and raise exn:fail:aws.

Note: This does not close the input port in before raising an exception. It assumes you are using call/requests, call/input-request, or call/output-request from the http/request library (or using dynamic-wind or other exception handling, or a custodian—or whatever) to make sure the port is closed!

2.4 Connection pooling

This library uses the http package to make HTTP connections to AWS. You may cause connections to be reused ("pooled") by setting the current-pool-timeout parameter to some non-zero number of seconds.

This can be faster, especially for many small requests in a row.

In the following example, the first list-buckets request will leave the connection open for 30 seconds. As a result, the second list-buckets request will reuse the same connection. After another 30 seconds, the connection will be closed automatically.

(require http/request
(parameterize ([current-pool-timeout 30])