ついに、私たちのプロジェクトの 1 つで AWS Opsworks の完全に機能する環境のセットアップが完了しましたが、まだ完全には稼働していません。
テンプレートの 1 つにいくつかの調整を加えた後、誤って Chef 構文エラーをプッシュし、実行中のインスタンスでカスタム クックブック リポジトリを更新して、アプリを再デプロイしました。
デプロイメントの途中で、最初のインスタンスは明らかに失敗しましたが、2 番目のインスタンスはデプロイメントを続行しました。ロード バランサーを介してサイトを読み込もうとすると、サイトがすでにダウンしていて、2 番目のインスタンスのデプロイメントがすぐに終了していることがわかります。
先ほど言ったように、これは本番環境ではなかったのですが、本番環境に移行したらステージング スタックも用意し、本番環境ではこのようなことは起こらないはずです (つまり、chef 構文エラー)。しかし、Opsworks が「1 つのインスタンスで失敗しました。残りのインスタンスへのデプロイを停止してください」と表示できる機能を提供しているかどうか、私は興味がありました。
また、SNS 通知などを送信するなど、デプロイメントが失敗したときに通知を受け取る方法があれば便利です。
デプロイメントが失敗し、すべてのインスタンスへのデプロイメントが停止し、通知、ロールバックなどの状況に他の人がどのように対処するか興味がありました。あるいは、ダッシュボードのいくつかの構成を見逃しているのかもしれません。
答え1
残念ながら、OpsWorks はまだローリング デプロイメント (CodeDeploy や Elastic Beanstalk など) をサポートしていません。そのため、1 つのインスタンスが失敗したときに、タスクの実行が半分完了している可能性のある他のインスタンスを停止することは困難です。
私の提案は、開発スタックを作成するために、本番スタックを複製することです。レシピ リポジトリにマスターと本番の Git ブランチを用意し、開発スタックではマスターを使用し、本番では本番ブランチを使用します。
すべての作業とテストは、Chef 構文エラーを誤ってデプロイしても問題のない開発スタックで実行してください。変更をテストし、ライブに移行する準備ができていることを確認したら、マスターを本番環境にマージし、本番スタックでタスクを実行します。