CloudWatch EventsでS3への変更をトリガーする

CloudWatch Eventsを使うとAWSリソースへのイベントやスケジュールをトリガーにして他のAWSサービスを起動するルールを作成することができます。


こちらを参考にS3へのファイル作成を検知してみます。

ルールを作成

まずCloudWatch Eventsルールを作成します。

イベントルールの定義はこちら。
cloudwatch-events-testバケットにtest.txtCopyObjectCompleteMultiPartUploadPutObjectされると発火します。
{
  "source": [
    "aws.s3"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "s3.amazonaws.com"
    ],
    "eventName": [
      "CopyObject",
      "CompleteMultiPartUpload",
      "PutObject"
    ],
    "requestParameters": {
      "bucketName": [
        "cloudwatch-events-test"
      ],
      "key": [
        "test.txt"
      ]
    }
  }
}

ターゲットはCloudWatchロググループを定義して、イベント発火でログが吐かれるようにしておきます。

名前を付けてルールを作成します。

CloudTrail証跡を作成

実は、これだけではイベントを拾うことができません。
AWS API Call via CloudTrailとあるように、CloudTrailを構成してイベントを監視してもらわなければいけません。

証跡情報を作成してイベントを設定したcloudwatch-events-testバケットの証跡を残すように設定します。
これで準備完了です。
バケットにtest.txtを置いてみます。

ログが作成されました。
もちろん他の名前のファイルを置いてもログはできません。

今回はログを出しただけでしたが、Lambdaを起動したりEC2のシェルを実行したりもできるのでリソース同士の連携に便利です。