为什么我必须输入区域名称才能在我的AWS账户中获取区域列表

问题描述

使用此代码段,我可以在我的AWS账户中获取一个区域列表,但是为什么我必须输入一个区域名称才能获取区域列表(在本例中为“ us-east-1”)。

AWSCredentials credentials = new BasicAWSCredentials("accessKey","secretKey");
        AWSCredentialsProvider credentialsProvider=new AWsstaticCredentialsProvider(credentials);
        AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard()
                .withCredentials(credentialsProvider)
                .withRegion("us-east-1")
                .build();

        DescribeRegionsResult regions_response = ec2.describeRegions();
        for(Region region : regions_response.getRegions()) {
            System.out.println(region.getRegionName());
        }
    }

解决方法

来自AWS service endpoints - AWS General Reference

大多数Amazon Web Services提供一个区域终端节点,您可以使用该区域终端发出请求。区域端点的一般语法如下。

protocol://service-code.region-code.amazonaws.com

例如,https://dynamodb.us-west-2.amazonaws.com是美国西部(俄勒冈)地区中Amazon DynamoDB服务的端点。

您的代码正在调用Amazon EC2服务。为此, API调用必须发送到区域中的EC2端点。 EC2服务将响应对该端点发出的请求。

您的特定API调用要求一个区域列表这一事实与其他API调用(例如,停止或启动实例的请求)没有任何不同。该请求仍必须发送到API端点。所有区域将以相同的区域列表进行响应。

因此,简单的答案是:区域标识符有助于确定将请求发送到哪里。