В API Cloud DNS использует Changes
объекты для выполнения действия обновления; вы можете создать Changes
, но вы никогда не удаляете их. В облачном DNS API вы никогда не работаете непосредственно с наборами записей ресурсов. Вместо этого вы создаете объект Changes
с вашими additions
и deletions
, и если он создан успешно, он применяет эти обновления к указанным наборам записей ресурсов в вашей зоне управляемого DNS.
Это необычная ментальная модель, вроде редактирования файла, указав применяемый diff или добавляя к истории фиксации репозитория Git для изменения содержимого файла. Тем не менее, вы, безусловно, можете достичь того, что хотите сделать, используя этот API, и он применяется атомарно на авторитетных серверах (хотя система DNS в целом не делает ничего атомарно из-за кэширования, поэтому, если вы знаете, что будете внося изменения, уменьшайте свои TTL до, вы вносите изменения). Атомность здесь больше связана с самими обновлениями: если у вас несколько приложений, вносящих изменения в управляемые зоны, и есть конфликты при изменении конкретных наборов записей, операция создания завершится неудачно, и вы попробуете повторить изменение с измененными удалениями (вместо того, чтобы изменения были полностью перезаписаны).
Как бы то ни было, вы должны создать объект Changes
с deletions
, который определяет текущий набор записей ресурсов, и additions
, который указывает желаемую замену. Это может быть довольно многословным, особенно если у вас есть доменное имя с большим количеством записей одного и того же типа. Например, если у вас есть четыре записи A для mydomain.example (1.1.1.1, 2.2.2.2, 3.3.3.3 и 4.4.4.4) и хотите изменить адрес 3.3.3.3 на 5.5.5.5, вам необходимо перечислить все четыре оригинальные записи А в 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, вам просто нужно установить deletions
и additions
для Changes
объекта, который вы создаете.