避免使用Route53高位插入竞争条件
问题描述:
我需要以编程方式更新包含多个IPv4
条目的A
记录。避免使用Route53高位插入竞争条件
无论何时EC2实例启动/终止,都会触发更新。
我心中的做法是以read
的当前记录,追加IPv4
地址,然后upsert
将新记录添加到Route53。但是,这会导致可能的竞争条件。
达到此目的的最佳途径是什么,以避免竞争条件?
(附注:ELB是不是一种选择 - 我需要DNS轮循负载平衡)。
答
Route53's multivalued answers在这里正确的做法。
而是有一个A
记录,您可以创建多个A
记录(每个IP),并使用您创建记录(see API)时指定SetIdentifier
歧视他们。 SetIdentifier
可以是任何你喜欢的,并且记录的唯一ID有效地变为record_name:set_identifier
。
Route53会在响应客户端请求时自动将这些记录合并到单个记录中(因此它将返回一个包含指定为单个记录的所有IP的集合的A
记录)。
这意味着您可以原子性地使用您的个人IP地址,避免尝试更新包含多个值的A
记录时遇到的竞态条件。
顺便说一句,Route53可以有选择地健康检查每个记录,并且只返回那些健康:)