java - 如何获取正确的AWS AvailabilityZones?

标签 java amazon-web-services

我正在尝试从 Amazon Web Services AWS SDK 获取正确的 AvailabilityZone。我了解区域和端点。我尝试的任何组合都会返回 us-east-1 值而不是 us-west-2 值。

我像这样初始化AWS:

AWSCredentials credentials = null;
try {
    credentials = new ProfileCredentialsProvider().getCredentials();
} catch (Exception e) {
    throw new AmazonClientException(
            "Cannot load the credentials from the credential profiles file. " +
            "Please make sure that your credentials file is at the correct " +
            "location (~/.aws/credentials), and is in valid format.",
            e);
}

EndpointConfiguration endpointConfiguration = new EndpointConfiguration("ec2.us-west-2.amazonaws.com","us-west-2");
ec2 = AmazonEC2ClientBuilder.standard()
        .withEndpointConfiguration(endpointConfiguration)
        .build();

我的配置文件也设置如下:

[default]
region = us-west-2

我的凭据文件设置如下:

[default]
aws_access_key_id = my_aws_access_key_id_here
aws_secret_access_key = my_aws_secret_access_key_here

但是当我这样做时:

AWSCredentials awsCredentials = new BasicAWSCredentials("my_aws_access_key_id_here", "my_aws_secret_access_key_here");
AmazonEC2AsyncClient amazonEC2AsyncClient = new AmazonEC2AsyncClient(awsCredentials);
DescribeAvailabilityZonesRequest describeAvailabilityZonesRequest = new DescribeAvailabilityZonesRequest();
Future<DescribeAvailabilityZonesResult> describeAvailabilityZonesResultFuture = amazonEC2AsyncClient.describeAvailabilityZonesAsync(describeAvailabilityZonesRequest);
try {
    DescribeAvailabilityZonesResult describeAvailabilityZonesResult = describeAvailabilityZonesResultFuture.get();
    System.out.println(describeAvailabilityZonesResult);
} catch (Exception e) {
    e.printStackTrace();
}

我得到以下输出:

{AvailabilityZones: [{ZoneName: us-east-1a,State: available,RegionName: us-east-1,Messages: []}, {ZoneName: us-east-1b,State: available,RegionName: us-east-1,Messages: []}, {ZoneName: us-east-1c,State: available,RegionName: us-east-1,Messages: []}, {ZoneName: us-east-1d,State: available,RegionName: us-east-1,Messages: []}, {ZoneName: us-east-1e,State: available,RegionName: us-east-1,Messages: []}]}

如何让它显示正确的 us-west-2 值?我们在 us-west-2a、2b 和 2c 上有 6 个正在运行的实例。

最佳答案

您是否尝试在构建过程中在客户端上设置区域?

private AmazonEC2 provideAmazonEC2() throws Exception {
    AmazonEC2 amazonEC2 = AmazonEC2ClientBuilder.standard()
        .withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials))
        .withRegion(Regions.AP_SOUTHEAST_2)
        .build();

    DescribeAvailabilityZonesRequest describeAvailabilityZonesRequest = new DescribeAvailabilityZonesRequest();
    DescribeAvailabilityZonesResult describeAvailabilityZonesResultFuture = amazonEC2.describeAvailabilityZones(describeAvailabilityZonesRequest);

    try {
        List<AvailabilityZone> describeAvailabilityZonesResult = describeAvailabilityZonesResultFuture.getAvailabilityZones();
        System.out.println(describeAvailabilityZonesResult);
    } catch (Exception e) {
        e.printStackTrace();
    }

    return amazonEC2;
}

输出

[{ZoneName: ap-southeast-2a,State: available,RegionName: ap-southeast-2,Messages: []}, {ZoneName: ap-southeast-2b,State: available,RegionName: ap-southeast-2,Messages: []}, {ZoneName: ap-southeast-2c,State: available,RegionName: ap-southeast-2,Messages: []}]

这就是我所期望的结果。

关于java - 如何获取正确的AWS AvailabilityZones?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44211212/

相关文章:

bash - 如何使用 FFMPEG 将输出和日志文件通过管道传输到 S3

python - 亚马逊 Lambda inbound-ses-spam-filter (python)

java - java中另一个接口(interface)中的接口(interface)数据

java - Eclipse junit View 中的不可打印字符

java - Recyclerview 第一次不加载(Firebase)

java - 创建和发送自定义事件

具有泛型、比较器和排序错误的 Java 类层次结构

amazon-ec2 - 如果我在印度使用亚马逊网络服务会很快吗?

amazon-web-services - 请求的 URL 返回错误 : 403, AWS Server less: Amplify app to CodeCommit

linux - 在 AWS 基础设施中使用 bash 脚本从 Autoscaling Group 标签安装包