AWS SDK for Java v2 核心库 是做什么的?
提供AWS SDK for Java 2.x的客户端配置、凭证解析、HTTP客户端调优、超时、重试和测试模式。适用于创建或强化AWS服务客户端、组装Spring Boot Bean、调试认证或区域问题,以及选择同步或异步SDK用法。
概述
此技能涵盖了使用AWS SDK for Java v2构建稳定且高效的AWS服务客户端所需的核心模式,包括:
- 客户端配置(区域、端点覆盖、双栈模式)
- 凭证解析(默认凭证链、STS角色切换、凭证缓存)
- HTTP客户端调优(连接池大小、空闲连接超时、TLS设置)
- 超时与重试策略(请求超时、指数退避、重试模式选择)
- 同步与异步客户端的选择依据
- 测试与本地开发支持(模拟HTTP后端、内存测试、本地Stack端点)
- Spring Boot集成(通过环境变量或属性源进行配置)
支持的服务
- 存储:S3、S3 Glacier
- 数据库:DynamoDB、RDS、Aurora
- 消息队列:SQS、SNS、EventBridge
- 计算:Lambda、ECS、EKS、EC2
- 监控:CloudWatch、X-Ray
- 安全:IAM、KMS、Secrets Manager
- 无服务器:API Gateway、Step Functions
核心构建块
AWS配置文件匹配
使用标准 ~/.aws/config 配置文件:
[profile my-profile]
region = eu-west-1
output = json
role_arn = arn:aws:iam::123456789012:role/my-role
source_profile = default
Credentials Provider选择
使用默认凭证链:
StaticCredentialsProvider.create(
AwsBasicCredentials.create("accessKey", "secretKey")
)
或使用STS角色切换:
StsAssumeRoleCredentialsProvider.builder()
.stsClient(stsClient)
.refreshRequest(() -> AssumeRoleRequest.builder()
.roleArn("arn:aws:iam::123456789012:role/my-role")
.roleSessionName("my-session")
.build())
.build()
用法
基本设置
S3Client client = S3Client.builder()
.region(Region.EU_WEST_1)
.credentialsProvider(DefaultCredentialsProvider.create())
.httpClient(ApacheHttpClient.builder()
.maxConnections(100)
.connectionTimeout(Duration.ofSeconds(5))
.build())
.overrideConfiguration(c -> c
.apiCallTimeout(Duration.ofSeconds(30))
.retryPolicy(RetryPolicy.builder()
.numRetries(3)
.build()))
.build();
Spring Boot配置
aws:
region: eu-west-1
credentials:
access-key: ${AWS_ACCESS_KEY_ID}
secret-key: ${AWS_SECRET_ACCESS_KEY}
http:
max-connections: 100
connection-timeout: 5000
retry:
mode: adaptive
max-attempts: 3
故障排查
- 凭证错误:检查
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量 - 区域错误:使用
aws:region属性或AWS_REGION环境变量 - 连接错误:使用
connectionTimeout和readTimeout设置 - 重试耗尽:调整
numRetries和backoffStrategy - 速率限制:实现指数退避或使用自适应重试模式
安全考虑
- 不要硬编码凭证,使用环境变量或
DefaultCredentialsProvider - 使用TLS 1.2及以上版本进行安全通信
- 启用加密(S3、DynamoDB等)
- 使用IAM角色分配最小权限
- 审计日志记录API调用用于跟踪
性能优化
- 连接复用:使用连接池(默认:50个连接)
- 请求批处理:使用SQS或DynamoDB批处理操作
- 异步处理:使用异步客户端提高并发性
- 缓存:在适用时缓存凭证和区域元数据
- 压缩:对大型负载使用gzip压缩
- 监控指标:使用CloudWatch监控请求延迟和错误率