You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus 2+使用QuarkusTestResourceLifecycleManager时S3Client测试加载凭证失败

问题解决:Quarkus 1.13升级2.x后集成测试AWS凭证加载失败

根因说明

Quarkus 2.0 版本对AWS服务扩展的配置规则做了不兼容调整:

  • 废弃了1.x版本中aws.开头的全局AWS配置前缀,统一替换为quarkus.aws.前缀
  • 凭证相关配置被归类到credentials子节点下,不再直接放在全局AWS配置下
  • 服务级别的端点覆写配置规则同步调整为quarkus.${服务名}.endpoint-override格式

你之前用的1.x版本的配置键在2.x版本中完全不生效,导致Quarkus AWS扩展默认按默认凭证链查找凭证,找不到就抛出「Unable to load credentials」错误。

至于原生集成测试可以正常运行,是因为@QuarkusIntegrationTest执行的是你已经打包完成的应用(原生镜像或JVM包),加载的是src/main/resources下的运行时配置,你应该已经在运行时配置中适配了2.x的配置规则,只有测试资源类返回的测试阶段配置还在使用1.x的旧键名。

解决步骤

1. 修改ContainerResource返回的配置键名

把start方法返回的配置集合中的键全部替换为2.x兼容的格式:

@Override
public Map<String, String> start() {
    LOCAL_STACK_CONTAINER.start();
    innitS3();
    return Map.ofEntries(
        entry("quarkus.aws.region", LOCAL_STACK_CONTAINER.getRegion()),
        entry("quarkus.s3.endpoint-override", LOCAL_STACK_CONTAINER.getEndpointOverride(S3).toString()),
        entry("quarkus.aws.credentials.type", "static"),
        entry("quarkus.aws.credentials.static-provider.access-key-id", LOCAL_STACK_CONTAINER.getAccessKey()),
        entry("quarkus.aws.credentials.static-provider.secret-access-key", LOCAL_STACK_CONTAINER.getSecretKey())
    );
}

2. 同步调整application.properties中的配置(如果有)

如果你之前在application.properties中加的是旧格式的配置,也替换为上面的新格式即可生效。

3. 可选:兼容多测试类场景

如果你的项目中有多个测试类共用这个LocalStack测试资源,可以给@QuarkusTestResource注解加上restrictToAnnotatedClass = false参数,避免不同测试类启动重复的容器实例:

@QuarkusTestResource(value = ContainerRessource.class, restrictToAnnotatedClass = false)

内容的提问来源于stack exchange,提问作者Corentin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:09:00