稼働中のAWS Cloudformationにスタックをセットアップしました。スタックには、ELB(ロードバランサー)といくつかのEC2インスタンスが含まれています。アプリケーションの新しいデプロイメントを実行すると、新しい環境が構築され、古い環境が削除されます。したがって、Route 53のDNSレコードを更新する必要があります。古いスタックが存続する必要がある期間を知りたいのですが。
私は 親ドメインを移行せずにサブドメインを使用するためのAWSドキュメント に従いました。親ドメインのNSレコード(AWS DNS向け)にはTTL of 3600
。 Route 53内で、スタック内のロードバランサーへのエイリアスを使用してAレコードをセットアップしました(TTLここでは設定できません)。
AWSコンソールからエイリアスレコードにTTLを入力できません。ただし、一部のソースでは、変更に最大 60秒 がかかる可能性があると言っています。
ローカルでいくつかのテストを行って、DNSが新しいスタックを取得するのにかかる時間を確認しました。これは、Route 53でエイリアスDNSレコードを更新してから、ブラウザーで新しいスタックに到達できるようになるまでの時間です。
これは60秒未満ではいけませんか?すべてのクライアントでこれにかかる最大時間はどれくらいですか?この時間を短縮することは可能ですか?古いスタックを削除する安全な時期はいつですか?
まず、クライアントまたはそのDNSリゾルバーにキャッシュされているDNSレコードが両方とも制御不能であることを認識することが重要です(私が信頼できるネームサーバーではなくDNSレコードを参照していることに注意してください)。したがって、TTLを尊重するのはクライアントとそのDNSリゾルバーです。
以前にサイトにアクセスしたことがなく、DNSリゾルバーがレコードをキャッシュしていない(またはキャッシュが期限切れになる前に十分にアクセスした)新しい訪問者の場合、新しいレコードがすぐに表示されます。
これは60秒未満ではいけませんか?
それはすべきですが、それはあなたのクライアントがTTLを尊重する場合のみです。一部のクライアントには最小TTLがあり、一部のネットワークにはDNSリゾルバーがあり、結果をキャッシュしている可能性があります。
この時間を短縮することは可能ですか?
訪問者の大部分(これがパブリックサイトであると想定)は、あなたのように数秒ごとにサイトをロードしているわけではないことを覚えておく必要があります。ほとんどのビジターは最近サイトにアクセスしたことがなく、DNSリゾルバーはキャッシュにレコードを持っていない可能性があります。ほとんどのDNSリゾルバーはTTL=を尊重する必要がありますが、これを保証することはできません。
古いスタックを削除する安全な時期はいつですか?
DNS TTLではなく、古いスタックによってまだ処理されているトラフィックによってこれを判断する方がよいでしょう。 ELBを使用している場合は、クラウドウォッチで古いELBによって1秒あたりのリクエスト数が処理されているかどうかを確認できるはずです。これが許容レベルを下回るまで待ってから、削除してください。
切り替え直後に新しいスタックを表示するために、ローカルDNSキャッシュを手動でフラッシュすることをお勧めします。自分のクライアントがレコードの有効期限を自然に失効させるのにかかる時間を確認するために、他のクライアントがかかる時間を示しているとは限りません。
編集、私はGoogleのパブリックDNSにキャッシュをフラッシュできるツールがあることに気づきました:
https://developers.google.com/speed/public-dns/cache
かなりの割合のクライアントがこれを使用する可能性が高いため、これにより処理速度が向上する場合があります。