AWS TranscribeStreaming运行报错无法从AwsCredentialsProviderChain加载凭证如何解决
AWS TranscribeStreaming Java 凭证加载失败解决方案
你遇到的报错为:
Unable to load credentials from any of the providers in the chain AwsCredentialsProviderChain.
这个报错说明AWS SDK v2的DefaultCredentialsProvider没有从默认的凭证加载链中读取到有效凭证,按以下步骤排查即可:
- 排查环境变量生效情况
首先确认你配置的环境变量名严格为AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,没有拼写错误。其次要注意:如果是在终端配置的环境变量,仅对当前终端会话生效,IDE运行程序需要重启IDE继承最新的环境变量。你可以在代码main方法开头加入一行测试代码确认环境变量是否能被读取:
如果输出为null,说明环境变量配置未生效。System.out.println("ACCESS_KEY读取结果:" + System.getenv("AWS_ACCESS_KEY_ID")); - 排查依赖版本一致性
检查你项目中所有AWS SDK v2相关依赖的版本号完全一致,不要混合不同版本的sdk-core、transcribestreaming等依赖,版本不兼容会导致凭证加载逻辑异常。 - 临时测试方案(不推荐生产使用)
你可以修改getCredentials方法,先硬编码凭证测试代码逻辑是否正常:
如果修改后程序正常运行,即可确认问题出在默认凭证链的加载环节,和你业务代码无关。private static AwsCredentialsProvider getCredentials() { AwsCredentials credentials = BasicAwsCredentials.create( "替换为你的AWS_ACCESS_KEY_ID", "替换为你的AWS_SECRET_ACCESS_KEY" ); return StaticCredentialsProvider.create(credentials); } - 本地开发更稳定的凭证配置方案
你可以在当前系统用户根目录下创建.aws文件夹,在文件夹内新建名为credentials的无后缀文件,写入以下内容:[default] aws_access_key_id = 替换为你的AWS_ACCESS_KEY_ID aws_secret_access_key = 替换为你的AWS_SECRET_ACCESS_KEYDefaultCredentialsProvider会自动读取该文件的凭证,无需配置环境变量,重启IDE也不会失效,更适合本地开发场景。
内容的提问来源于stack exchange,提问作者sidibe
相关产品推荐
相关产品推荐

