AWS S3 Configuration
Complete guide for configuring AWS S3 connectivity with FastTransfer.
Authentication Methods
FastTransfer supports multiple AWS authentication methods, listed in order of precedence:
- AWS Credentials File (recommended for local development)
- Environment Variables (recommended for CI/CD)
- IAM Roles (recommended for AWS infrastructure)
1. AWS Credentials File
The most common method for local development and testing.
Location:
- Windows:
C:\Users\YourName\.aws\credentials - Linux:
~/.aws/credentials
Credentials File Format:
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[production]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
[development]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
Configuration File (Optional):
Location: ~/.aws/config
[default]
region = us-east-1
output = json
[profile production]
region = eu-west-1
output = json
[profile development]
region = us-west-2
output = json
Using Profiles with FastTransfer:
# Use default profile
./FastTransfer \
...
--directory "s3://my-bucket/exports" \
--fileoutput "data.parquet" \
...
# Use production profile
./FastTransfer \
...
--directory "s3://prod-bucket/exports" \
--cloudprofile "production" \
--fileoutput "data.parquet" \
...
# Use development profile
./FastTransfer \
...
--directory "s3://dev-bucket/exports" \
--cloudprofile "development" \
--fileoutput "data.parquet" \
...
2. Environment Variables
Useful for CI/CD pipelines and containerized environments.
- Windows (PowerShell)
- Linux
# Set AWS credentials
$env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
$env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
$env:AWS_DEFAULT_REGION="us-east-1"
# Optional: Session token for temporary credentials
$env:AWS_SESSION_TOKEN="FwoGZXIvYXdzEBYaD..."
# Run FastTransfer
.\\FastTransfer.exe `
...
--directory "s3://my-bucket/exports" `
--fileoutput "data.parquet" `
...
# Set AWS credentials
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_DEFAULT_REGION="us-east-1"
# Optional: Session token for temporary credentials
export AWS_SESSION_TOKEN="FwoGZXIvYXdzEBYaD..."
# Run FastTransfer
./FastTransfer \
...
--directory "s3://my-bucket/exports" \
--fileoutput "data.parquet" \
...
3. IAM Roles (EC2, ECS, Lambda)
When FastTransfer runs on AWS infrastructure, it can use automatically the instance's IAM role. No credentials configuration needed!
Supported AWS Services:
- Amazon EC2 instances
- Amazon ECS tasks
- AWS Lambda functions
- AWS Batch jobs
- Amazon EKS pods (with IAM roles for service accounts)
Example IAM Policy for FastTransfer:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::my-bucket/exports/*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::my-bucket"
}
]
}
S3 URI Format
s3://bucket-name/path/to/directory/
URI Examples
# Root of bucket
--directory "s3://my-bucket"
# Single folder level
--directory "s3://my-bucket/exports"
# Multiple folder levels
--directory "s3://my-bucket/exports/sales/2024"
# Hive-style partitioning
--directory "s3://my-bucket/data/year=2024/month=01/day=15"
Complete Examples
Basic Export to S3
- Windows
- Linux
.\\FastTransfer.exe `
--connectiontype "mssql" `
--server "localhost" `
--database "SalesDB" `
--trusted `
--sourceschema "dbo" `
--sourcetable "orders" `
--directory "s3://my-bucket/exports/{sourcetable}" `
--fileoutput "{sourcetable}.parquet"
./FastTransfer \
--connectiontype "mssql" \
--server "localhost" \
--database "SalesDB" \
--trusted \
--sourceschema "dbo" \
--sourcetable "orders" \
--directory "s3://my-bucket/exports/{sourcetable}" \
--fileoutput "{sourcetable}.parquet"
Parallel Export with Profile
- Windows
- Linux
.\\FastTransfer.exe `
--connectiontype "mssql" `
--server "prod-sql-01" `
--database "SalesDB" `
--trusted `
--query "SELECT * FROM Sales.Orders WHERE OrderDate >= '2024-01-01'" `
--directory "s3://prod-datalake/sales/orders" `
--fileoutput "orders.parquet" `
--parallelmethod "RangeId" `
--distributekeycolumn "OrderID" `
--paralleldegree 8 `
--cloudprofile "production"
./FastTransfer \
--connectiontype "mssql" \
--server "prod-sql-01" \
--database "SalesDB" \
--trusted \
--query "SELECT * FROM Sales.Orders WHERE OrderDate >= '2024-01-01'" \
--directory "s3://prod-datalake/sales/orders" \
--fileoutput "orders.parquet" \
--parallelmethod "RangeId" \
--distributekeycolumn "OrderID" \
--paralleldegree 8 \
--cloudprofile "production"
Export with Date Partitioning
- Windows
- Linux
.\\FastTransfer.exe `
--connectiontype "pgsql" `
--server "localhost" `
--port "5432" `
--database "analytics" `
--user "postgres" `
--password "postgres" `
--sourceschema "public" `
--sourcetable "events" `
--directory "s3://analytics-bucket/events/" `
--fileoutput "events.parquet" `
--parallelmethod "DataDriven" `
--distributekeycolumn "eventmonth" `
--paralleldegree 10
./FastTransfer \
--connectiontype "pgsql" \
--server "localhost" \
--port "5432" \
--database "analytics" \
--user "postgres" \
--password "postgres" \
--sourceschema "public" \
--sourcetable "events" \
--directory "s3://analytics-bucket/events/" \
--fileoutput "events.parquet" \
--parallelmethod "DataDriven" \
--distributekeycolumn "eventmonth" \
--paralleldegree 10
S3-Compatible Storage
FastTransfer works with S3-compatible storage services like MinIO, DigitalOcean Spaces, Wasabi, and OVH Object Storage.
Configuration for S3-Compatible Services
- Windows (PowerShell)
- Linux
# Set endpoint URL for S3-compatible service
$env:AWS_ACCESS_KEY_ID="your-access-key"
$env:AWS_SECRET_ACCESS_KEY="your-secret-key"
$env:S3_ENDPOINT="https://s3.your-provider.com"
# For MinIO
$env:S3_ENDPOINT="http://localhost:9000"
# Set endpoint URL for S3-compatible service
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export S3_ENDPOINT="https://s3.your-provider.com"
# For MinIO
export S3_ENDPOINT="http://localhost:9000"
Required Permissions
Minimum Permissions
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::my-bucket/exports/*"
}
]
}
Recommended Permissions
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::my-bucket/exports/*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::my-bucket",
"Condition": {
"StringLike": {
"s3:prefix": "exports/*"
}
}
}
]
}