0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure DNS で一時的に TTL を短くしておいて後から戻す AzureCLI を試してみた

Posted at

オンプレ DNS から AzrueDNS に DNS ゾーンを移行する時など、一時的に DNS レコードの TTL を短くして、クライアントのネガティブキャッシュを含むキャッシュを短くしておいて切り替えたい場合があります。DNS ゾーン数や DNS レコード数が少なければ手動でも良いのですが、複数あると面倒です。そこで AzureCLI を使って Azure DNS に設定済みの TTL を含むレコード情報を全て JSON で保存しておき、TTL を 600 秒に設定したのち、TTL を戻す一連の動作を検証してみました。

検証環境を準備

bash
# 環境変数をセットします
prefix=mnrdns
region=japaneast

# リソースグループを作成します
az group create \
  --name ${prefix}-rg \
  --location $region

# example.jp ゾーンを作成します
az network dns zone create \
  --resource-group ${prefix}-rg \
  --name example.jp

# example.jp に A レコードを作成します
az network dns record-set a add-record \
  --resource-group ${prefix}-rg \
  --zone-name example.jp \
  --record-set-name www \
  --ipv4-address 93.184.216.34

# example.com ゾーンを作成します
az network dns zone create \
  --resource-group ${prefix}-rg \
  --name example.com

# example.com に A レコードを作成します
az network dns record-set a add-record \
  --resource-group ${prefix}-rg \
  --zone-name example.com \
  --record-set-name www \
  --ipv4-address 93.184.216.34

Azure DNS ゾーンのリストを取得

bash
zones=$(az network dns zone list \
  --resource-group ${prefix}-rg \
  --query "[].name" \
  --output tsv)

Azure DNS ゾーンのレコード情報を保存

bash
for zone in ${zones[@]}; do
  echo "--- $zone ---"
  az network dns record-set list \
    --resource-group ${prefix}-rg \
    --zone-name $zone \
    > $zone.json
done

全レコードの TTL を 600 秒に設定

bash
for zone in ${zones[@]}; do
  echo "--- $zone ---"
  ids=$(cat $zone.json | jq -r .[].id)
  for id in ${ids[@]}; do
    echo $id
    az resource update \
      --set properties.TTL=600 \
      --ids $id
  done
done

保存しておいた JSON から TTL を戻す

bash
for zone in ${zones[@]}; do
  echo "--- $zone ---"
  lines=$(cat $zone.json | jq -c '.[] | {id,TTL}')
  for line in ${lines[@]}; do
    id=$(echo $line | jq -r .id)
    ttl=$(echo $line | jq -r .TTL)
    echo "$ttl : $id"
    az resource update \
      --set properties.TTL=$ttl \
      --ids $id
  done
done

検証環境を削除

bash
az group delete \
  --name ${prefix}-rg \
  --yes

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?