EventBridge スケジューラでCloudWatch LogsをS3に定期出力

AWS

前回のブログでCloudwatch logs のログをS3 に送信するということをやりました。今回はそれを自動化してみます。自動化といってもCron をEventbridge で仕込む形です。

前回のブログでCloudwatch logs からS3 にログを送信するやり方を書いているので、見てみてください!前回のブログでエクスポートの仕方は解説しているので、今回は、Eventbridge スケジューラの設定から進めていきたいと思います。

Eventbridge スケジューラとは

公式ドキュメントの一行目を抜粋します

Amazon EventBridge スケジューラはサーバーレススケジューラで、一元化されたマネージドサービスからタスクを作成、実行、管理できます。スケーラビリティに優れた EventBridge スケジューラを使用すると、270 を超える AWS サービスと 6,000 を超える API オペレーションを呼び出すことができる数百万のタスクをスケジュールできます。

引用元:https://docs.aws.amazon.com/ja_jp/scheduler/latest/UserGuide/what-is-scheduler.html

タスクの作成・実行・管理のすべてをやってくれると書いていますね。もうこの時点で色々カバーしてるのではという感じがしますね。

さて、設定手順に進んでいきます。

Eventbridge スケジューラの設定手順について

時間の指定

Cron での時間指定か、何時間ごとに実行してほしいなどの要件があれば、Rateベースで設定することもできます。

設定すると次の実行時間も表示されるため、確認が可能です。フレックスタイムウィンドウズを設定するとある一定の時間の間で実行するが可能になります。

ターゲットの選択 

すべてのAPI > Cloudwatch を選択してください。色々ありますが、 Cloudwatch logs というのを選択します。

タスクを決定する

Cloudwatch logs でも色々できるそうですが、ログの送信なので、CreateExportTask を選択します。

Task の内容をJson で定義

以下のFrom To は2025年の3月から2100年の1月1日を指定してますが、お好みで変更してください。ただ、注意点として時間をUnix Time に変更する必要があるので、geminiやchatgptに頼んで変換してもらってください。

{
  "LogGroupName": "/aws/lambda/test-function",  // 自分のLogGroupNameに変更
  "From": 1721904000000, // Unix Time に変更
  "To": 4102444800000,   // Unix Time に変更
  "Destination": "<your bucket name>",   // S3 に変更
  "DestinationPrefix": "your/path/for/prefix"       // Prefixを設定
}

IAM Role の設定など

最後の設定の部分では、スケジュールの状態や再試行ポリシーなどを設定することが可能です。いわゆるデッドレターキューなども設定可能です。今回は失敗しても影響があるものではないため、このあたりの設定はデフォルトのままでいきます。

IAM Role は設定する必要があるので、その設定を進めていきます。

IAM Policy の設定について

このポリシーを貼り付けて、適宜名称をつけてください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateExportTask",
                "logs:CancelExportTask",
                "logs:DescribeExportTasks",
                "logs:DescribeLogStreams",
                "logs:DescribeLogGroups"
            ],
            "Resource": "*"
        }
    ]
}

IAM Role の作成

Event Bridge のスケジューラのみが実行できるようにするRole になっています。このTrust Role に先ほどのポリシーをつけてあげたら、先ほど作成したポリシーをセットしてあげます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

EventBridge スケジューラに設定

先ほど作成した、Role を紐づけてあげます

これで問題なければ、レビューをして、保存してください。

S3 に先ほど設定したログが配置されているかを確認

失敗している時は、Cloudtrail もしくは、Cloudwatch のInvocationAttemptCountから確認可能なようです。

問題なくログが配置されていたら、そのまま成功なので、監視設定などの必要もなさそうです。ただ、ログの出力は毎日行われるものだと思うので、監視設定はできる限り入れておくのがベストですね。

まとめ

今まではLambda を使ったり、Kinesis Firehose を使うことによって、ログの転送を実現できていましたが、Eventbridge 一つでできるのは、step function と同様管理がかなり減りそうなサービスなので、最低限の監視を設定して後はおいておく運用ができそうですね。

参考文献

Amazon EventBridge Scheduler のフレックスタイムウィンドウを利用したサーバーレスなスケジューラーの使い方 - builders.flash☆ - 変化を求めるデベロッパーを応援するウェブマガジン | AWS
AWS が変化を求めるデベロッパーの皆様を応援するウェブマガジン。毎月更新する記事で新たなスキルや他のデベロッパーが抱える課題と解決方法に迫るインタビューをご覧いただけます。

\ 最新情報をチェック /

コメント

PAGE TOP
タイトルとURLをコピーしました