こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。
前回CloudWatch Logsに蓄積させたログをS3に手動でエクスポートする手順を確認しました。
今回はこの続きで、EventBridgeを使用して自動でS3にエクスポートする手順をメモって行きたいと思います。
EventBridgeを使うことで、Linuxで言うcron、Windowsで言うTask Scheduler的なことがAWSで出来るので良い感じですね。
環境イメージ
以下のような形となります。
EC2からCloudWatch AgentでCloudWatch Logsにログを自動アップロード。アップロードされたものEventBridge Schedulerを使って1分間隔でS3にエクスポートしていきたいと思います。
構築
IAM Role作成
EventBridge SchedulerにアタッチするためのIAM Roleを作成していきます。
IAM Role作成画面でカスタム信頼ポリシーを選択し、ポリシーに以下の内容を書いていきます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "scheduler.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
※scheduler.amazonaws.com(=EventBridge Scheduler)が今作っているIAM Roleを使用して定義されたアクション(IAMロールにアタッチされたアクセスポリシー。今回は後からCloudWatchLogsFullAccessをアタッチするのでそれのこと)を実行することが出来るようになる、という意味っぽいです。
許可を追加の画面でCloudWatchLogsFullAccessをアタッチします。
Roleの名前はEventBridge-add-task-to-CloudWatchLogsとしました。
EventBridge Schedulerの作成
EventBridge Schedulerの画面からスケジュールを作成を押下します。
Schedulerの名前はCloudWatchLogs-S3Exportとしました。
スケジュールパターンの頻度は定期的なスケジュールを選択。種類はrateベースとし、1 minutesとし1分間隔でスケジューリングしました。
ターゲットを選択します。CloudWatch Logsを選択します。
その後CreateExportTaskを選択します。
タスクの詳細を記入します。今回は以下としました。
LogGroupNameはCloudWatchLogsにあるロググループの名前です。
FromとToはエポック時間ミリ秒単位で開始時間と終了時間を記載します。AIに「エポック時間で2024年1月1日から12月31日までにしてください」みたいなことを聞いて出力してきたのをとりあえず入れています。
DestinationはS3バケットの名前を。Prefixはバケットの中のディレクトリを示しています。<aws.scheduler.scheduled-time>はタスク実行時間になり、実行ごとにフォルダを作るようにしています。
{
"LogGroupName": "ApplicationEventLog",
"From": 1704067200000,
"To": 1735689599000,
"Destination": "wineventlog-cloudwatchlogs",
"DestinationPrefix": "ApplicationEventLog/<aws.scheduler.scheduled-time>"
}
アクセス許可に作成したIAM Roleをアタッチします。この後の画面で最終確認が表示されますので確認します。
作成されたことを確認します。
S3に自動エクスポートされるか確認する
指定したS3バケット/プレフィックスに自動でエクスポートされているかを確認します。
CloudWatch LogsからS3にエクスポートしたことで、Logsにあるログを削除したいところです。
これに関しては今後・・・