【问题标题】:Which region endpoint should AWS Java SDK v2 be using for Route 53?AWS Java SDK v2 应为 Route 53 使用哪个区域终端节点?
【发布时间】:2019-09-22 23:28:10
【问题描述】:

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

我使用以下内容创建了一个Route53Client

Route53Client route53Client = Route53Client.builder().build();

请注意,我没有指明地区,因为在 online documentation 中它说:

当您使用 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).

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

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

【问题讨论】:

    标签: java amazon-web-services amazon-route53


    【解决方案1】:

    AWS SDK 开发团队决定要求 Route53 请求明确指出 Region.AWS_GLOBAL,否则请求将不起作用,就像 SDK 的 Issue #456 中的某人 noted

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

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

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

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

    【讨论】:

      【解决方案2】:

      这是列出托管区域的 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]
      }
      

      【讨论】:

        猜你喜欢
        • 2019-01-20
        • 2013-06-05
        • 2022-08-21
        • 1970-01-01
        • 2021-08-06
        • 1970-01-01
        • 2023-03-26
        • 2016-06-28
        相关资源
        最近更新 更多