AWS Java SDK v2 应该为 Route 53 使用哪个区域终端节点?

Gar*_*son 2 java amazon-web-services amazon-route53

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

Route53Client使用以下方法创建一个:

Route53Client route53Client = Route53Client.builder().build();
Run Code Online (Sandbox Code Playgroud)

请注意,我没有指出地区,因为在在线文档中它说:

当您使用 AWS CLI 或开发工具包提交请求时,请不要指定区域和终端节点,或者指定 us-east-1 作为区域。

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

Set<HostedZone> hostedZones = client.listHostedZonesPaginator().stream()
  .flatMap(response -> response.hostedZones().stream())
  .collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

在日志中,我看到一条调试消息,如下所示:

[DEBUG] Unable to load region from software.amazon.awssdk.regions.providers.SystemSettingsRegionProvider@...:Unable to load region from system settings. Region must be specified either via environment variable (AWS_REGION) or system property (aws.region).

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

当然,我现在的互联网连接不稳定。这是正确的端点吗?如果是,为什么没有在https://docs.aws.amazon.com/general/latest/gr/rande.html 中列出该端点?如果不是,us-west1如果我正在关注在线文档(如我上面引用的那样),它为什么要尝试连接到端点,这表明不需要指示区域?或者问题只是我的 Internet 连接和目前不稳定的 DNS 查找?

Gar*_*son 5

AWS 开发工具包开发团队决定要求 Route53 请求明确指示Region.AWS_GLOBAL或请求将不起作用,正如有人在开发工具包的问题 #456 中指出的那样

要访问 Route53,您目前需要指定 AWS_GLOBAL 区域。这样做是为了防止客户使用全球服务,而没有意识到对于此服务,您的呼叫可能不会停留在区域内,并且可能跨越全球。

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

简而言之,Route53 客户端必须像这样创建:

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

Run Code Online (Sandbox Code Playgroud)