1

有谁知道使用 API 覆盖 Google DNS Cloud 下记录的最佳做法是什么?https://cloud.google.com/dns/api/v1/changes/create没有帮助!

我可以删除和创建,但这并不好;)并且可能导致中断。

问候

4

2 回答 2

2

Cloud DNS API 使用Changes对象来执行更新操作;你可以创建Changes但你永远不会删除它们。在 Cloud DNS API 中,您永远不会直接对资源记录集进行操作。相反,您可以Changes使用所需的对象创建一个对象,additions如果deletions创建成功,它会将这些更新应用于托管 DNS 区域中的指定资源记录集。

这是一个不同寻常的心智模型,有点像通过指定要应用的差异来编辑文件,或者附加到 Git 存储库的提交历史以更改文件的内容。尽管如此,您当然可以使用此 API 实现您想要做的事情,并且它在权威服务器上原子应用(尽管由于缓存,DNS 系统作为一个整体并没有真正原子地做任何事情,所以如果您知道您将进行更改,减少之前的 TTL您进行更改)。这里的原子性更多的是关于更新本身:如果您有多个应用程序对您的托管区域进行更改,并且对特定记录集的更改存在冲突,则创建操作将失败,您将通过修改删除重试更改(而不是默默地覆盖更改)。

无论如何,您要做的是创建一个Changes对象,deletions该对象指定当前资源记录集,并additions指定您想要的替换。这可能相当冗长,尤其是当您的域名包含大量相同类型的记录时。比如你有四个mydomain.example的A记录(1.1.1.1、2.2.2.2、3.3.3.3、4.4.4.4),想把3.3.3.3的地址改成5.5.5.5,就需要全部列出来中的四个原始 A 记录,deletions然后是新的四个(1.1.1.1、2.2.2.2、4.4.4.4 和 5.5.5.5)additions

Cloud DNS 文档提供了示例代码样板,您可以根据需要进行调整:https ://cloud.google.com/dns/api/v1/changes/create#examples ,您只需为对象设置deletionsand你正在创造。additionsChanges

于 2017-01-28T23:56:46.840 回答
0

我从未为此目的使用过 API,但如果您使用命令行(即 gcloud)来更新 DNS 记录,它会将更改绑定在单个事务中,并且删除记录和添加更新记录的任务都作为单个事务执行。由于事务本质上是原子的,因此它不应该导致任何中断。

就个人而言,我在使用 gcloud 更新我的域的 DNS 设置时从未见过任何中断。

于 2017-02-13T05:27:26.223 回答