Amazon S3 Client
The :std/net/s3 library provides basic support for interfacing with Amazon S3 and
compatible services.
Only HTTPS is currently supported
Creating a Client
The primary way to interact with S3 via this library is with the S3 interface.
To create an instance of an S3 client, use the S3Client constructor:
(S3Client
endpoint: (endpoint "s3.amazonaws.com")
access-key: (access-key (getenv "AWS_ACCESS_KEY_ID" #f))
secret-key: (secret-key (getenv "AWS_SECRET_KEY" #f))
region: (region (getenv "AWS_DEFAULT_REGION" "us-east-1")))
If access-key or secret-key aren't passed in and cannot be retrieved from the
environment (via AWS_ACCESS_KEY_ID and AWS_SECRET_KEY respectively) a S3Error is
raised.
Client
The S3 interface has the following signature:
(interface S3
(get-bucket (name :~ string?))
(create-bucket! (name :~ string?))
(delete-bucket! (name :~ string?))
(bucket-exists? (name :~ string?))
(list-buckets))
S3-get-bucket
(S3-get-bucket client bucket-name) -> S3Bucket
S3-get-bucket retrieves a S3Bucket instance by name. If the bucket does not exist, a
S3Error is raised. Buckets are searched for in the service and region provided to
S3Client's endpoint and region arguments.
S3-create-bucket!
(S3-create-bucket! client bucket-name) -> S3Bucket
S3-create-bucket! creates a new bucket in the service and region the client was
instantiated with. If a bucket with the name already exists, a S3Error is raised
indicating there was a conflict. If the bucket is successfully created, an instance of
S3Bucket corresponding to the newly created bucket is returned.
S3-delete-bucket!
(S3-delete-bucket! client bucket-name) -> void
S3-delete-bucket! attempts to delete a bucket with the given name. delete-bucket! is
idempotent and will not error if the bucket does not exist.
S3-bucket-exists?
(S3-bucket-exists? client bucket-name) -> bool
S3-bucket-exists? checks if a bucket with the provided name exists in the client's
configured region and endpoint. It returns #t if a bucket exists and #f otherwise.
S3-list-buckets
(S3-list-buckets client) -> list : S3Bucket
S3-list-buckets returns a list of all buckets available to the client as configured. If
none are available, an empty list is returned. All buckets are instances of S3Bucket.
S3Bucket
The S3Bucket interface provides a consistent way to interact with buckets.
(interface S3Bucket
(get (name :~ string?))
(put! (name :~ string?)
(data :~ u8vector?))
(delete! (name :~ string?))
(copy-to! (src :~ string?) (dest :~ string?))
(list-objects))
S3Bucket-get
(S3Bucket-get bucket object-name) -> u8vector
S3Bucket-get retrieves a object by name. If the object does not exist or the client
does not have permission to retrieve the object, an S3Error is raised.
S3Bucket-put!
(S3Bucket-put! bucket object-name) -> void
S3Bucket-put! stores data in a object with the provided name. Any failures result
in a S3Error being raised. All data is stored with content-type: "octet-stream" MIME
type.
S3Bucket-delete!
(S3Bucket-delete! bucket object-name) -> void
S3Bucket-delete! delete's an object with the provided name. If the object does not
exist, an S3Error is raised.
S3Bucket-copy-to!
(S3Bucket-copy-to! bucket src dest) -> void
S3Bucket-copy-to! performs server-side copy of object described by src. The src
format is <bucket>/<objectname>. The dest is the same as if performing a put! and
will store the object in the current S3Bucket. Copies must be within a region and
otherwise possible to perform using the S3 client this bucket was created with.
Any failures result in a S3Error being raised.
S3Bucket-list-objects
(S3Bucket-list-objects bucket) -> list : string
S3Bucket-list-objects enumerates all objects in the bucket, returning their names as
strings.