AWS Java SDK v2 应将哪个区域终端节点用于 Route 53?

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

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

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

然后我尝试使用如下方式列出托管区域:

Set<HostedZone> hostedZones = client.listHostedZonesPaginator().stream()
  .flatMap(response -> response.hostedZones().stream())
  .collect(Collectors.toSet());

在日志中我看到这样的调试消息:

[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如果我遵循在线文档(如我上面引用的),它为什么要尝试连接到端点,这表明不需要指示区域?或者问题仅仅是我的互联网连接和目前不稳定的 DNS 查找?


沧海一幻觉
浏览 191回答 2
2回答

一只甜甜圈

AWS SDK 开发团队决定要求 Route53 请求明确指示Region.AWS_GLOBAL或 请求不起作用,要访问 Route53,您当前需要指定 AWS_GLOBAL 区域。这样做是为了防止客户使用全球服务,而没有意识到对于此服务,您的呼叫可能不会停留在该地区,而可能会跨越全球。不幸的是,亚马逊没有在 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 {&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; Region region = Region.AWS_GLOBAL;&nbsp; &nbsp; &nbsp; &nbsp; Route53Client route53Client = Route53Client.builder()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .region(region)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .build();&nbsp; &nbsp; &nbsp; &nbsp; listZones(route53Client);&nbsp; &nbsp; }&nbsp; &nbsp; //snippet-start:[route.java2.list_zones.main]&nbsp; &nbsp; public static void listZones(Route53Client route53Client) {&nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ListHostedZonesResponse zonesResponse = route53Client.listHostedZones();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List<HostedZone> checklist = zonesResponse.hostedZones();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (HostedZone check: checklist) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("The name is : "+check.name());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; } catch (Route53Exception e) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.err.println(e.getMessage());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.exit(1);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; //snippet-end:[route.java2.list_zones.main]}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java