26

私の理解度がElastic Beanstalkであるということは、新しいバージョンのアプリケーションをデプロイするときに、一度に1つずつAmazon EC2インスタンスにデプロイすることです(複数ある場合)。しかし、少なくとも2つのインスタンスがあっても、アプリケーションをデプロイするときに新しい.warをアップロードすると、同時に両方のインスタンスを同時に更新しているかのように、アプリケーションの停止時間が短くなります。ダウンタイムがなく、次の開始前に1つのインスタンスが完全に更新され、要求を受け入れることができる方法はありますか?ここにイベントの見方があります。これはアプリの負荷がゼロであることに注意してください。そのため、運用トラフィックでは悪化します。新しいバージョンのアプリケーションのAWS Elastic Beanstalkデプロイメント中のダウンタイムを防ぐにはどうすればいいですか?

INFO 
Environment update completed successfully. 

INFO 
New application version was deployed to running EC2 instances. 

ERROR 
The application did not respond at the health check URL. 

INFO 
Waiting for 8 seconds while EC2 instances download the updated application version. 

INFO 
Deploying version SomethingMore to 2 instance(s). 

答えて

19

Elastic Beanstalkでこの目標を達成するには、複数の環境AWS Elastic Beanstalk Componentsを参照)を促進するために、デプロイメント・プロシージャを展開する必要があります:

に環境をAWS上に展開されているバージョンですリソース。各 環境では1つのバージョンしか実行されませんが、と同じバージョンの バージョンを使用することも、多くの環境で異なるバージョンを同時に実行することもできます。 [...] については、 という環境およびリソースについての詳細は、Architectural Overviewを参照してください。 [重点鉱山]

この機能は、別のバージョン既にテスト/デバッグするために有用であるが、具体的には、これは、それぞれのチュートリアルためDeploying Versions With Zero Downtimeを参照して、同様に環境のホットスワッピングを可能にする:

をAWSため アプリケーションバージョンを更新するとElastic Beanstalkがインプレースアップデートを実行するため、ダウンタイムが発生します。 のCNAME を交換することで、このダウンタイムを回避することは可能です。このセクションでは、AWS管理コンソール、コマンドライン インターフェイス、またはAPIを使用して CNAMEのスワップを実行する方法について説明します。 [重点鉱山]

+0

環境CNAMEの交換はまさに私が探していたものです。 – Peter

+6

私はこれを私のプロダクションアプリで試してみたところ、CNAMEをスワップしてDNS TTLが期限切れになるのを待っても、かなりの量のトラフィックがまだ古いbeanstalk環境に行き渡っていたことがわかりました。私はこれがクライアントがDNSキャッシュを必要以上に長く保持しているためだと考えています。クライアントがTTLに従うことができない場合、このCNAMEスワッピング手法は、BeanstalkでZDD展開を実行する信頼できる方法ではないようです。 –

+0

@AaronIbaこれは非常に良い所見です。あなたは何か別の方法を考え出しましたか?私は単に既存のアプリケーションのバージョンを上書きし、既存のインスタンスを手動でシャットダウンすることを考えています(ASGは新しいインスタンスを立ち上げ、更新されたアプリケーションのバージョンを取得する必要があります)。しかし、それは手動/遅い/扱いにくいプロセスであり、ハックのように感じます。 –

6

私は、これは古い質問ですけど、(私のような)グーグルで人々のために、Elastic Beanstalkでは(2014年11月2日)今日ローリングアプリケーションのバージョンの導入を発表しました。

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html?sc_ichannel=em&sc_icountry=global&sc_icampaigntype=launch&sc_icampaign=em_125873140&sc_idetail=em_14124901705&ref_=pe_411040_125873140_8

これは、トラフィックを取るために利用可能なホストが常に存在だということを保証する、あなたが一度にあなたの新しいアプリケーションであなたの艦隊の一部を更新することができます。

+0

これは機能するだけですかロードバランサの背後で複数のインスタンスを実行している場合それがどのように記述されているかから、1つのインスタンスがまだダウンするようです。 –

+1

あなたのElastic Beanstalk環境では、ダウンタイムを避けるために複数のインスタンスが必要です。しかし、これはどこでも真実です。あるホストからのトラフィックを処理していて、ホストが更新されていても(その場にいても)、ダウンタイムが発生する可能性があります。 – zongweil

+0

上記のステートメントは単に真ではありません。私はnginxを使って単一のホスト上で停止時間をゼロにしました。 –

関連する問題