使用AWS SDK创建CNAME记录遇InvalidInputException问题求助
解决AWS Route53 SDK创建CNAME记录的InvalidInput错误
嘿,我一眼就找到问题根源啦!你遇到的InvalidInputException主要是因为两个关键问题:
- 缺少CNAME记录的目标地址配置:控制台创建时你肯定填写了跳转域名,但代码里完全没指定这个核心参数
- 变量名不一致(潜在笔误):你定义的Hosted Zone ID变量是
QA_HOSTED_ZONE_ID,但代码里用的是HOSTED_ZONE_ID,如果这不是故意的,会导致用错Zone ID
修正后的完整代码
private static final String QA_HOSTED_ZONE_ID = "UUIDFromConsole"; GetHostedZoneRequest getHostedZoneRequest = new GetHostedZoneRequest(QA_HOSTED_ZONE_ID); GetHostedZoneResult result = route53Client.getHostedZone(getHostedZoneRequest); ResourceRecordSet resourceRecordSet = new ResourceRecordSet("DN4TheRecordSet", RRType.CNAME); // 配置CNAME目标地址(必须添加!) List<ResourceRecord> resourceRecords = new ArrayList<>(); resourceRecords.add(new ResourceRecord("your-target-domain.com.")); // 注意末尾的点号,Route53要求全限定域名 resourceRecordSet.setResourceRecords(resourceRecords); GeoLocation geoLocation = new GeoLocation(); geoLocation.setContinentCode("NA"); geoLocation.setSubdivisionCode("NY"); resourceRecordSet.setGeoLocation(geoLocation); resourceRecordSet.setTTL(50L); resourceRecordSet.setSetIdentifier("uniqueid-statecode"); Change addStateChange = new Change(ChangeAction.CREATE, resourceRecordSet); ChangeBatch changeBatch = new ChangeBatch(Arrays.asList(addStateChange)); ChangeResourceRecordSetsRequest changeResourceRecordSetsRequest = new ChangeResourceRecordSetsRequest() .withHostedZoneId(QA_HOSTED_ZONE_ID) // 修正变量名 .withChangeBatch(changeBatch); route53Client.changeResourceRecordSets(changeResourceRecordSetsRequest);
关键注意事项
- CNAME目标地址必须带末尾点号:Route53要求使用全限定域名(FQDN),所以目标域名最后要加
.,比如your-target-domain.com.,如果不加,Route53会自动拼接当前Hosted Zone的域名,可能导致不符合预期的解析。 - 确认IAM权限:确保你的SDK使用的IAM角色拥有
route53:ChangeResourceRecordSets权限,虽然控制台能操作,但SDK角色权限可能有差异。 - SetIdentifier唯一性:因为你用了GeoLocation配置,属于加权/地理路由记录,
SetIdentifier在同一条记录集中必须唯一,这点你当前的配置是没问题的。
内容的提问来源于stack exchange,提问作者Norbert
相关产品推荐
相关产品推荐

