aws-0.13.0: Amazon Web Services (AWS) for Haskell

Safe HaskellNone
LanguageHaskell2010

Aws

Contents

Synopsis

Logging

data LogLevel Source

The severity of a log message, in rising order.

Constructors

Debug 
Info 
Warning 
Error 

type Logger = LogLevel -> Text -> IO () Source

The interface for any logging function. Takes log level and a log message, and can perform an arbitrary IO action.

defaultLog :: LogLevel -> Logger Source

The default logger defaultLog minLevel, which prints log messages above level minLevel to stderr.

Configuration

data Configuration Source

The configuration for an AWS request. You can use multiple configurations in parallel, even over the same HTTP connection manager.

Constructors

Configuration 

Fields

timeInfo :: TimeInfo

Whether to restrict the signature validity with a plain timestamp, or with explicit expiration (absolute or relative).

credentials :: Credentials

AWS access credentials.

logger :: Logger

The error / message logger.

baseConfiguration :: MonadIO io => io Configuration Source

The default configuration, with credentials loaded from environment variable or configuration file (see loadCredentialsDefault).

dbgConfiguration :: MonadIO io => io Configuration Source

Debug configuration, which logs much more verbosely.

Transaction runners

Safe runners

aws :: Transaction r a => Configuration -> ServiceConfiguration r NormalQuery -> Manager -> r -> ResourceT IO (Response (ResponseMetadata a) a) Source

Run an AWS transaction, with HTTP manager and metadata wrapped in a Response.

All errors are caught and wrapped in the Response value.

Metadata is logged at level Info.

Usage (with existing Manager): resp <- aws cfg serviceCfg manager request

awsRef :: Transaction r a => Configuration -> ServiceConfiguration r NormalQuery -> Manager -> IORef (ResponseMetadata a) -> r -> ResourceT IO a Source

Run an AWS transaction, with HTTP manager and metadata returned in an IORef.

Errors are not caught, and need to be handled with exception handlers.

Metadata is not logged.

Usage (with existing Manager): ref <- newIORef mempty; resp <- awsRef cfg serviceCfg manager request

pureAws :: Transaction r a => Configuration -> ServiceConfiguration r NormalQuery -> Manager -> r -> ResourceT IO a Source

Run an AWS transaction, with HTTP manager and without metadata.

Metadata is logged at level Info.

Usage (with existing Manager): resp <- aws cfg serviceCfg manager request

simpleAws :: (Transaction r a, AsMemoryResponse a, MonadIO io) => Configuration -> ServiceConfiguration r NormalQuery -> r -> io (MemoryResponse a) Source

Run an AWS transaction, without HTTP manager and without metadata.

Metadata is logged at level Info.

Note that this is potentially less efficient than using aws, because HTTP connections cannot be re-used.

Usage: resp <- simpleAws cfg serviceCfg request

Unsafe runners

unsafeAws :: (ResponseConsumer r a, Monoid (ResponseMetadata a), Loggable (ResponseMetadata a), SignQuery r) => Configuration -> ServiceConfiguration r NormalQuery -> Manager -> r -> ResourceT IO (Response (ResponseMetadata a) a) Source

Run an AWS transaction, without enforcing that response and request type form a valid transaction pair.

This is especially useful for debugging and development, you should not have to use it in production.

All errors are caught and wrapped in the Response value.

Metadata is wrapped in the Response, and also logged at level Info.

unsafeAwsRef :: (ResponseConsumer r a, Monoid (ResponseMetadata a), SignQuery r) => Configuration -> ServiceConfiguration r NormalQuery -> Manager -> IORef (ResponseMetadata a) -> r -> ResourceT IO a Source

Run an AWS transaction, without enforcing that response and request type form a valid transaction pair.

This is especially useful for debugging and development, you should not have to use it in production.

Errors are not caught, and need to be handled with exception handlers.

Metadata is put in the IORef, but not logged.

URI runners

awsUri :: (SignQuery request, MonadIO io) => Configuration -> ServiceConfiguration request UriOnlyQuery -> request -> io ByteString Source

Run a URI-only AWS transaction. Returns a URI that can be sent anywhere. Does not work with all requests.

Usage: uri <- awsUri cfg request

Iterated runners

Response

Full HTTP response

type HTTPResponseConsumer a = Response (ResumableSource (ResourceT IO) ByteString) -> ResourceT IO a Source

A full HTTP response parser. Takes HTTP status, response headers, and response body.

Metadata in responses

data Response m a Source

A response with metadata. Can also contain an error response, or an internal error, via Attempt.

Response forms a Writer-like monad.

readResponse :: MonadThrow n => Response m a -> n a Source

Read a response result (if it's a success response, fail otherwise).

readResponseIO :: MonadIO io => Response m a -> io a Source

Read a response result (if it's a success response, fail otherwise). In MonadIO.

Memory responses

class AsMemoryResponse resp where Source

Class for responses that are fully loaded into memory

Associated Types

type MemoryResponse resp :: * Source

Methods

loadToMemory :: resp -> ResourceT IO (MemoryResponse resp) Source

Instances

AsMemoryResponse DeleteItemResponse Source 
AsMemoryResponse GetItemResponse Source 
AsMemoryResponse PutItemResponse Source 
AsMemoryResponse QueryResponse Source 
AsMemoryResponse ScanResponse Source 
AsMemoryResponse ListTablesResult Source 
AsMemoryResponse DeleteTableResult Source 
AsMemoryResponse UpdateTableResult Source 
AsMemoryResponse DescribeTableResult Source 
AsMemoryResponse CreateTableResult Source 
AsMemoryResponse UpdateItemResponse Source 
AsMemoryResponse CreateAccessKeyResponse Source 
AsMemoryResponse CreateUserResponse Source 
AsMemoryResponse DeleteAccessKeyResponse Source 
AsMemoryResponse DeleteUserResponse Source 
AsMemoryResponse DeleteUserPolicyResponse Source 
AsMemoryResponse GetUserResponse Source 
AsMemoryResponse GetUserPolicyResponse Source 
AsMemoryResponse ListAccessKeysResponse Source 
AsMemoryResponse ListMfaDevicesResponse Source 
AsMemoryResponse ListUserPoliciesResponse Source 
AsMemoryResponse ListUsersResponse Source 
AsMemoryResponse PutUserPolicyResponse Source 
AsMemoryResponse UpdateAccessKeyResponse Source 
AsMemoryResponse UpdateUserResponse Source 
AsMemoryResponse CopyObjectResponse Source 
AsMemoryResponse DeleteBucketResponse Source 
AsMemoryResponse DeleteObjectResponse Source 
AsMemoryResponse DeleteObjectsResponse Source 
AsMemoryResponse GetBucketResponse Source 
AsMemoryResponse GetBucketLocationResponse Source 
AsMemoryResponse GetObjectResponse Source 
AsMemoryResponse GetServiceResponse Source 
AsMemoryResponse HeadObjectResponse Source 
AsMemoryResponse PutBucketResponse Source 
AsMemoryResponse PutObjectResponse Source 
AsMemoryResponse SendRawEmailResponse Source 
AsMemoryResponse ListIdentitiesResponse Source 
AsMemoryResponse VerifyEmailIdentityResponse Source 
AsMemoryResponse VerifyDomainIdentityResponse Source 
AsMemoryResponse VerifyDomainDkimResponse Source 
AsMemoryResponse DeleteIdentityResponse Source 
AsMemoryResponse GetIdentityDkimAttributesResponse Source 
AsMemoryResponse GetIdentityNotificationAttributesResponse Source 
AsMemoryResponse GetIdentityVerificationAttributesResponse Source 
AsMemoryResponse SetIdentityNotificationTopicResponse Source 
AsMemoryResponse SetIdentityDkimEnabledResponse Source 
AsMemoryResponse SetIdentityFeedbackForwardingEnabledResponse Source 
AsMemoryResponse BatchDeleteAttributesResponse Source 
AsMemoryResponse BatchPutAttributesResponse Source 
AsMemoryResponse DeleteAttributesResponse Source 
AsMemoryResponse PutAttributesResponse Source 
AsMemoryResponse GetAttributesResponse Source 
AsMemoryResponse ListDomainsResponse Source 
AsMemoryResponse DomainMetadataResponse Source 
AsMemoryResponse DeleteDomainResponse Source 
AsMemoryResponse CreateDomainResponse Source 
AsMemoryResponse SelectResponse Source 
AsMemoryResponse ChangeMessageVisibilityResponse Source 
AsMemoryResponse ReceiveMessageResponse Source 
AsMemoryResponse DeleteMessageResponse Source 
AsMemoryResponse SendMessageResponse Source 
AsMemoryResponse RemovePermissionResponse Source 
AsMemoryResponse AddPermissionResponse Source 
AsMemoryResponse ListQueuesResponse Source 
AsMemoryResponse DeleteQueueResponse Source 
AsMemoryResponse CreateQueueResponse Source 
AsMemoryResponse SetQueueAttributesResponse Source 
AsMemoryResponse GetQueueAttributesResponse Source 
AsMemoryResponse AbortMultipartUploadResponse Source 
AsMemoryResponse CompleteMultipartUploadResponse Source 
AsMemoryResponse UploadPartResponse Source 
AsMemoryResponse InitiateMultipartUploadResponse Source 

Exception types

newtype XmlException Source

An error that occurred during XML parsing / validation.

Constructors

XmlException 

newtype HeaderException Source

An error that occurred during header parsing / validation.

Constructors

HeaderException 

newtype FormException Source

An error that occurred during form parsing / validation.

Constructors

FormException 

Query

Service configuration

Expiration

data TimeInfo Source

Whether to restrict the signature validity with a plain timestamp, or with explicit expiration (absolute or relative).

Constructors

Timestamp

Use a simple timestamp to let AWS check the request validity.

ExpiresAt

Let requests expire at a specific fixed time.

ExpiresIn

Let requests expire a specific number of seconds after they were generated.

Instances

Transactions

class (SignQuery r, ResponseConsumer r a, Loggable (ResponseMetadata a)) => Transaction r a | r -> a Source

Associates a request type and a response type in a bi-directional way.

This allows the type-checker to infer the response type when given the request type and vice versa.

Note that the actual request generation and response parsing resides in SignQuery and ResponseConsumer respectively.

Instances

Transaction DeleteItem DeleteItemResponse Source 
Transaction GetItem GetItemResponse Source 
Transaction PutItem PutItemResponse Source 
Transaction Query QueryResponse Source 
Transaction Scan ScanResponse Source 
Transaction ListTables ListTablesResult Source 
Transaction DeleteTable DeleteTableResult Source 
Transaction UpdateTable UpdateTableResult Source 
Transaction DescribeTable DescribeTableResult Source 
Transaction CreateTable CreateTableResult Source 
Transaction UpdateItem UpdateItemResponse Source 
Transaction CreateAccessKey CreateAccessKeyResponse Source 
Transaction CreateUser CreateUserResponse Source 
Transaction DeleteAccessKey DeleteAccessKeyResponse Source 
Transaction DeleteUser DeleteUserResponse Source 
Transaction DeleteUserPolicy DeleteUserPolicyResponse Source 
Transaction GetUser GetUserResponse Source 
Transaction GetUserPolicy GetUserPolicyResponse Source 
Transaction ListAccessKeys ListAccessKeysResponse Source 
Transaction ListMfaDevices ListMfaDevicesResponse Source 
Transaction ListUserPolicies ListUserPoliciesResponse Source 
Transaction ListUsers ListUsersResponse Source 
Transaction PutUserPolicy PutUserPolicyResponse Source 
Transaction UpdateAccessKey UpdateAccessKeyResponse Source 
Transaction UpdateUser UpdateUserResponse Source 
Transaction CopyObject CopyObjectResponse Source 
Transaction DeleteBucket DeleteBucketResponse Source 
Transaction DeleteObject DeleteObjectResponse Source 
Transaction DeleteObjects DeleteObjectsResponse Source 
Transaction GetBucket GetBucketResponse Source 
Transaction GetBucketLocation GetBucketLocationResponse Source 
Transaction GetObject GetObjectResponse Source 
Transaction GetService GetServiceResponse Source 
Transaction HeadObject HeadObjectResponse Source 
Transaction PutBucket PutBucketResponse Source 
Transaction PutObject PutObjectResponse Source 
Transaction SendRawEmail SendRawEmailResponse Source 
Transaction ListIdentities ListIdentitiesResponse Source 
Transaction VerifyEmailIdentity VerifyEmailIdentityResponse Source 
Transaction VerifyDomainIdentity VerifyDomainIdentityResponse Source 
Transaction VerifyDomainDkim VerifyDomainDkimResponse Source 
Transaction DeleteIdentity DeleteIdentityResponse Source 
Transaction GetIdentityDkimAttributes GetIdentityDkimAttributesResponse Source 
Transaction GetIdentityNotificationAttributes GetIdentityNotificationAttributesResponse Source 
Transaction GetIdentityVerificationAttributes GetIdentityVerificationAttributesResponse Source 
Transaction SetIdentityNotificationTopic SetIdentityNotificationTopicResponse Source 
Transaction SetIdentityDkimEnabled SetIdentityDkimEnabledResponse Source 
Transaction SetIdentityFeedbackForwardingEnabled SetIdentityFeedbackForwardingEnabledResponse Source 
Transaction BatchDeleteAttributes BatchDeleteAttributesResponse Source 
Transaction BatchPutAttributes BatchPutAttributesResponse Source 
Transaction DeleteAttributes DeleteAttributesResponse Source 
Transaction PutAttributes PutAttributesResponse Source 
Transaction GetAttributes GetAttributesResponse Source 
Transaction ListDomains ListDomainsResponse Source 
Transaction DomainMetadata DomainMetadataResponse Source 
Transaction DeleteDomain DeleteDomainResponse Source 
Transaction CreateDomain CreateDomainResponse Source 
Transaction Select SelectResponse Source 
Transaction ChangeMessageVisibility ChangeMessageVisibilityResponse Source 
Transaction ReceiveMessage ReceiveMessageResponse Source 
Transaction DeleteMessage DeleteMessageResponse Source 
Transaction SendMessage SendMessageResponse Source 
Transaction RemovePermission RemovePermissionResponse Source 
Transaction AddPermission AddPermissionResponse Source 
Transaction ListQueues ListQueuesResponse Source 
Transaction DeleteQueue DeleteQueueResponse Source 
Transaction CreateQueue CreateQueueResponse Source 
Transaction SetQueueAttributes SetQueueAttributesResponse Source 
Transaction GetQueueAttributes GetQueueAttributesResponse Source 
Transaction AbortMultipartUpload AbortMultipartUploadResponse Source 
Transaction CompleteMultipartUpload CompleteMultipartUploadResponse Source 
Transaction UploadPart UploadPartResponse Source 
Transaction InitiateMultipartUpload InitiateMultipartUploadResponse Source 

Credentials

data Credentials Source

AWS access credentials.

Constructors

Credentials 

Fields

accessKeyID :: ByteString

AWS Access Key ID.

secretAccessKey :: ByteString

AWS Secret Access Key.

v4SigningKeys :: IORef [V4Key]

Signing keys for signature version 4

iamToken :: Maybe ByteString

Signed IAM token

makeCredentials Source

Arguments

:: MonadIO io 
=> ByteString

AWS Access Key ID

-> ByteString

AWS Secret Access Key

-> io Credentials 

credentialsDefaultFile :: MonadIO io => io FilePath Source

The file where access credentials are loaded, when using loadCredentialsDefault.

Value: directory/.aws-keys

credentialsDefaultKey :: Text Source

The key to be used in the access credential file that is loaded, when using loadCredentialsDefault.

Value: default

loadCredentialsFromFile :: MonadIO io => FilePath -> Text -> io (Maybe Credentials) Source

Load credentials from a (text) file given a key name.

The file consists of a sequence of lines, each in the following format:

keyName awsKeyID awsKeySecret

loadCredentialsFromEnv :: MonadIO io => io (Maybe Credentials) Source

Load credentials from the environment variables AWS_ACCESS_KEY_ID and AWS_ACCESS_KEY_SECRET (or AWS_SECRET_ACCESS_KEY), if possible.

loadCredentialsFromEnvOrFile :: MonadIO io => FilePath -> Text -> io (Maybe Credentials) Source

Load credentials from environment variables if possible, or alternatively from a file with a given key name.

See loadCredentialsFromEnv and loadCredentialsFromFile for details.

loadCredentialsFromEnvOrFileOrInstanceMetadata :: MonadIO io => FilePath -> Text -> io (Maybe Credentials) Source

Load credentials from environment variables if possible, or alternatively from the instance metadata store, or alternatively from a file with a given key name.

See loadCredentialsFromEnv, loadCredentialsFromFile and loadCredentialsFromInstanceMetadata for details.

loadCredentialsDefault :: MonadIO io => io (Maybe Credentials) Source

Load credentials from environment variables if possible, or alternative from the default file with the default key name.

Default file: directory/.aws-keys Default key name: default

See loadCredentialsFromEnv and loadCredentialsFromFile for details.