【datadog】datadog ~ s3 ファイル到達の監視を考える ~

◾️はじめに

s3 ファイル到達の監視を考える

目次

【1】やりたいこと
【2】実装案
 1)EventBridgeに関して
【3】案1:S3イベント通知→Lambda→CloudWatch Logs→Datadogで実装
 1)Lambda を作成する
 2)S3イベント通知を設定する

【1】やりたいこと

* AWS s3 にファイルが到達したかを datadog で 監視する

 => put / delete イベントを拾う
 => s3 bucket name および key (path) を表示
 => ファイルサイズも表示

【2】実装案

案1:S3イベント通知→Lambda→CloudWatch Logs→Datadog
案2:S3イベント通知→EventBridge→CloudWatch Logs→Datadog
案3:S3イベント通知→EventBridge→Datadog

などなど

他にもCloudTrailを利用した案などいろいろ考えられる、、、

1)EventBridgeに関して

* 以下のサイトによると、
 大きいサイズのファイルの場合、イベントが発火しないケースもあるらしい
 => まずは、案1で検討を進めてみる

https://qiita.com/NaotoFushimi/items/cb78ca79575cf42b4dfe
https://stackoverflow.com/questions/67074187/eventbridge-responseelements-too-large

【3】案1:S3イベント通知→Lambda→CloudWatch Logs→Datadogで実装

* 2)以降は、Teraformで書きたい、、、
 => Teraformコードについては、以下の関連記事を参照。

Terraform ~ s3 ファイル到達の監視を考える ~
https://dk521123.hatenablog.com/entry/2025/09/18/003116

1)Lambda を作成する

* 以下で行ったサンプルを少し改変

https://dk521123.hatenablog.com/entry/2024/05/23/162229

サンプル

import logging
import json

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    try:
        for record in event['Records']:
            # Step1: Get the object from the event
            event_name = record['eventName']
            s3_bucket = record['s3']['bucket']['name']
            s3_key = record['s3']['object']['key']
            file_size = record['s3']['object'].get('size', 0)

            # Step2: Generate payload to send it to datadog
            payload = {
                "event_type": event_name,
                "s3_path": f"s3://{s3_bucket}/{s3_key}",
                "file_size": file_size
            }

            # Step3: Output
            content = json.dumps(payload)
            logger.info(f"[S3_MONITORING] {content}")     
    except Exception as ex:
        logger.error(f"[S3_MONITORING] {ex}")
        raise ex
    return {
        "statusCode": 200,
        "body": { "result": "The process is successful!!" }
    }

2)S3イベント通知を設定する

* 対象s3バケットに対して、S3イベント通知を設定する
 => S3イベント "s3:ObjectCreated:*", "s3:ObjectRemoved:*" を拾う

イベント通知タイプ

* 以下の公式ドキュメント参照

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/notification-how-to-event-types-and-destinations.html#supported-notification-event-types

関連記事

datadog ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2024/03/30/004746
datadog ~ integration ~
https://dk521123.hatenablog.com/entry/2025/04/11/003254
Lambda ~ Python / S3トリガー ~
https://dk521123.hatenablog.com/entry/2024/05/23/162229
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
Terraform ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/05/03/000000
Terraform ~ AWS Lambda / 入門編 ~
https://dk521123.hatenablog.com/entry/2024/05/30/010920
Terraform ~ AWS Lambda / あれこれ ~
https://dk521123.hatenablog.com/entry/2024/05/31/005406
Terraform ~ s3 ファイル到達の監視を考える ~
https://dk521123.hatenablog.com/entry/2025/09/18/003116