Files
foxhunt/docs/S3_INTEGRATION.md
jgrusewski 8cf9437c78 🔧 Partial fixes: S3 integration, SIMD improvements, field access corrections
- Restored S3 storage functionality with AWS SDK
- Fixed field access issues (removed underscore prefixes)
- Created Benzinga historical module
- Initial SIMD optimization (needs consolidation)
- Fixed multiple compilation errors

PENDING: SIMD consolidation, config centralization, shared libraries
2025-09-25 01:05:32 +02:00

470 lines
12 KiB
Markdown

# S3 Integration Guide for Foxhunt HFT System
## Overview
This document provides comprehensive guidance for integrating AWS S3 storage with the Foxhunt High-Frequency Trading (HFT) system. S3 is used for cold storage, data archival, and backup functionality across multiple system components.
## Architecture Overview
The S3 integration consists of three main components:
1. **S3 Archival Service** (`core/src/storage/s3_archival.rs`) - General-purpose archival for historical data
2. **S3 Model Storage** (`services/ml_training_service/src/storage.rs`) - ML model artifact storage
3. **S3 Checkpoint Storage** (`ml/src/checkpoint/storage.rs`) - ML model checkpoint management
## Configuration
### Environment Variables
Create a `.env` file based on `.env.example` with the following variables:
#### Required AWS Credentials
```bash
# AWS Authentication
AWS_ACCESS_KEY_ID=your_access_key_id
AWS_SECRET_ACCESS_KEY=your_secret_access_key
AWS_REGION=us-east-1
# Optional session token (for temporary credentials)
AWS_SESSION_TOKEN=your_session_token
```
#### S3 Bucket Configuration
```bash
# Primary buckets for different data types
S3_ARCHIVAL_BUCKET=foxhunt-archives
S3_MODEL_STORAGE_BUCKET=foxhunt-models
S3_CHECKPOINT_BUCKET=foxhunt-checkpoints
# Storage classes for cost optimization
S3_DEFAULT_STORAGE_CLASS=STANDARD_IA
S3_COMPLIANCE_STORAGE_CLASS=GLACIER
```
#### Optional Configuration
```bash
# Archival settings
S3_ARCHIVAL_RETENTION_DAYS=2555 # 7 years for regulatory compliance
S3_ENABLE_COMPRESSION=true
S3_ENABLE_LIFECYCLE=true
S3_ENABLE_ENCRYPTION=true
# Performance settings
S3_MULTIPART_THRESHOLD=8388608 # 8MB
S3_MAX_CONCURRENT_UPLOADS=4
S3_MAX_RETRIES=3
```
### Vault Integration (Recommended for Production)
For enhanced security, use HashiCorp Vault to store AWS credentials:
```bash
# Vault configuration
VAULT_ADDR=http://localhost:8200
VAULT_TOKEN=your_vault_token
VAULT_S3_CREDENTIALS_PATH=secret/data/foxhunt/s3
```
Store credentials in Vault:
```bash
vault kv put secret/foxhunt/s3 \
access_key_id="your_access_key_id" \
secret_access_key="your_secret_access_key" \
bucket_name="foxhunt-models" \
region="us-east-1"
```
## Usage Examples
### 1. S3 Archival Service
For archiving historical data, trading logs, and compliance records:
```rust
use foxhunt_core::storage::{S3ArchivalService, ArchivalDataType};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Initialize from environment variables
let archival_service = S3ArchivalService::new().await?;
// Archive trading logs
let trading_logs = b"trade_data_here";
let archive_id = archival_service.archive_data(
&ArchivalDataType::TradingLogs,
trading_logs,
Some("Daily trading logs for 2024-01-15".to_string())
).await?;
println!("Archived with ID: {}", archive_id);
Ok(())
}
```
### 2. S3 Model Storage
For storing ML model artifacts in the training service:
```rust
use foxhunt_ml_training::storage::{S3ModelStorage, StorageManager};
use uuid::Uuid;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Initialize from environment variables
let s3_storage = S3ModelStorage::from_env().await?;
// Store a model
let job_id = Uuid::new_v4();
let model_data = b"serialized_model_data";
let artifact_path = s3_storage.store_model(job_id, model_data).await?;
println!("Model stored at: {}", artifact_path);
// Retrieve the model
let retrieved_data = s3_storage.retrieve_model(&artifact_path).await?;
assert_eq!(model_data, &retrieved_data[..]);
Ok(())
}
```
### 3. S3 Checkpoint Storage
For ML model checkpoint management:
```rust
use foxhunt_ml::checkpoint::{S3CheckpointStorage, CheckpointMetadata, CheckpointStorage};
use foxhunt_ml::model::ModelType;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Initialize from environment variables
let checkpoint_storage = S3CheckpointStorage::from_env().await?;
// Create checkpoint metadata
let metadata = CheckpointMetadata {
model_type: ModelType::MAMBA,
model_name: "mamba_v1".to_string(),
version: "1.0.0".to_string(),
checkpoint_id: "checkpoint_001".to_string(),
created_at: chrono::Utc::now(),
epoch: Some(10),
step: Some(1000),
loss: Some(0.0234),
accuracy: Some(0.9567),
file_size: 1024 * 1024, // 1MB
compression: Some("gzip".to_string()),
metadata: Default::default(),
};
// Save checkpoint
let checkpoint_data = b"checkpoint_data_here";
checkpoint_storage.save_checkpoint(
"mamba_v1_epoch_10.ckpt",
checkpoint_data,
&metadata
).await?;
// Load checkpoint
let loaded_data = checkpoint_storage.load_checkpoint("mamba_v1_epoch_10.ckpt").await?;
assert_eq!(checkpoint_data, &loaded_data[..]);
Ok(())
}
```
## AWS Credential Management
### Option 1: Environment Variables (Development)
Set the required environment variables in your `.env` file or shell:
```bash
export AWS_ACCESS_KEY_ID="your_key"
export AWS_SECRET_ACCESS_KEY="your_secret"
export AWS_REGION="us-east-1"
```
### Option 2: AWS Credential Chain (Production)
The implementation automatically falls back to AWS credential chain:
- IAM roles (recommended for EC2/ECS)
- AWS profiles (`~/.aws/credentials`)
- Environment variables
- Instance metadata service
### Option 3: HashiCorp Vault (Enterprise)
For the ML Training Service, credentials are retrieved from Vault:
```rust
let storage_manager = StorageManager::new(config, Some(vault_client)).await?;
```
## Cost Optimization
### Storage Classes
The system automatically selects appropriate storage classes:
- **STANDARD**: Frequently accessed data (trading logs)
- **STANDARD_IA**: Infrequent access (model checkpoints, historical data)
- **GLACIER**: Long-term compliance data (7+ years)
- **DEEP_ARCHIVE**: Very long-term archival (10+ years)
### Lifecycle Policies
Automatic transitions are configured when `S3_ENABLE_LIFECYCLE=true`:
1. **Day 0-30**: STANDARD storage
2. **Day 30-90**: STANDARD_IA storage
3. **Day 90-365**: GLACIER storage
4. **Day 365+**: DEEP_ARCHIVE storage
### Compression
Enable compression to reduce storage costs:
```bash
S3_ENABLE_COMPRESSION=true
```
Supported algorithms:
- **gzip**: General purpose, good compression ratio
- **lz4**: Fast compression/decompression
- **zstd**: Best compression ratio
## Security Best Practices
### 1. Encryption
- **Server-side encryption**: Enabled by default (AES-256)
- **In-transit encryption**: HTTPS/TLS for all API calls
- **Client-side encryption**: Optional for sensitive data
### 2. Access Control
```bash
# Enable versioning for data protection
S3_ENABLE_VERSIONING=true
# Enable MFA delete for critical buckets (production)
S3_ENABLE_MFA_DELETE=true
```
### 3. IAM Policies
Minimum required permissions:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket",
"s3:HeadBucket"
],
"Resource": [
"arn:aws:s3:::foxhunt-*",
"arn:aws:s3:::foxhunt-*/*"
]
}
]
}
```
## Monitoring and Logging
### CloudWatch Metrics
Monitor the following metrics:
- **BucketSizeBytes**: Total storage usage
- **NumberOfObjects**: Object count per bucket
- **AllRequests**: API request volume
- **Errors**: Failed requests
### CloudTrail Logging
Enable CloudTrail for audit logging:
- All S3 API calls
- Access patterns
- Data lifecycle events
### Application Logs
The Rust implementation provides structured logging:
```rust
use tracing::{info, warn, error};
// Logs are automatically generated for:
// - Connection establishment
// - Upload/download operations
// - Error conditions
// - Performance metrics
```
## Troubleshooting
### Common Issues
#### 1. Access Denied Errors
```
Failed to connect to S3 bucket. Check credentials and bucket permissions.
```
**Solution**:
- Verify AWS credentials are correct
- Check IAM permissions include required S3 actions
- Ensure bucket exists and is accessible
#### 2. Region Mismatch
```
The bucket is in this region: us-west-2. Please use this region.
```
**Solution**:
- Set correct `AWS_REGION` environment variable
- Ensure bucket exists in the specified region
#### 3. Large File Upload Failures
```
Request timeout during multipart upload
```
**Solution**:
- Increase `S3_MAX_RETRIES` value
- Check network connectivity and bandwidth
- Consider using smaller `S3_PART_SIZE`
#### 4. Credential Chain Issues
```
Unable to load credentials from any credential source
```
**Solution**:
- Verify environment variables are set
- Check AWS CLI configuration: `aws configure list`
- For EC2/ECS, ensure IAM role is attached
### Debug Mode
Enable verbose logging for troubleshooting:
```bash
RUST_LOG=debug cargo run --bin your_service
```
## Performance Tuning
### Upload Performance
```bash
# Multipart upload threshold (8MB default)
S3_MULTIPART_THRESHOLD=8388608
# Concurrent uploads (4 default)
S3_MAX_CONCURRENT_UPLOADS=4
# Part size for multipart uploads (5MB default)
S3_PART_SIZE=5242880
```
### Connection Pooling
The AWS SDK handles connection pooling automatically, but you can tune:
- Request timeout settings
- Connection limits
- Retry strategies
### Batch Operations
For high-throughput scenarios:
- Use multipart uploads for large files (>5MB)
- Batch small operations where possible
- Consider S3 Transfer Acceleration for global access
## Backup and Disaster Recovery
### Cross-Region Replication
Configure replication for critical data:
```bash
# Primary region
AWS_REGION=us-east-1
# Backup region for DR
S3_BACKUP_REGION=us-west-2
```
### Backup Strategy
- **Daily**: Incremental backups of trading data
- **Weekly**: Full model checkpoint backups
- **Monthly**: Complete archive snapshots
- **Annual**: Compliance data verification
### Recovery Testing
Regular recovery testing procedures:
1. Test credential rotation
2. Verify backup integrity
3. Practice disaster recovery scenarios
4. Validate cross-region access
## Integration with Other Services
### PostgreSQL Integration
Backup database dumps to S3:
```rust
// Archive PostgreSQL backups
let backup_data = create_database_backup().await?;
archival_service.archive_data(
&ArchivalDataType::ComplianceData,
&backup_data,
Some("PostgreSQL backup".to_string())
).await?;
```
### Redis Integration
Archive Redis snapshots:
```rust
// Archive Redis snapshots for replay
let redis_snapshot = create_redis_snapshot().await?;
archival_service.archive_data(
&ArchivalDataType::TradingLogs,
&redis_snapshot,
Some("Redis trading state".to_string())
).await?;
```
## Compliance and Regulatory Requirements
### MiFID II Compliance
- **Data Retention**: 7 years minimum (2555 days configured)
- **Data Integrity**: Checksums and versioning enabled
- **Audit Trail**: CloudTrail integration for access logging
- **Encryption**: At-rest and in-transit encryption
### SOX Compliance
- **Change Control**: Versioned objects with metadata
- **Access Control**: IAM-based permissions
- **Monitoring**: CloudWatch metrics and alerting
### GDPR Considerations
- **Data Location**: Specify appropriate AWS regions
- **Data Deletion**: Implement data retention policies
- **Access Logging**: Track all data access for audits
## Future Enhancements
### Planned Features
1. **S3 Intelligent Tiering**: Automatic cost optimization
2. **Cross-Region Sync**: Multi-region deployment support
3. **Compression Algorithms**: Additional compression options
4. **Metadata Indexing**: Enhanced search capabilities
5. **Cost Analytics**: Detailed cost breakdown and optimization
### Performance Improvements
1. **Connection Pooling**: Advanced connection management
2. **Parallel Processing**: Concurrent upload/download operations
3. **Caching Layer**: Redis-based metadata caching
4. **Batch Operations**: Bulk operations for efficiency
---
## Getting Started Checklist
- [ ] Copy `.env.example` to `.env`
- [ ] Configure AWS credentials (environment variables or IAM role)
- [ ] Set up S3 buckets with appropriate names
- [ ] Enable feature flags: `s3-archival`, `s3-storage`
- [ ] Test connection: `cargo test s3_connection_test`
- [ ] Configure lifecycle policies in AWS Console
- [ ] Set up CloudWatch monitoring
- [ ] Enable CloudTrail for audit logging
- [ ] Test backup and recovery procedures
For additional support, refer to the AWS SDK for Rust documentation or contact the development team.