【问题标题】:AWS Java SDK credentialsAWS Java 开发工具包凭证
【发布时间】:2016-06-09 16:17:50
【问题描述】:

我正在使用 AWS Java SDK 并尝试运行一些测试;得到:

无法从类路径上的 /AwsCredentials.properties 文件加载 AWS 凭证

凭证文件 @ ~/.aws/ 根据 AWS 规范是正确的; 777 确保没有访问问题。

我没有使用任何 IDE 插件;根据 AWS 文档,拥有一个凭证文件 @ ~/.aws/ 就足够了。有人只安装了 SDK 就可以使用吗?如果我将文件路径硬编码到 ClasspathPropertiesFileCredentialsProvider() 请求中,它将用路径而不是 AwsCredentials.properties 字符串返回错误,该字符串在任何地方都不存在(是的,尝试在 ~/.aws/以及)。

非常感谢您的任何见解,代码直接来自亚马逊:

import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.sns.AmazonSNSClient;
import com.amazonaws.services.sns.model.PublishRequest;
import com.amazonaws.services.sns.model.PublishResult;

public class SNS {

    public static void main(String[] args) {
        AmazonSNSClient snsClient = new AmazonSNSClient(new ClasspathPropertiesFileCredentialsProvider());
        snsClient.setRegion(Region.getRegion(Regions.US_EAST_1));

        String msg = "this is a test";
        PublishRequest publishRequest = new PublishRequest("my arn", msg);
        PublishResult publishResult = snsClient.publish(publishRequest);
        System.out.println("MessageId - " + publishResult.getMessageId());
    }
}

【问题讨论】:

  • 您使用的是什么版本的 SDK?
  • 1.11.7;最新/最大
  • CredentialProvider 首先搜索您的类路径,其中不包括 ~/.aws/ 。您需要将该文件添加到您的 java 类路径中。
  • 相同结果:$ export CLASSPATH=$CLASSPATH:/Users//.aws/
  • 也尝试了包含文件名

标签: java amazon-web-services aws-sdk


【解决方案1】:

如果您使用 DefaultAWSCredentialsProviderChain 而不是 ClasspathPropertiesFileCredentialsProvider,它将自动检查 AWS 凭证的各种默认位置。 (Documentation)

【讨论】:

  • 好多了——我不想搞乱随机修复
【解决方案2】:

您是否已验证您的 $HOME 环境变量是否已为您正在运行的进程设置? AWS 开发工具包依赖 $HOME 来确定 .aws 文件夹的正确位置。

【讨论】:

  • 对于我的 windows 测试,我将 CLASSPATH 环境变量设置为 [C:\Users\\.aws] 目录,在我的 Mac 上它设置为我的主目录。
  • Windows 机器是具有各种自定义 AWS 架构的工作(非标准)机器; Mac 干净整洁(真实世界)
【解决方案3】:

这并没有按照我的计划进行;无法将 .aws 路径作为类路径(尝试添加为外部类文件夹)。

运行下面的代码来找到我项目中的实际类路径:

    public static void main (String args[]) {

        ClassLoader cl = ClassLoader.getSystemClassLoader();

        URL[] urls = ((URLClassLoader)cl).getURLs();

        for(URL url: urls){
            System.out.println(url.getFile());
        }

   }

然后将我的 AWS 凭证放入上述目录之一中的新 AwsCredentials.properties 文件中(我有一个;其余的是 jar 文件)。

将文件中的标记值更改为“accessKey”和“secretKey”,从那里(aws_access_key、aws_secret_access_key)开始,它起作用了。

感谢大家的投入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多