AWSAuth.Req (AWSAuth v1.3.0)
View SourceReq plugin for AWS Signature V4 authentication.
This module provides seamless integration between ex_aws_auth
and the
Req
HTTP client library. It automatically signs requests with AWS Signature V4
without requiring manual header manipulation.
Usage
# Load credentials from environment
creds = AWSAuth.Credentials.from_env()
# Attach to a Req request
Req.new(url: url, method: :post, body: body)
|> AWSAuth.Req.attach(credentials: creds, service: "bedrock")
|> Req.request()
# Or create a reusable client
client =
Req.new(base_url: "https://bedrock-runtime.us-east-1.amazonaws.com")
|> AWSAuth.Req.attach(credentials: creds, service: "bedrock")
# Make multiple requests
Req.post!(client, url: "/model/my-model/invoke", json: params)
Options
:credentials
- (required)AWSAuth.Credentials
struct or keyword list with::access_key_id
- AWS Access Key ID:secret_access_key
- AWS Secret Access Key:session_token
- AWS Session Token (optional):region
- AWS region (optional, defaults to "us-east-1")
:service
- (required) AWS service name (e.g., "s3", "bedrock", "lambda"):region
- AWS region (optional, overrides region from credentials)
How it Works
The plugin adds a request step that:
- Extracts the request method, URL, headers, and body
- Normalizes Req's list-valued headers to string values for signing
- Signs the request using AWS Signature V4
- Returns headers in Req's expected format (
%{key => [value]}
)
Examples
# Basic usage with environment credentials
creds = AWSAuth.Credentials.from_env()
response =
Req.new()
|> AWSAuth.Req.attach(credentials: creds, service: "s3")
|> Req.get!(url: "https://my-bucket.s3.amazonaws.com/object")
# With explicit credentials
creds = %AWSAuth.Credentials{
access_key_id: "AKIAIOSFODNN7EXAMPLE",
secret_access_key: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
region: "us-west-2"
}
response =
Req.new(url: url, method: :post, json: data)
|> AWSAuth.Req.attach(credentials: creds, service: "bedrock")
|> Req.request!()
# With session token (STS temporary credentials)
creds = %AWSAuth.Credentials{
access_key_id: "ASIAIOSFODNN7EXAMPLE",
secret_access_key: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
session_token: "FwoGZXIvYXdzEBYaDHhBTEMPLESessionToken123",
region: "us-east-1"
}
response =
Req.new()
|> AWSAuth.Req.attach(credentials: creds, service: "lambda")
|> Req.post!(url: lambda_url, json: payload)
# Override region
response =
Req.new()
|> AWSAuth.Req.attach(
credentials: creds,
service: "s3",
region: "eu-west-1"
)
|> Req.get!(url: "https://my-bucket.s3.eu-west-1.amazonaws.com/object")
Summary
Functions
Attaches AWS Signature V4 signing to a Req request.
Functions
@spec attach( Req.Request.t(), keyword() ) :: Req.Request.t()
Attaches AWS Signature V4 signing to a Req request.
Parameters
request
- AReq.Request
structopts
- Keyword list of options (see module docs for details)
Returns
A Req.Request
with the AWS signing step prepended.
Examples
creds = AWSAuth.Credentials.from_env()
request =
Req.new(url: url)
|> AWSAuth.Req.attach(credentials: creds, service: "bedrock")