AWS SDK for Java v2 2.33.x 版本全览:可拆分请求体重构、SigV4 性能优化与 14 个版本的服务 API 演进
2026/9/18 20:13:25 网站建设 项目流程

AWS SDK for Java v2 2.33.x 版本全览:可拆分请求体重构、SigV4 性能优化与 14 个版本的服务 API 演进

【免费下载链接】aws-sdk-java-v2The official AWS SDK for Java - Version 2项目地址: https://gitcode.com/GitHub_Trending/aw/aws-sdk-java-v2

本篇基于仓库 changelogs/2.33.x-CHANGELOG.md 对 AWS SDK for Java v2 2.33.0~2.33.13 共 14 个版本的变更进行系统解读,聚焦 SDK 核心引擎的请求体拆分 API 重构、SigV4 签名性能优化、依赖升级与关键缺陷修复,并逐版本梳理覆盖数十个 AWS 服务的 API 演进。读完本文,你将掌握 2.33.x 中AsyncRequestBody#splitCloseableBufferedSplittableAsyncRequestBody等新 API 的用法与设计动机,理解各修复背后的底层原理,并了解如何将项目安全升级到该版本线。

一、2.33.x 发布节奏与版本总览

2.33.x 系列从 2025-08-29 的 2.33.0 开始,到 2025-09-18 的 2.33.13 结束,采用每周一至两次的高频迭代节奏。所有历史变更日志统一存放在仓库 changelogs 目录,每个 minor 版本线一个文件(如 2.34.x-CHANGELOG.md、2.35.x-CHANGELOG.md),根目录 CHANGELOG.md 汇总全部版本。

版本发布日期核心内容摘要
2.33.02025-08-29可拆分请求体 API 重构(splitCloseable)、SigV4 RPC 签名性能优化
2.33.12025-09-02Endpoint/Partition 元数据更新、User Notifications Org 支持
2.33.22025-09-03Route 53 新西兰区域、Transcribe 自动语言识别、AmazonMQ CONFIG_MANAGED
2.33.32025-09-04EC2 m8i 系列、OpenSearch Serverless FIPS/FedRAMP
2.33.42025-09-05Netty 4.1.126、DynamoDB Enhanced 嵌套对象注解支持
2.33.52025-09-08X-Forwarded-For 不再参与 SigV4 签名
2.33.62025-09-09CloudWatch DescribeAlarmContributors API
2.33.72025-09-10fromFile异常传播修复、AutoGeneratedTimestamp 变更回滚
2.33.82025-09-11MediaLive HLS 参数透传、EMR Containers nodeLabel
2.33.92025-09-12Jackson 升级至 2.19.0
2.33.102025-09-15S3 Control 加密过滤器、S3 multipart 校验
2.33.112025-09-16SdkLengthAwareInputStreamcontent-length 保留修复
2.33.122025-09-17Network Firewall SNI 验证、mac-m4 实例类型
2.33.132025-09-18Budgets 健康状态异常、EC2 Allowed AMIs 新参数

其中AWS SDK for Java v2自身在各版本持续"Updated endpoint and partition metadata",属于常规的区域与分区元数据同步,影响面主要在端点解析,下文不再逐一重复。

二、SDK 核心引擎升级与重构(重点)

2.33.x 最值得关注的是 SDK 自身的 API 演进与性能/缺陷修复,均可在 core/sdk-core 源码中得到印证。

2.33.0:可拆分请求体 API 重构——splitCloseable与可重试子请求体

2.33.0 对异步请求体的拆分能力进行了体系化重构,引入三个相互配合的组件:

  1. 新增AsyncRequestBody#splitCloseableAPI:返回SdkPublisher<CloseableAsyncRequestBody>,替代原有split
  2. 新增CloseableAsyncRequestBody接口:同时继承AsyncRequestBodySdkAutoClosable,子请求体在使用完毕后可被关闭以释放资源;
  3. 新增BufferedSplittableAsyncRequestBody:一个AsyncRequestBody装饰器,可将任意请求体拆分为多个可独立重试的子请求体;
  4. 废弃AsyncRequestBody#split:签名不变,但返回值由SdkPublisher<AsyncRequestBody>变为SdkPublisher<CloseableAsyncRequestBody>,建议迁移到新 API。

从源码看,废弃方法 AsyncRequestBody.java#L574-L585 中标注了@Deprecated@deprecated use {@link #splitCloseable(AsyncRequestBodySplitConfiguration)} instead.,其实现通过SplittingPublisher构建拆分器并将retryableSubAsyncRequestBodyEnabled置为false;而新的splitCloseable(AsyncRequestBody.java#L606-L640)则允许各实现类覆盖,以产出可重试的子请求体。

拆分行为约定:默认 chunk size 为 2MB、默认 buffer size(maxMemoryUsageInBytes)为 8MB;当请求体contentLength()已知时,每个子请求体初始化后即发送给下游订阅者,而 content length 未知时则须等该 chunk 完整缓冲后再发送,此时配置的maxMemoryUsageInBytes必须大于等于chunkSizeInBytes

BufferedSplittableAsyncRequestBody的设计要点(见 BufferedSplittableAsyncRequestBody.java):

  • 静态工厂create(AsyncRequestBody delegate):默认不启用发送前全量缓冲,在 content-length 已知路径下,每个部分初始化后立即发送,让 HTTP 连接与数据到达并行;
  • 构造器builder().asyncRequestBody(...).bufferBeforeSend(true):开启发送前全量缓冲后,每个部分完整缓冲完毕才发送下游,从而保证重试缓冲在 HTTP 层订阅前必然就绪,对慢速流式数据源(如 SFTP)可让"按部分重试"确定性成功;
  • 内存占用说明:开启bufferBeforeSend不会增加峰值内存,缓冲数据始终受AsyncRequestBodySplitConfigurationbufferSizeInBytes约束,差异仅在数据在下游发送前的滞留时长;
  • 重试前提:只有首次订阅时全部数据被成功缓冲,重试才能成立;若首个订阅者因提前取消或异常未能消费完数据,后续重试会因数据不完整而失败;
  • 使用约束:订阅者必须关闭每个CloseableAsyncRequestBody以释放资源(splitCloseable的 Javadoc 明确标注 "The subscriber MUST close each CloseableAsyncRequestBody to ensure resource is released")。

代码示例(摘自该类 Javadoc 的{@snippet}):

// 简单用法:默认行为,立即发送 AsyncRequestBody originalBody = AsyncRequestBody.fromString("Hello World"); BufferedSplittableAsyncRequestBody retryableBody = BufferedSplittableAsyncRequestBody.create(originalBody); // 针对慢速流式源,开启发送前全量缓冲 BufferedSplittableAsyncRequestBody fullBufferedBody = BufferedSplittableAsyncRequestBody.builder() .asyncRequestBody(originalBody) .bufferBeforeSend(true) .build();

该重构的测试覆盖集中在 SplittingPublisherTest.java、ByteBuffersAsyncRequestBodySplitTest.java 与 AsyncRequestBodyTest.java,可用于理解拆分、重试与资源关闭的预期行为。

2.33.0:SigV4 签名性能优化(RPC 协议)

2.33.0 同时改善了 SigV4 签名性能,尤其针对 RPC 协议(如 Query/JSON-RPC 风格的服务)。签名是每个 AWS 请求必经的热路径,此优化直接影响所有使用 SigV4 认证的同步与异步客户端的高吞吐场景,属于无行为变化的内部性能改进,升级后无需修改代码即可受益。

2.33.11:SdkLengthAwareInputStream保留初始 content-length

2.33.11 修复了一个流处理缺陷:调用SdkLengthAwareInputStream.mark后,将保留初始的 content-length。该流是 SDK 核心 IO 层的长度感知包装流,用于在流式传输中跟踪剩余字节;此前 mark/reset 过程中可能导致长度信息漂移,进而影响以 content-length 为准的请求头与重试逻辑。修复确保无论流被标记/重置,其对外暴露的长度语义保持一致。

2.33.7:fromFile异常传播修复与 DynamoDB 注解变更回滚

2.33.7 包含两项 SDK 自身修复:

  • AsyncRequestBody#fromFile文件修改异常传播:确保读取文件过程中若文件发生修改等异常,能被正确向上传播给调用方,避免静默吞掉异常导致数据不一致或卡死;
  • 回滚AutoGeneratedTimestampRecordExtension变更:该变更是 2.33.4 引入的,可能破坏用户手工配置的表结构(对应 issue #6410),因此在 2.33.7 中被回滚。这也提醒升级用户:若你在 2.33.4~2.33.6 之间启用了该扩展的新行为,升级到 2.33.7 后行为会恢复到 2.33.3 及之前的语义。

2.33.5:X-Forwarded-For 不再参与 SigV4 签名

2.33.5 修复了代理场景下 X-Forwarded-For 头被错误纳入 SigV4 签名计算的问题(由社区贡献者 @brandondahler 提交)。代理链添加的 X-Forwarded-For 值在每次转发时可能变化,参与签名会导致签名失效或需要持续重新签名;修复后该头不再参与签名,配合代理部署的用户应关注此行为变化。

2.33.9 / 2.33.4:依赖升级

  • 2.33.9:Jackson 与 Jackson jr 升级至 2.19.0。Jackson 是 SDK 内部 JSON 序列化/反序列化的基础依赖,此升级通常带来性能与安全修复,但需注意若你的应用同时直接依赖 Jackson,应保持版本协调以避免冲突;
  • 2.33.4:Netty 升级至 4.1.126(由 @mrdziuban 贡献)。Netty 是默认异步 HTTP 客户端 netty-nio-client 的底层实现,升级带来 bug 修复与稳定性提升,对使用异步客户端的用户影响直接。

2.33.4:archetypecredentialProvider参数默认值

2.33.4 为官方 Maven archetype(快速开始模板,见 archetypes 目录)的credentialProvider参数设置了默认值,避免使用mvn archetype:generate生成项目时因参数缺失导致构建配置不完整。使用 archetype-app-quickstart 或 archetype-lambda 生成新项目时,即使不显式指定该参数也会得到合法的默认配置。

三、DynamoDB Enhanced Client:嵌套对象的注解支持

2.33.4 为 dynamodb-enhanced(DynamoDB 增强型客户端)新增了对嵌套对象内属性的注解支持:

  • @DynamoDbAutoGeneratedTimestampAttribute:嵌套对象内的属性也可自动生成/更新时间戳;
  • @DynamoDbUpdateBehavior:嵌套属性的更新行为注解,其生效前提是使用IgnoreNullsMode.SCALAR_ONLY(该模式仅忽略标量 null 字段,从而允许嵌套对象内的更新行为注解被识别)。

注解定义位于 services-custom/dynamodb-enhanced 的 mapper 注解包(如 DynamoDbUpdateBehavior.java)。使用增强型客户端且数据模型包含嵌套对象(document 类型字段)的开发者,可将时间戳自动管理下沉到嵌套层级。

四、S3 与 S3 Control 的更新

2.33.x 对 S3 生态有两处直接变更:

  • 2.33.10:S3 multipart 下载附加校验(Amazon S3 Bugfix)。Java multipart S3 客户端在分段下载操作中新增了额外校验逻辑,涉及分段范围、响应完整性等,降低大对象分段下载时数据错位的风险;
  • 2.33.10:S3 Control 新增三个加密过滤器(AWS S3 Control Feature)。用于存储桶/目录桶等资源的清单与策略过滤:
    • EncryptionType:支持 SSE-S3、SSE-KMS、DSSE-KMS、SSE-C、NOT-SSE;
    • KmsKeyArn:针对 SSE-KMS 与 DSSE-KMS 指定 KMS 密钥 ARN;
    • BucketKeyEnabled:针对 SSE-KMS 的存储桶密钥(Bucket Key)启用状态过滤。

另外 2.33.5 提到 Amazon S3 的 "Expires" 参数向后兼容工作,属服务端 API 语义调整,SDK 侧同步更新模型。

五、云服务 API 演进速览(2.33.1 ~ 2.33.13)

除 SDK 内核外,2.33.x 还同步了海量服务 API。以下按版本归纳(均已对应到具体服务,可直接在仓库 services 目录找到对应客户端模块):

2.33.13(2025-09-18)

  • AWS Budgets:新增BillingViewHealthStatus异常——当预算基于的 Billing View 不处于 HEALTHY 状态时创建/更新预算会抛出该异常;
  • Amazon Bedrock:提高策略构建文档(policy build document)的最大大小;DeleteAutomatedReasoningPolicyBuildWorkflow增加ResourceInUseException;修正UpdateAutomatedReasoningPolicyTestCaseRequest
  • Amazon Chime SDK MessagingGetMessagingSessionEndpointAPI 现返回支持 IPv4/IPv6 的 dual-stack WebSocket 端点;
  • Amazon EC2:Allowed AMIs 新增marketplaceProductCodesdeprecationTimeConditioncreationDateConditionimageNames四个筛选参数。

2.33.12(2025-09-17)

  • AWS Network Firewall:在确认并验证 Server Name Indication(SNI)之前阻止与目标服务器的 TLS 握手;监控仪表盘对 PrivateLink endpoint 候选提供更深洞察,并支持按 IP 地址与协议过滤;
  • AWS Parallel Computing Service:支持 Amazon EC2 Capacity Blocks for ML;
  • Amazon EC2:新增mac-m4.metalmac-m4pro.metal实例类型。

2.33.11(2025-09-16)

  • AWS Budgets:预算配置支持自定义时间周期;
  • Amazon CloudWatch Logs:metric 与 subscription filter API 新增 2 个参数,可按系统字段值过滤日志事件,并可将系统字段值作为维度输出、作为附加元数据发送到客户目标;
  • Amazon IVS RealTime:支持基于 participant token 中的自定义属性值,控制参与者网格布局与 PiP(画中画)布局中的位置;
  • Amazon OpenSearch Ingestion:支持 push 型数据源的跨账户摄取,包括跨账户共享管道的资源策略、跨 VPC(含其他账户 VPC)访问的管道端点管理能力。

2.33.10(2025-09-15)

  • AWS Cost Explorer:新增eusc-de-east-1区域端点支持;
  • AWS Health Imaging:支持 OpenID Connect(OIDC)自定义授权器;
  • CloudWatch Observability Admin Service:支持在客户 Organization 中启用遥测集中化,新增管理 centralization rules 的 API,用于将遥测数据复制到组织内的中心目标。

2.33.9(2025-09-12)

  • Payment Cryptography Control Plane:支持第三方 CA 签发的证书;新增GetCertificateSigningRequestAPI;tr-34 导入/导出支持运行时提供证书。

2.33.8(2025-09-11)

  • AWS Elemental MediaLive:MediaPackage output group 支持直接在 MediaLive 侧控制 HLS 相关参数,并反映到 MediaPackage 输出;
  • Amazon DataZone:IAM 用户 profile 详情中增加 IAM principal id;
  • Amazon ECS:支持展示生命周期钩子(lifecycle hooks)详情;
  • Amazon EMR Containers:container provider 增加nodeLabel支持,辅助虚拟集群与安全配置的硬件隔离;
  • Amazon Elastic VMware ServiceCreateEnvironment支持isHcxPublichcxNetworkAclId(HCX 公网迁移);新增AssociateEipToVlan/DisassociateEipFromVlan弹性 IP 关联 API;
  • Amazon GuardDuty:更新 Java SDK 对 entity set status 的实现;
  • Amazon Prometheus Service:新增 Amazon Prometheus Managed Collector 的 Vended Logs API;
  • Amazon QuickSight:支持账户级自定义权限、更多 Dashboard 选项、Q&A 的 Null 支持;
  • Amazon RDS:RDS Proxy 对 MySQL、MariaDB、PostgreSQL 引擎支持端到端 IAM 认证。

2.33.7(2025-09-10)

  • Network Flow MonitorMonitorLocalResource/MonitorRemoteResource的 type 字段新增枚举值AWS::Region;Workload Insights 与 Monitor top contributors 查询支持新DestinationCategory(INTER_REGION);
  • Payment Cryptography Control Plane:支持跨区域密钥复制(Multi-Region key replication),可选择自动在多个 AWS 区域分发密钥。

2.33.6(2025-09-09)

  • AWS Elemental MediaPackage v2:HLS 与 LL-HLS manifest 输出增加 CUE 标签(SCTE);
  • Amazon CloudWatch:新增DescribeAlarmContributorsAPI(获取 ALARM 状态告警的贡献者);DescribeAlarmHistory支持查询告警贡献者历史;
  • Amazon Connect:支持用户自定义的预定义属性(predefined attributes);
  • Amazon DataZone:支持自定义蓝图(custom blueprints);
  • Amazon SageMaker:SageMaker Studio 支持 IPv6 dual-stack 域选项;新增p6-b200.48xlarge实例类型(JupyterLab 与 CodeEditor);
  • Auto ScalingCancelInstanceRefresh新增WaitForTransitioningInstances参数,取消实例刷新时无需等待进行中的启动/终止。

2.33.5(2025-09-08)

  • AWS IoT SiteWise:API 新增ComputationModelVersion支持;
  • AWS SecurityHubBatchGetStandardsControlAssociationsBatchUpdateStandardsControlAssociationsBatchGetSecurityControls的响应中新增RESOURCE_NOT_FOUND错误码;
  • Amazon S3:对 "Expires" 参数的向后兼容处理。

2.33.4(2025-09-05)

  • AWS Parallel Computing ServiceSlurmCustomSetting增加AccountingStorageEnforce(文档性更新);
  • Amazon ECS:补充 Availability Zone rebalancing 说明(文档性更新);
  • Amazon SageMaker:Notebooks 支持 IPv6 dual-stack;HyperPod 支持 Tiered Storage Checkpointing;Hosting 支持p5.4xlarge

2.33.3(2025-09-04)

  • AWS Clean Rooms:PySpark 作业支持可配置计算规格;
  • AWS CloudFormationListHookResults支持检索全部 CloudFormation Hooks 的调用结果(此前仅限 create change set 与 Cloud Control 操作),并新增按 Hook 状态与 ARN 过滤的可选参数;
  • Amazon EC2:新增m8im8i-flexi8ge实例类型;
  • Amazon RDS:Proxy API 新增EndpointNetworkTypeTargetConnectionNetworkType字段以支持 IPv6;
  • Amazon Verified Permissions:属性值支持 datetime 与 duration 类型;
  • OpenSearch Service Serverless:支持 FIPS 与 FedRAMP 合规。

2.33.2(2025-09-03)

  • AWS Clean Rooms ML:错误摘要增加日志清洗(privacy-enhanced);自定义模型支持新实例类型(性能更好、成本更低);弃用 P3 系列实例;
  • AWS Clean Rooms:支持向现有 collaboration 添加新的数据提供方成员;
  • Amazon CloudFrontCustomOriginConfig增加可选字段IpAddressType
  • Amazon RDSCreateDBInstanceModifyDBInstanceCreateDBClusterModifyDBCluster支持MasterUserAuthenticationType参数;
  • Amazon Route 53:支持亚太(新西兰)区域ap-southeast-6的延迟记录、地理邻近记录与 VPC 私有 DNS;
  • Amazon Route 53 Domains:新增AU_ELIGIBILITY_TYPEAU_POLICY_REASONAU_REGISTRANT_NAME参数;
  • Amazon Transcribe Streaming:Call Analytics 支持自动语言识别;
  • Amazon MQ:RabbitMQ broker 支持CONFIG_MANAGED认证策略,创建 broker 时用户名/密码可省略。

2.33.1(2025-09-02)

  • AWS User Notifications:新增 Organization 支持——ListMemberAccounts获取成员账户列表、AssociateOrganizationalUnit将 OU 关联到通知配置、DisassociateOrganizationalUnit解除关联、ListOrganizationalUnits展示已配置通知的 OU;
  • Amazon EC2DescribeInstanceTypesResponse新增MaximumEbsAttachmentsAttachmentLimitType字段;InstanceTypes枚举新增g6fgr6fr8ir8i-flexp5.4xlarge
  • Amazon NeptunepubliclyAccessible参数移除 deprecated 标记并补充用法说明;
  • Amazon WorkMailPutEmailMonitoringConfigurationRoleArn变为可选;RegisterToWorkMail增加UnsupportedOperationException

六、升级到 2.33.x:BOM 使用方式

AWS SDK for Java v2 使用 Maven BOM 统一管理依赖版本,本仓库的 BOM 定义位于 bom/pom.xml。升级到 2.33.x 只需将 BOM 版本号改为对应版本(如2.33.13),例如:

<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.33.13</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

随后即可引用任意服务模块(如 S3、EC2、DynamoDB)而不必逐个指定版本。由于 2.33.x 内部包含split废弃、X-Forwarded-For 签名行为变化、DynamoDB 注解扩展回滚等行为变更,升级前建议重点回归以下场景:

  • 使用AsyncRequestBody#split的异步上传代码(迁移到splitCloseable并确保关闭每个子请求体);
  • 经反向代理且依赖 X-Forwarded-For 的请求签名链路;
  • DynamoDB Enhanced Client 中手工配置表结构且启用了时间戳自动生成扩展的场景;
  • 自定义 Jackson/Netty 依赖版本的应用(注意与 SDK 内嵌版本协调)。

七、更多变更历史

2.33.x 只是 SDK 版本演进的一环。若需了解相邻版本或更早版本的变更,可查阅仓库 changelogs 目录下的对应文件(如 2.32.x、2.34.x),以及根目录 CHANGELOG.md 的汇总条目。服务客户端的具体 API 形态、示例与配置方式,可直接参考 services 目录下对应服务模块的源码与 docs 目录下的使用指南。

【免费下载链接】aws-sdk-java-v2The official AWS SDK for Java - Version 2项目地址: https://gitcode.com/GitHub_Trending/aw/aws-sdk-java-v2

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询