やりたいこと
AWSのCloudWatchLogsのロググループを指定し、S3にログ情報を退避する。
環境情報
- aws-cli/2.15.5
やり方
以下のようにロググループとS3のバケットを指定し、ログの範囲をUNIX時間で与える。
$ aws logs create-export-task --task-name "test" --log-group-name "/aws/test/" --from 1746834146000 --to 1747698146000 --destination "s3-test" --destination-prefix "hoge"
すると標準出力にエクスポートを行うタスクIDが表示され
{ "taskId": "xx-xx-xx-xx-xx" }
一定時間待つとS3にログデータが格納されている。
$ aws s3 ls s3://s3-test --recursive ... 1414 hoge/xx-xx-xx-xx-xx/test.log/000000.gz ... 27 hoge/aws-logs-write-test
以下、補足です。
補足
エクスポートタスクの状況は以下のコマンドで確認ができます。
$ aws logs describe-export-tasks --task-id xx-xx-xx-xx-xx { "exportTasks": [ { "taskId": "xx-xx-xx-xx-xx", "taskName": "test", "logGroupName": "/aws/test/", "from": 1746834146000, "to": 1747698146000, "destination": "s3-test", "destinationPrefix": "hoge", "status": { "code": "COMPLETED", "message": "Completed successfully" }, "executionInfo": { "creationTime": 1747698375972, "completionTime": 1747698377767 } } ] }
また、指定したS3に出力されていたファイルはデフォルトで配置される模様。指定した時間にログがない場合は同ファイルのみが出力されます。
$ aws s3 cp s3://s3-test/hoge/aws-logs-write-test - Permission Check Successful
同作業の注意点として、S3側に事前に権限設定を追加しておかないといけない点です。S3のパーミッションにて"logs.amazonaws.com"からのPutObject権限がないと、権限エラーとなるので事前にバケット側に設定追加が必要となります。
以上、ご参考になれば幸いです。