web-dev-qa-db-ja.com

EC2サーバーの自動スケーリングとコードの更新

Webサーバーの自動スケーリングを設定する必要があり、新しいAMIを再作成したり、使用する自動スケール構成を変更したりせずに、サーバーをスケーリングして既存のコードを更新するプロセスを実行する方法がわかりません。それ。

新しいコードをバンドルしてs3にアップロードし、起動時に新しいサーバーにバンドルを取得させる人々について少し読んだことがありますが、それもそれほど楽しいとは思えません。

現在、Webアプリのファイルはgitリポジトリにあり、コードを更新するときは、それをgithubにプッシュし、WebアプリにSSHで接続し、フックを実行して最新のコードを停止します。

そのため、別のオプションとして、1時間ごとまたは1日ごとのcronタスクでそのフックを実行することも考えていました。残念ながら、これはすべての種類の更新(たとえば、新しいブログ投稿の画像など、gitリポジトリに含まれていないもの)を網羅しているわけではありませんが、それは何かです。

誰かが一般的な解決策とは何か、または私の提案した解決策が悪い考えである理由について何かアドバイスを提供できますか?

皆さんありがとう

4
jstats

私はメジャーリリースとシステム変更のために新しいAMIを作成するのが好きですが、マイナーリリースでは、起動時にコードベースだけを更新するためにgit pullを実行するようにボックスを構成することも好きです。私たちは定期的に小さなコード変更をリリースしているので、新しいAMIを作成する負担はそれだけの価値がありません。

マシンが稼働した後は、capistranoなどのツールを使用してプッシュスタイルの展開を行うのが最善だと思います。例外の処理がはるかに難しいため、cronジョブを使用してサーバーに新しいコードが自動起動されるのを見るのは好きではありません。必然的に、誰かが元に戻す必要のあるレポにコードをプッシュし、その間にcronjobが誤ったコードをトリガーして起動する可能性があります。

主な問題は、新しいインスタンスが自動スケーリングコンテキストで起動されると、無人で最新のコードベースで自身を更新できることです。

2
platforms

Amazonの推奨事項は、自動スケーリングAMIが起動時に完全に構​​成できる必要があることです。したがって、優れたクラウドアプリを作成するには、AMIが中央構成ストレージ(S3?)にレポートし、コード/構成を取得する必要があります。次に、中央構成を使用して、実行中のインスタンスに関する情報を取得し、新しいバージョンのソフトウェアなどをプッシュできます。静的コンテンツもS3に配置して、コード/実行中のインスタンスに依存しないようにする必要があります。

2
user107708