user3217883
user3217883

Reputation: 1465

How to get correct AWS AvailabilityZones?

I'm trying to get the correct AvailabilityZones from the Amazon Web Services AWS SDK. I know about Region and endpoint. Any combination I try returns us-east-1 values instead of us-west-2 values.

I initialize the AWS like this:

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();

I also have my config file set up like so:

[default]
region = us-west-2

And my credentials file set up like this:

[default]
aws_access_key_id = my_aws_access_key_id_here
aws_secret_access_key = my_aws_secret_access_key_here

But when I do this:

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();
}

I get the following output:

{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: []}]}

How do I get it to show the proper us-west-2 values? We have 6 running instances on us-west-2a, 2b, and 2c.

Upvotes: 0

Views: 109

Answers (1)

Chris
Chris

Reputation: 3657

Have you attempted to set the region on the client during building?

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;
}

Outputs

[{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: []}]

Which is what I would expect the result to be.

Upvotes: 1

Related Questions