【问题标题】:Avoiding race conditions with Route53 upserts使用 Route53 upserts 避免竞争条件
【发布时间】:2017-08-28 09:34:39
【问题描述】:
我需要以编程方式更新包含多个 IPv4 条目的 A 记录。
每当 EC2 实例启动/终止时都会触发更新。
我想到的方法是 read 当前记录,附加 IPv4 地址,然后 upsert 新记录到 Route53。但是,这会导致可能的竞争条件。
为了避免竞争条件,实现这一目标的最佳方法是什么?
(p.s. ELB 不是一个选项——我需要 DNS 循环负载平衡。)
【问题讨论】:
标签:
amazon-web-services
amazon-ec2
aws-sdk
aws-cli
amazon-route53
【解决方案1】:
Route53's multivalued answers 是这里的正确方法。
您创建多个 A 记录(每个 IP 一个)并使用您在创建记录时指定的 SetIdentifier (see API) 来区分它们,而不是拥有一个 A 记录。 SetIdentifier 可以是任何你喜欢的东西,记录的唯一 ID 实际上变成了record_name:set_identifier。
Route53 会在响应客户端请求时自动将这些记录合并为一条记录(因此它会返回一个 A 记录,其中包含您指定为单独记录的所有 IP 集)。
这意味着您可以原子地 upsert/delete 您的个人 IP 地址,避免在尝试更新包含多个值的 A 记录时面临的竞争条件。
顺便说一句,Route53 可以选择对每条记录进行健康检查,并且只返回健康的:)