我尝试设置这样的用户:
aws configure --profile MyUser
并通过以下方式激活它:
export AWS_PROFILE=MyUser
但是,我一直得到以下例外:
2018年5月20日下午3:09:02 com.amazonaws.auth.profile.internal.BasicProfileConfigLoader loadProfiles
警告:旧版个人资料格式在个人资料名称前需要“个人资料”前缀。最新的代码不需要这样的前缀,并将其视为配置文件名称的一部分。如果您看到此警告,请删除前缀。
线程“main”中的异常com.amazonaws.SdkClientException:无法通过区域提供程序链查找区域。必须在构建器或设置环境中提供显式区域以提供区域。
奇怪的是,如果我使用默认用户配置它,那么一切正常:
aws configure
为什么使用特定用户名的配置不能在上面使用?
AmazonS3 amazonS3 = AmazonS3Client.builder()
.withRegion("us-east-1")
.withCredentials(new AWSStaticCredentialsProvider(creds))
.build();
这样可行,但我认为将凭据放入源代码并使用git检查它是一个坏主意。
同样来自错误消息,看起来我在前缀名称中使用了带有profile
的旧格式(如此SO中所述。)我已经仔细检查了aws-cli
版本,并确保它是最新的,也检查我在配置文件名称中没有前缀。
以下是版本:
aws --version
aws-cli/1.11.129 Python/3.6.2 Darwin/17.5.0 botocore/1.5.92
这是配置文件:
cat ~/.aws/credentials
[default]
aws_access_key_id = A***
aws_secret_access_key = I***
[MyUser]
aws_access_key_id = A***
aws_secret_access_key = D***
答案 0 :(得分:0)
找出错误的原因。使用aws configure --profile MyUser
生成了两个文件。
我注意到生成的配置文件前缀
中有profile
$ cat ~/.aws/config
[default]
region = us-east-1
output = json
[profile MyUser]
region = us-west-1
output = json
删除之后,事情就完美了:
[MyUser]
region = us-west-1
output = json
或者,我们可以明确指定凭据配置文件和用户。例如,在Scala中:
private lazy val credential =
new ProfileCredentialsProvider("/Users/yuchen/.aws/credentials", "MyUser")
private lazy val lambda = AWSLambdaClientBuilder.standard()
.withCredentials(credential)
.withRegion(Regions.US_WEST_1)
.build()