必须在构建器或设置环境中提供显式区域以提供区域

Yuc*_*ong 4 amazon-web-services aws-cli

我尝试设置这样的用户:

aws configure --profile MyUser
Run Code Online (Sandbox Code Playgroud)

并通过以下方式激活它:

export AWS_PROFILE=MyUser
Run Code Online (Sandbox Code Playgroud)

但是,我不断收到以下异常:

2018 年 5 月 20 日下午 3:09:02 com.amazonaws.auth.profile.internal.BasicProfileConfigLoader loadProfiles

警告:旧配置文件格式要求在配置文件名称前有“profile”前缀。最新的代码不需要这样的前缀,并将其视为配置文件名称的一部分。如果您看到此警告,请删除前缀。

线程“main”com.amazonaws.SdkClientException 中的异常:无法通过区域提供程序链找到区域。必须在构建器或设置环境中提供显式区域以提供区域。

奇怪的是,如果我使用默认用户配置它,那么一切正常:

aws configure
Run Code Online (Sandbox Code Playgroud)

为什么使用特定用户名的配置在上面不起作用?


我也知道我们可以在像这个SO或这个SO这样的代码中配置凭证。

AmazonS3 amazonS3 = AmazonS3Client.builder()
    .withRegion("us-east-1")
    .withCredentials(new AWSStaticCredentialsProvider(creds))
    .build();
Run Code Online (Sandbox Code Playgroud)

这是可行的,但我只是认为将凭据放入源代码并使用 git 签入是一个坏主意。


同样从错误消息中,看起来我使用的是带有profile前缀名称的旧格式(如本SO 中所述。我已经仔细检查了aws-cli版本并确保它是最新的还仔细检查了我配置文件名称中没有前缀。

这里是关于版本:

aws --version
aws-cli/1.11.129 Python/3.6.2 Darwin/17.5.0 botocore/1.5.92
Run Code Online (Sandbox Code Playgroud)

这是配置文件:

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***
Run Code Online (Sandbox Code Playgroud)

Yuc*_*ong 10

只要弄清楚出了什么问题。生成了两个文件aws configure --profile MyUser

  • ~/.aws/config
  • ~/.aws/凭证

我注意到生成的配置文件profile的前缀中确实有

$ cat ~/.aws/config 
[default]
region = us-east-1
output = json
[profile MyUser]
region = us-west-1
output = json
Run Code Online (Sandbox Code Playgroud)

删除后,一切正常:

[MyUser]
region = us-west-1
output = json
Run Code Online (Sandbox Code Playgroud)

或者,我们可以明确指定凭证配置文件和用户。例如,在 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()
Run Code Online (Sandbox Code Playgroud)