AWS でホストされている重いアプリがあります。新しいリリースの準備ができたら、CodeDeploy と Code Pipeline (github から更新) を使用してサーバーを更新します (現在、運用環境で 6 つの ec2 インスタンスを実行しています)。
1 つずつ動作するように codedeploy をセットアップし、ロード バランサーで 300 秒の接続ドレインを定義しました。
それでも、私のアプリケーションは重く (大きなディクショナリ ピクル ファイルをディスクからメモリにロードします)、起動プロセスには約 60 秒かかります。この 60 秒で、CodeDeploy はインスタンスへのデプロイ プロセスを完了としてマークし、正常なインスタンスとしてロード バランサーに再び参加させます。これにより、ユーザーがアプリケーションにアクセスしようとするとエラーが発生する可能性があります。
フックを使用することを考えValidateService
ましたが、私の場合はどうすればよいかわかりません..
次のインスタンスに進む前に、アプリケーションが完全にロードされて準備が整うのを待つ方法についてのアイデアはありますか?
これは私の現在の AppSpec.yml です
version: 0.0
os: linux
files:
- source: /deployment
destination: /deployment
- source: /webserver/src
destination: /vagrant/webserver/src
permissions:
- object: /deployment
pattern: "**"
owner: root
mode: 644
type:
- directory
- object: /webserver/src
owner: root
mode: 644
except: [/webserver/src/dictionaries]
type:
- directory
hooks:
ApplicationStop:
- location: /deployment/aws_application_stop.sh
BeforeInstall:
- location: /deployment/aws_before_install.sh
AfterInstall:
- location: /deployment/aws_after_install.sh
ApplicationStart:
- location: /deployment/aws_application_start.sh