0

Je dois mettre à jour par programme un enregistrement A qui contient plusieurs entrées IPv4.Éviter les conditions de concurrence avec les commandes de reprise de route53

La mise à jour est déclenchée chaque fois qu'une instance EC2 démarre/se termine.

L'approche que j'avais en tête était read l'enregistrement en cours, ajouter l'adresse IPv4, puis upsert le nouvel enregistrement à Route53. Cependant, cela conduit à des conditions de course possibles.

Quelle est la meilleure façon d'y parvenir pour éviter les conditions de course?

(P.S. ELB est pas une option - je besoin d'équilibrage de charge DNS round-robin.)

Répondre

0

Route53's multivalued answers sont la bonne approche ici.

Au lieu d'avoir un A enregistrement, vous créez plusieurs A enregistrements (un pour chaque IP) et discrimine les utiliser un SetIdentifier que vous spécifiez lors de la création de l'enregistrement (see API). Le SetIdentifier peut être quelque chose que vous aimez, et l'ID unique de l'enregistrement devient effectivement record_name:set_identifier. Route53 fusionnera automatiquement ces enregistrements en un seul enregistrement en réponse aux demandes des clients (il renverra donc un enregistrement A contenant l'ensemble de toutes les adresses IP que vous avez spécifiées en tant qu'enregistrements individuels). Cela signifie que vous pouvez attribuer de manière atomique vos adresses IP individuelles, évitant ainsi les conditions de concurrence auxquelles vous seriez confronté lors de la tentative de mise à jour d'un enregistrement A contenant plusieurs valeurs.


En aparté, Route53 peut éventuellement vérifier la santé chaque enregistrement, et seulement revenir sains :)