
Elastic Beanstalk に Tomcat アプリがあり、ログを Cloudwatch Logs に送信したいと考えています。そのために、ファイルに書き込むように log4j を設定し、 に.ebextension
インストールamazon-cloudwatch-agent
して実行します。
commands:
# 00_download_and_install:
# command: rpm --upgrade --force https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
01_start:
command: /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json -s
packages:
yum:
amazon-cloudwatch-agent: []
files:
"/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json":
content: |
{...
}
残念ながら、Elastic Beanstalk にアプリをデプロイするたびにエージェントがシャットダウンし、ssh 経由で手動で再起動する必要があります。
答え1
環境設定でデフォルトのログ ストリーミングを無効に設定した場合、Beanstalk はデプロイメント中に cloudwatch エージェントを停止します。残念ながら、エージェントを起動するための ebextension コマンドが実行された直後にこれが行われます。
この問題を解決するために、プラットフォームの postdeploy フックを使用しました。これは、デプロイメント後に実行され、beanstalk のデフォルトからのエージェントのシャットダウンをオーバーライドします。
アプリケーション バンドルの ./platform/hooks/postdeploy/ に、開始コマンドを含むシェル スクリプトを配置するだけです。