AWS Java SDK:使用新的 RDS 实例信息更新 Route53 区域记录

AWS Java SDK: updating a Route53 zone record with new RDS instance info

Java 8 在此处使用 AWS Java SDK。我有一个 myapp.example.com 的私有托管区域 (PHZ),我在该区域中有一个名为 db.myapp.example.comA 记录,它指向一个 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 docs 之后,我终生无法弄清楚 how/where 我用新的 RDS 配置 alias : ResourceRecordSet 实例(rdsInstance) 信息以便 db.myapp.example.com 现在指向它。

有什么想法吗?在此先感谢!

更新

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

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

得到这个

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