2

Java 8 在此处使用 AWS Java 开发工具包。例如,我有一个私有托管区域 (PHZ),myapp.example.com并且我A在该区域中有一条记录,称为db.myapp.example.com指向 RDS 实例。

我现在正在编写一个 Lambda (Java),它将创建一个新的 RDS 实例,并更新db.myapp.example.com区域记录以指向新的 RDS 实例。

到目前为止,我的代码要点如下所示:

CreateDBInstanceRequest createDbRequest = getSomehow();
DBInstance rdsInstance = amazonRDS.createDBInstance(createDbRequest);

ListHostedZonesResult hostedZonesResult = amazonRoute53.listHostedZones();
Optional<HostedZone> hostedZoneOpt = hostedZonesResult.getHostedZones().stream()
    .filter(zone -> "db.myapp.example.com".equals(zone.getName())).findFirst();
if (hostedZoneOpt.isPresent()) {

    // TODO: how to update the record so that it points to 'rdsInstance'?
    ResourceRecordSet alias = new ResourceRecordSet(aliasName, "A");
    
    Change updateAlias = new Change(ChangeAction.UPSERT, alias);
    List<Change> changes = Collections.singletonList(updateAlias);
    ChangeBatch changeBatch = new ChangeBatch(changes);

    ChangeResourceRecordSetsRequest changeRecordRequest =
        new ChangeResourceRecordSetsRequest(hostedZoneOpt.get().getId(), changeBatch);
    amazonRoute53.changeResourceRecordSets(changeRecordRequest);
    
} else {
  // handle
}

我认为这在很大程度上是正确的。但是,在搜索了Route53 SDK API 文档之后,我终生无法弄清楚如何/在何处alias : ResourceRecordSet使用新的 RDS ( rdsInstance) 信息配置实例,以便db.myapp.example.com现在指向它。

有任何想法吗?提前致谢!

更新

TrafficPolicy我看到Route53 中有一个概念,显然我可以将 JSON 文档发送到 AWS 并为我的 A 记录配置流量策略,所以也许这是正确的方法。但是查看Traffic Policy 文档定义,我需要能够在其Value字段中指定 IP 地址,而且我不相信 AWS 开发工具包会在任何地方公开 IP 地址!

4

2 回答 2

2

根据关于别名路由的AWS 文档,您无法创建指向 RDS 实例的别名 DNS 记录。但是,您可以做的是在 Route 53 中创建一个常规 CNAME 记录,指向 RDS 实例的域名。您的记录将具有 type CNAME、 Name db.myapp.example.com,而 Value 将是 RDS 实例的域名,即some-instance.cxu5ec943k5u.us-east-1.rds.amazonaws.com。你可以从rdsInstance.getEndpoint().getAddress().

于 2021-03-08T18:33:03.463 回答
2

一般来说,DNS A 记录只能指向 IP 地址(或者在 Route 53 的情况下,指向某些 AWS 资源的 AWS 别名 - 不包括 RDS)。CNAME 记录可以指向其他子域(包括 RDS 实例的域名)。

于 2021-03-08T20:04:07.870 回答