Serverless Application ModelにおけるS3イベントの扱い

ryichk
·
公開:2023/12/22

SAMでS3バケットをイベントソースとするLambda関数を構築する場合、既存のS3バケットに対してはイベントソースを設定することができない。

SAMの仕様書には、同じテンプレートで作成したS3バケットしか指定できないと記述されている。

しかし、やろうと思えば既存のS3バケットに対してLambda関数を呼び出すように構成することができる。

主に3つの方法がある。

  1. 既存のS3バケットをインポートして制限を回避する方法

  2. デプロイ後にイベントソースを設定する方法

  3. CloudTrailとEventBridgeを使う方法

    S3バケットのイベントを使うのではなく、EventBridgeをイベントソースとして使う。

    S3バケットはEventBridgeに対応していないため間にCloudTrailを挟む。

    S3バケットに対してCloudTrailを構成し、CloudTrailに対してEventBridgeを設定し、EventBridgeからLambda関数を呼び出す。

S3バケットのイベント

SQS、SNS、および Lambda でサポートされているイベントタイプ 一部抜粋

  1. 新しいオブジェクトが作成された時に発生するイベント

  • s3:ObjectCreated:*

  • s3:ObjectCreated:Put

    Putメソッドでオブジェクトが配置された

  • s3:ObjectCreated:Post

    Postメソッドでオブジェクトが配置された

  • s3:ObjectCreated:Copy

    Copyメソッドでオブジェクトが配置された

  • s3:ObjectCreated:CompleteMultipartUpload

    Multipart Upload APIでオブジェクトが配置された

  1. オブジェクトが削除された時に発生するイベント

  • s3:ObjectRemoved:*

  • s3:ObjectRemoved:Delete

    一般的な削除

  • s3:ObjectRemoved:DeleteMarkerCreated

    バージョニングによって削除マーカーが作成されたとき

  1. 低冗長化ストレージ(RRS)を用いているときに、障害などによってオブジェクトが消失した時に発生するイベント

  • s3:ReducedRedundancyLostObject

  1. S3 Glacierストレージを用いているときの復元開始や完了の通知イベント

  • s3:ObjectRestore:Post

    復元が開始された

  • s3:ObjectRestore:Completed

    復元が完了した

  1. S3バケットに対してレプリケーション時間コントロール(S3 RTC)を適用したレプリケーションを構成している場合、時間内に失敗したり再開したりした時のイベント

  • s3:Replication:OperationFailedReplication

  • s3:Replication:OperationMissedThreshold

    レプリケーション時間コントロールの対象オブジェクトがレプリケーションの15分の閾値を超えた

  • s3:Replication:OperationReplicatedAfterThreshold

    15分の閾値を超えた後にレプリケーションされた

  • s3:Replication:OperationNotTracked

    対象オブジェクトがレプリケーションメトリクスによる追跡から外れた

参考

AWS Lambda実践ガイド 第2版

@ryichk
wanna be a good hacker.