AWS SDK Route53:尝试创建一条记录,但获取泛型InvalidInputException:无效的请求
问题描述:
有人可以帮助我处理这个泛型异常吗?有任何想法吗?到目前为止,AWS消息非常有帮助,但现在我陷入困境。AWS SDK Route53:尝试创建一条记录,但获取泛型InvalidInputException:无效的请求
com.amazonaws.services.route53.model.InvalidInputException: Invalid request (Service: AmazonRoute53; Status Code: 400; Error Code: InvalidInput; Request ID: UUID)
我已经修复了权限问题。 withTTL的javadoc说:“如果您正在创建或更新别名资源记录集,请省略TTL。Amazon Route 53将TTL的值用于别名目标。”,但别名目标不提供这种方法。
AmazonRoute53 route53 = AmazonRoute53ClientBuilder.standard() //
.withRegion(Regions.EU_CENTRAL_1) // I thought Route53 is region-independent?
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY)))
.build();
AliasTarget aliasTarget = new AliasTarget() //
.withHostedZoneId(HOSTED_ZONE_ID) //
.withEvaluateTargetHealth(false) //
.withDNSName("1.2.3.4"); // using a valid IP here
ResourceRecordSet recordSet = new ResourceRecordSet() //
.withType(RRType.A) //
.withName("sub.domain.com") // using my own domain here
.withTTL(300L) //
.withAliasTarget(aliasTarget);
Change change = new Change() //
.withAction(ChangeAction.UPSERT) //
.withResourceRecordSet(recordSet);
route53.changeResourceRecordSets(new ChangeResourceRecordSetsRequest() //
.withHostedZoneId(HOSTED_ZONE_ID) //
.withChangeBatch(new ChangeBatch().withChanges(change)));
答
好吧,我终于明白了。我所做的一切都是错误的,没有别名的目标需要(API吸引我下了那条胡同)。
AmazonRoute53 route53 = AmazonRoute53ClientBuilder.standard() //
.withRegion(REGION) //
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY)))
.build();
ResourceRecordSet recordSet = new ResourceRecordSet() //
.withType(RRType.A) //
.withName("sub.domain.com") //
.withTTL(300L) //
.withResourceRecords(new ResourceRecord().withValue("1.2.3.4"));
Change change = new Change() //
.withAction(ChangeAction.UPSERT) //
.withResourceRecordSet(recordSet);
route53.changeResourceRecordSets(new ChangeResourceRecordSetsRequest() //
.withHostedZoneId(HOSTED_ZONE_ID) //
.withChangeBatch(new ChangeBatch().withChanges(change)));
如果使用别名目标而不是文字静态A记录,则需要A记录,该A记录镜像不管其他A记录的值是什么。当目标是CloudFront,S3或ELB时,通常使用这种方法。这些服务不会为您提供IP地址以指向...并且由于别名目标区域支付查询帐单,所以指向这些服务的任何主机名在使用别名时都是免费的。它也可以指向同一区域中的另一个名称,类似于CNAME,但在CNAME不可用的情况下可用。 –
谢谢Michael!很高兴知道。 – Zalumon
如果您有一个复杂的DNS路由配置,您正在铺设lbr/geo和潜在的elb/cf并希望隐藏客户端的复杂性,别名也可以派上用场。我喜欢把它看作是另一个记录,服务器端cname的指针。 – imperalix