Deploying Versions with Zero Downtime、別名CNAME swappingに関する AWS ドキュメントを読みました。
2 つの CNAME を交換するだけです。たとえば、CNAME foo-1.example.com を持つ 1 つの環境 foo-1 と、CNAME foo-2.example.com を持つ別の環境 foo-2 があるとします。スワップ操作後、環境 foo-1 はhttp://foo-2.example.comで応答します。
問題は、トラフィック全体をすぐに切り替えるのではなく、新しいトラフィックのみを切り替えることです。既存のトラフィックは、最大 TTL 秒間、以前の CNAME エントリを使用し続け、この短い期間 (300 秒、またはArun Kumar によるとそれ以上) の間、2 つのバージョンが共存します。
アプリケーションの 2 つのバージョンが共存できる場合、これは私には受け入れられるように見えます。
ただし、アプリの一部のリリースにはデータベース パッチが含まれており、古いバージョンが削除された直後、および新しいバージョンが導入される直前に実行する必要があります。
したがって、CNAME スワッピングは、データベースにパッチが適用された後に古いバージョンのアプリが壊れてしまうため、私たちが行っていることには十分ではないようです。
理想的には、私はしたいと思います:
- 常に同じ Elastic Load Balancer を維持する
- Elastic Beanstalk に新しいアプリ バージョンで 1 つ以上のインスタンスを起動させる
- ELB から (古いアプリ バージョンの) 既存のインスタンスを削除します。
- データベースにパッチを適用する
- 新しく起動したインスタンス (新しいアプリ バージョンを使用) を ELB に追加します。
これにより、適用するパッチがある場合にのみ503 Service Unavailable
、ダウンタイムがわずか数秒に短縮されます。
それは可能ですか?それとも、全体像が正しく見えなかったのでしょうか。もっと簡単な解決策がありませんか?