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