AWS Java SDK v2应将哪个区域端点用于路由53?

AWS Java SDK v2应将哪个区域端点用于路由53?,java,amazon-web-services,amazon-route53,Java,Amazon Web Services,Amazon Route53,在Windows 10上,我使用的是AWS Java SDK v2(software.amazon.awssdk:route53:2.8.3),我只想连接并列出我所有的Route 53托管区域。我在我的用户配置(在我的.aws/config文件中)中指定了us-west-1作为默认区域 我使用以下命令创建一个route53客户端: Route53Client Route53Client=Route53Client.builder().build(); 请注意,我没有指明区域,因为在列表中,它表

在Windows 10上,我使用的是AWS Java SDK v2(
software.amazon.awssdk:route53:2.8.3
),我只想连接并列出我所有的Route 53托管区域。我在我的用户配置(在我的
.aws/config
文件中)中指定了
us-west-1
作为默认区域

我使用以下命令创建一个
route53客户端

Route53Client Route53Client=Route53Client.builder().build();
请注意,我没有指明区域,因为在列表中,它表示:

使用AWS CLI或SDK提交请求时,请保留未指定的区域和端点,或指定us-east-1作为区域

然后,我尝试使用以下内容列出托管区域:

Set hostedZones=client.listHostedZonesPaginator().stream()
.flatMap(response->response.hostedZones().stream())
.collect(收集器.toSet());
在日志中,我看到如下调试消息:

[DEBUG]无法从software.amazon.awssdk.regions.providers加载区域。SystemSettingsRegionProvider@...:无法从系统设置加载区域。必须通过环境变量(AWS\U Region)或系统属性(AWS.Region)指定区域。

然后它为
route53.us-west-1.amazonaws.com
抛出一个
java.net.UnknownHostException


当然,我现在的网络连接不稳定。这是正确的终点吗?如果是,为什么该端点不列在?如果不是,如果我遵循在线文档(如上所述),它为什么要尝试连接到
us-west1
端点,这表明不需要指示区域?或者问题仅仅是我的Internet连接和不稳定的DNS查找吗?

AWS SDK开发团队决定要求Route53请求明确指示
区域。AWS_GLOBAL
或请求将不起作用,因为SDK中有人:

要访问路由53,您当前需要指定AWS_全球区域。这样做是为了防止客户使用全球服务,并且没有意识到您的呼叫可能不会停留在该地区,并且可能跨越全球

不幸的是,Amazon没有在SDK中记录这一点(我可以找到),也没有提供有用的错误消息,相反,假设开发人员在SDK试图访问一个不存在的端点时会以某种方式猜测问题,即使SDK是根据API和在线文档使用的

简言之,Route53客户端必须按以下方式创建:

route53Client=route53Client.builder().region(region.AWS_GLOBAL.build();

以下是列出托管区域的AWS Route 53 V2代码示例:

package com.example.route;

//snippet-start:[route.java2.list_zones.import]
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.route53.Route53Client;
import software.amazon.awssdk.services.route53.model.HostedZone;
import software.amazon.awssdk.services.route53.model.Route53Exception;
import software.amazon.awssdk.services.route53.model.ListHostedZonesResponse;
import java.util.List;
//snippet-end:[route.java2.list_zones.import]

public class ListHostedZones {
    public static void main(String[] args) {

        Region region = Region.AWS_GLOBAL;
        Route53Client route53Client = Route53Client.builder()
                .region(region)
                .build();

        listZones(route53Client);
    }

    //snippet-start:[route.java2.list_zones.main]
    public static void listZones(Route53Client route53Client) {

        try {

            ListHostedZonesResponse zonesResponse = route53Client.listHostedZones();
            List<HostedZone> checklist = zonesResponse.hostedZones();

            for (HostedZone check: checklist) {
                System.out.println("The name is : "+check.name());
            }

        } catch (Route53Exception e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
    }
    //snippet-end:[route.java2.list_zones.main]
}
package com.example.route;
//代码段开始:[route.java2.list\u zones.import]
导入software.amazon.awssdk.regions.Region;
导入software.amazon.awssdk.services.route53.route53客户端;
导入software.amazon.awssdk.services.route53.model.HostedZone;
导入software.amazon.awssdk.services.route53.model.route53异常;
导入software.amazon.awssdk.services.route53.model.ListHostedZones响应;
导入java.util.List;
//代码段结尾:[route.java2.list\u zones.import]
公共类列表{
公共静态void main(字符串[]args){
Region Region=Region.AWS_GLOBAL;
Route53客户端Route53客户端=Route53客户端.builder()
.地区(地区)
.build();
列表区域(路由53客户端);
}
//代码段开始:[route.java2.list\u zones.main]
公共静态无效列表区域(路由53客户端路由53客户端){
试一试{
listHostedZones响应区域Response=Route53客户端。listHostedZones();
列表检查表=区域响应。hostedZones();
用于(一次检查:检查表){
System.out.println(“名称为:”+check.name());
}
}捕获(路由53E异常){
System.err.println(e.getMessage());
系统出口(1);
}
}
//代码段结尾:[route.java2.list\u zones.main]
}