既存の ECS クラスターに対して ECS Exec のログ記録を有効化する方法を教えてください
困っていること
既存の ECS クラスターにて ECS Exec のログ記録を有効化したいと考えています。
しかしながら、マネジメントコンソールから有効化しようとしたところ、対象の設定を編集可能な画面を見つけることができませんでした。
有効化するための方法を教えてください。
どう対応すればいいの?
AWS CLI で ecs update-cluster コマンドを実行してください。
この際、--configuration executeCommandConfiguration を引数として指定する必要があります。
具体的なコマンドは各出力先の場合で以下の通りです。
S3 にログを出力する場合
aws ecs update-cluster \
--cluster <対象の ECS クラスター> \
--configuration executeCommandConfiguration="{ \
kmsKeyId=<暗号化に使用する KMS キー ID>, \
logging=OVERRIDE, \
logConfiguration={ \
s3BucketName=<出力先 S3 バケット名>, \
s3EncryptionEnabled=<出力先 S3 が暗号化している場合は true そうでない場合は false>, \
s3KeyPrefix=<出力先 S3 プレフィックス名> \
} \
}"
CloudWatchLogs にログを出力する場合
aws ecs update-cluster \
--cluster <対象の ECS クラスター> \
--configuration executeCommandConfiguration="{ \
kmsKeyId=<暗号化に使用する KMS キー ID>, \
logging=OVERRIDE, \
logConfiguration={ \
cloudWatchLogGroupName=<出力先 CloudWatchLogs グループ>, \
cloudWatchEncryptionEnabled=<暗号化する場合は true そうでない場合は false> \
} \
}"
S3 と CloudWatchLogs 両方にログを出力する場合
aws ecs update-cluster \
--cluster <対象の ECS クラスター> \
--configuration executeCommandConfiguration="{ \
kmsKeyId=<暗号化に使用する KMS キー ID>, \
logging=OVERRIDE, \
logConfiguration={ \
cloudWatchLogGroupName=<出力先 CloudWatchLogs グループ>, \
cloudWatchEncryptionEnabled=<暗号化する場合は true そうでない場合は false>, \
s3BucketName=<出力先 S3 バケット名>, \
s3EncryptionEnabled=<暗号化する場合は true そうでない場合は false>, \
s3KeyPrefix=<出力先 S3 プレフィックス名> \
} \
}"
KMS キーによる暗号化が不要な場合は、kmsKeyId を指定する必要はありません。
また、暗号化された CloudWatchLogs や S3 に対してログを出力する場合、ECS のタスクロールに追加のアクセス権限付与が必要な場合があるのでご注意ください。[1]
やってみた
実際に ECS Exec のログ出力を既存クラスターで有効化してみます。
CloudShell を開き、以下 CLI コマンドを実行して S3 へのログ出力を有効化します。
コマンド実行後、対象クラスターの設定画面でログ記録設定が有効化されていることが確認できました。
クラスター内で稼働しているタスクに ECS Exec で接続し、ログが出力されるか確認します。
無事に S3 バケット上に ログが出力されていることが確認できました。