
AWS SDK for Java v2 2.24.x 版本发布说明S3 传输能力增强与 SRA 认证体系迁移全景解析【免费下载链接】aws-sdk-java-v2The official AWS SDK for Java - Version 2项目地址: https://gitcode.com/GitHub_Trending/aw/aws-sdk-java-v2AWS SDK for Java v2 的2.24.x系列2024 年 2 月 9 日至 2 月 28 日共 14 个版本是 SDK 历史上一个承上启下的里程碑它将全部服务客户端迁移到 2.21.0 引入的 SRASmithy Reference Architecture身份与认证逻辑同时集中交付了 S3 Transfer Manager 的 multipart 默认开启、暂停/恢复上传、TransferListener 支持等一系列传输能力增强。本文以官方 changelogs/2.24.x-CHANGELOG.md 为骨架结合仓库内核心源码与测试逐项解析这些变更背后的实现原理与升级要点帮助你准确评估升级影响并利用新能力。一、2.24.x 版本线速览该版本线从2.24.02024-02-09迭代到2.24.132024-02-28其中既有服务端 API 新特性的同步AWS Batch、Cost Explorer、WAFV2、Lambda 等也有 SDK 自身的架构级变更与 Bugfix版本发布日期SDK 自身核心变更2.24.02024-02-09签名属性signing properties改为基于 codegen 生成而非运行时设置S3 SSE-C Checksum 上传修复2.24.22024-02-13S3 自动修剪对象元数据键的空白字符URL Connection Client 多值 header 发送修复2.24.32024-02-14半数服务客户端切换至 SRA 身份与认证逻辑事件流空事件 NPE 修复S3 AWS_GLOBAL 跨区域访问修复2.24.42024-02-15初始发布 AWS Artifact 服务支持更新 endpoint/partition 元数据2.24.52024-02-16更新 endpoint 与 partition 元数据2.24.62024-02-19S3 Transfer Manager 支持 multipart 模式下的暂停/恢复上传2.24.82024-02-21Json/Xml 协议显式 String/Binary Payload 补充 content-length 头2.24.102024-02-23S3 Transfer Manager.create()默认启用 multipart 配置默认与 S3AsyncClient 协同工作2.24.122024-02-27Netty 升级至 4.1.107.FinalS3 Transfer Manager 上传支持 TransferListener2.24.132024-02-28剩余服务客户端完成 SRA 迁移修复 multipart 客户端writeInputStream卡死问题二、SRASmithy Reference Architecture身份与认证逻辑迁移这是 2.24.x 系列最核心的架构级变更。SDK 团队自 2.21.0 起发布新的 SRA 身份与认证逻辑并在 2.24.3 与 2.24.13 两个版本中分两批把全部 AWS 服务客户端迁移过去。从仓库结构可以清楚看到新认证架构的落位独立的core/http-auth-aws模块承载了 SigV4 相关的认证方案实现例如 DefaultAwsV4HttpSigner.java、DefaultAwsV4aHttpSigner.java以及配套的AwsV4AuthScheme/AwsV4aAuthScheme认证方案接口core/http-auth-spi则定义了认证方案的 SPI 契约。这与 2.24.0 中签名属性改为基于 codegen 生成而非运行时设置的变更一脉相承——新的 SRA 认证管线通过 AuthScheme 抽象将认证逻辑从各服务客户端中剥离并统一。对使用者而言SRA 迁移是行为兼容的原有基于AwsCredentialsProvider、AwsSignerProperty、AwsIdentityProperty等执行属性execution attributes的用法在新架构下依然可用但 changelog 明确提示 S3 场景下通过废弃的非公开执行属性S3SignerExecutionAttribute覆盖签名属性的方式在 2.24.0 起失效官方推荐改用插件plugins来调整这些设置。如果你在 2.24.x 之前使用过此类内部 API 自定义签名行为升级后应迁移到插件机制。三、S3 Transfer Manager 的能力跃迁2.24.x 对 S3 Transfer Manager 的改进是本系列对开发者最直接的利好集中在三个版本1. multipart 配置默认开启2.24.10S3TransferManager.create()创建实例时默认启用 multipart 配置Transfer Manager 默认与启用 multipart 的 S3AsyncClient 协同工作。仓库中 TransferManagerFactory.java 的实现印证了这一默认行为当调用方未显式传入S3AsyncClient时工厂会优先在 classpath 中探测 AWS CRTsoftware.amazon.awssdk.crt.s3.S3Client存在则使用S3AsyncClient::crtCreate否则回退到S3AsyncClient.builder().multipartEnabled(true)构建的 Java 原生 multipart 客户端——无论走哪条路径默认客户端都具备 multipart 上传/下载能力。同时工厂还会检查传入的客户端类型若既不是 CRT 客户端也不是MultipartS3AsyncClient会输出 debug 日志提醒改用crtBuilder()或multipartEnabled(true)以获得最大吞吐。对应的官方用法见 S3TransferManager.java// 方式一默认设置推荐添加 aws-crt 依赖以启用自动 multipart S3TransferManager transferManager S3TransferManager.create(); // 方式二基于 Java 原生 S3 Multipart Async Client S3AsyncClient s3AsyncClient S3AsyncClient.builder() .multipartEnabled(true) .multipartConfiguration(conf - conf.apiCallBufferSizeInBytes(32 * MB)) .build(); S3TransferManager transferManager S3TransferManager.builder() .s3Client(s3AsyncClient) .build();2. 暂停/恢复上传2.24.62.24.6 起基于 Java 客户端且启用 multipart 的 Transfer Manager 支持上传的pause/resume。结合 S3 Transfer Manager 的模型类如ResumableFileUpload、UploadFileRequest开发者可以在大文件传输过程中持久化传输状态、在后续进程中恢复这在仓库的services-custom/s3-transfer-manager模块的model包中都有对应的公开 API 支持。3. TransferListener 支持2.24.122.24.12 让基于 Java 客户端 multipart 的 Transfer Manager 上传也能触发TransferListener回调与下载、复制等操作对齐。仓库中 TransferListener.java 定义了监听器契约LoggingTransferListener.java 提供了开箱即用的日志实现集成测试中也有专门的 CaptureTransferListener.java 验证回调行为。用法示例UploadFileRequest uploadFileRequest UploadFileRequest.builder() .putObjectRequest(req - req.bucket(bucket).key(key)) .addTransferListener(LoggingTransferListener.create()) .source(Paths.get(myFile.txt)) .build();四、修复BlockingInputStreamAsyncRequestBody#writeInputStream卡死2.24.132.24.13 修复了 S3 multipart 客户端的一个隐蔽问题当任意 multipart 请求失败时BlockingInputStreamAsyncRequestBody#writeInputStream可能永久卡住对应 issue #4801。从源码看该类的实现位于 BlockingInputStreamAsyncRequestBody.javawriteInputStream通过CountDownLatchsubscribedLatch阻塞调用线程等待下游订阅发生后再执行阻塞写入默认超时 10 秒DEFAULT_SUBSCRIBE_TIMEOUT它底层委托给InputStreamConsumingPublisher并在设置了contentLength时用LengthAwareInputStream包装流以感知写入字节数关键设计subscribe只允许被调用一次AtomicBooleancompareAndSet重复订阅会收到NonRetryableException提示forBlockingInputStream 不支持重试请改用支持 mark/reset 的流搭配AsyncRequestBody.fromInputStream。理解了这两点就不难看出卡死根因一旦某个 multipart 分片请求失败、流的下游订阅中断或取消而阻塞写入线程仍在等待订阅或等待流的完成信号就会造成writeInputStream长时间挂起。2.24.13 的修复正是在失败路径上保证阻塞写入能够被正确唤醒/终止。这也提醒使用者writeInputStream是阻塞 API必须先把请求交给 SDK 再写入流单线程调用场景下尤其如此并注意其不支持重试的特性必要时改用AsyncRequestBody.fromInputStream以获得重试支持。五、签名与协议层的多项修复2.24.x 在协议编解码与 HTTP 客户端层同样有值得关注的修复显式 payload 的 content-length2.24.8Json 与 Xml 协议 Marshaller 为 String/Binary 类型的显式 Payload 补充content-length头避免某些场景下因缺失长度头导致的传输问题。URL Connection Client 多值 header2.24.2修复了多值 header 在发送时只保留一个值、导致签名不匹配异常的问题issue #4746。使用url-connection-client模块的用户应升级至此版本以上。S3 跨区域访问2.24.3修复客户端 region 为AWS_GLOBAL时跨区域访问失败的问题issue #4912。SSE-C 与 Checksum 组合2.24.0修复启用 multipart 的 S3AsyncClient 在 SSE-C Checksum 场景下 PUT 失败的问题multipart 客户端在未禁用校验且用户未指定 checksum 时为 putObject 启用 CRC32。元数据键修剪2.24.2PutObject与CreateMultipartUpload自动去除对象元数据键的首尾空白字符。事件流 NPE2.24.3修复事件流操作输入中出现空事件时抛出 NPE 的问题。六、DynamoDB Enhanced Client 新增逻辑运算符2.24.2 为 DynamoDB Enhanced Client 的表达式 API 新增了and与or逻辑运算符由社区贡献者 akiesler 中可以看到public Expression and(Expression expression) // 两个表达式按 AND 连接 public Expression and(Expression... expressions) // 多个表达式按 AND 连接 public Expression or(Expression... expressions) // 多个表达式按 OR 连接内部通过join实现表达式的拼接并在合并expressionNames/expressionValues时对冲突的占位符做严格校验键相同但值不同会抛出IllegalArgumentException保证生成的 DynamoDB 表达式合法。这让条件表达式、FilterExpression 等场景的组合写法更加直接无需手动拼接字符串。七、2.24.x 服务端新特性精选除 SDK 自身变更外2.24.x 同步了 AWS 服务侧的大量新 API择要如下AWS Batch2.24.0/2.24.13支持 ECS 作业的仓库凭据配置支持 ECS、Fargate、EKS 上 multicontainer 作业含 array job 与 multi-node parallel job配置。Cost Explorer2.24.13新增GetApproximateUsageRecordsAPI按小时粒度或按天粒度的资源级数据获取估算用量记录。AWS WAFV22.24.13基于速率规则的请求聚合时间窗口可配置除原有 5 分钟外新增 1、2、10 分钟选项。AWS IoT2.24.13SearchIndexAPI 单次查询最大返回数由 500 调整为 100只要循环调用到nextToken为 null 即不受影响。Lambda2.24.7新增 .NET 8dotnet8运行时支持。AWS Artifact2.24.4初始 SDK 发布支持按需访问合规报告及第三方合规报告List/Get 报告及元数据、通知设置。AWS Chatbot2.24.6新增对 AWS Chatbot 的支持可在 SDK 中进行交互式 ChatOps 监控、操作与排障。EC22.24.13GetNetworkInsightsAccessScopeAnalysisFindings的MaxResults上限提升至 1,000。CloudWatch2.24.1PutMetricData请求负载默认启用压缩。Bedrock Agents Runtime2.24.13Retrieve/RetrieveAndGenerate支持覆盖搜索策略。RDS2.24.11Multi-AZ DB 集群支持 gp3 数据卷。Amplify2.24.6支持为 Amplify 域配置自定义 SSL/TLS 证书。Polly2.24.4新增土耳其语tr-TR语音 Burcu。八、依赖升级与社区贡献2.24.12 将Netty 升级至 4.1.107.Final由 sullis 贡献使用netty-nio-client的异步 HTTP 场景应随之获得该版本的安全与稳定性修复。此外 2.24.2 的 DynamoDB 表达式and/or功能由 akiesler 贡献——两个社区 PR 均被正式合入并在 changelog 中致谢体现了该项目对社区贡献的开放姿态。九、升级建议对于计划升级到 2.24.x 及以上的项目建议重点核对以下几点签名自定义方式若曾使用S3SignerExecutionAttribute等非公开执行属性覆盖 S3 签名设置需在升级前迁移到插件机制见 2.24.0 变更。SRA 迁移影响虽然 SRA 认证迁移保持行为兼容但涉及身份解析、签名链路的自定义扩展点如自定义 AuthScheme、Signer应回归验证。S3 Transfer Manager升级后可享受 multipart 默认开启、pause/resume、TransferListener 等能力若自行传入非 multipart 的S3AsyncClient注意工厂会给出 debug 提示吞吐与断点续传能力将受限。阻塞流写入若使用AsyncRequestBody.forBlockingInputStream配合 multipart 上传务必升级到 2.24.13 以规避失败场景下的卡死问题。完整的逐版本变更清单可查阅 2.24.x-CHANGELOG.md所有相关实现与测试均可在当前仓库的core/sdk-core、services-custom/s3-transfer-manager、services-custom/dynamodb-enhanced、core/http-auth-aws等模块中深入研读。【免费下载链接】aws-sdk-java-v2The official AWS SDK for Java - Version 2项目地址: https://gitcode.com/GitHub_Trending/aw/aws-sdk-java-v2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考