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


请注意,我没有指出区域,因为在online documentation中它表示:


  使用AWS CLI或SDK提交请求时,可以不指定Region和终端节点,或者将us-east-1指定为Region。


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

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.UnknownHostException抛出route53.us-west-1.amazonaws.com

当然,我现在连接状况不佳。那是正确的终点吗?如果是,为什么该端点未在https://docs.aws.amazon.com/general/latest/gr/rande.html处列出?如果不是的话,如果我正在遵循在线文档(如我在上面引用的内容)(它表明不需要指示区域),为什么为什么要尝试连接到us-west1端点?还是这个问题仅仅是我目前的Internet连接和不完整的DNS查找?

最佳答案

AWS SDK开发团队决定要求Route53请求明确指示Region.AWS_GLOBAL或请求将不起作用,因为noted中的Issue #456代表该SDK:


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


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

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

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

10-05 21:12
查看更多