SAMでS3バケットをイベントソースとするLambda関数を構築する場合、既存のS3バケットに対してはイベントソースを設定することができない。
SAMの仕様書には、同じテンプレートで作成したS3バケットしか指定できないと記述されている。
しかし、やろうと思えば既存のS3バケットに対してLambda関数を呼び出すように構成することができる。
主に3つの方法がある。
既存のS3バケットをインポートして制限を回避する方法
デプロイ後にイベントソースを設定する方法
CloudTrailとEventBridgeを使う方法
S3バケットのイベントを使うのではなく、EventBridgeをイベントソースとして使う。
S3バケットはEventBridgeに対応していないため間にCloudTrailを挟む。
S3バケットに対してCloudTrailを構成し、CloudTrailに対してEventBridgeを設定し、EventBridgeからLambda関数を呼び出す。
S3バケットのイベント
SQS、SNS、および Lambda でサポートされているイベントタイプ 一部抜粋
新しいオブジェクトが作成された時に発生するイベント
s3:ObjectCreated:*
s3:ObjectCreated:Put
Putメソッドでオブジェクトが配置された
s3:ObjectCreated:Post
Postメソッドでオブジェクトが配置された
s3:ObjectCreated:Copy
Copyメソッドでオブジェクトが配置された
s3:ObjectCreated:CompleteMultipartUpload
Multipart Upload APIでオブジェクトが配置された
オブジェクトが削除された時に発生するイベント
s3:ObjectRemoved:*
s3:ObjectRemoved:Delete
一般的な削除
s3:ObjectRemoved:DeleteMarkerCreated
バージョニングによって削除マーカーが作成されたとき
低冗長化ストレージ(RRS)を用いているときに、障害などによってオブジェクトが消失した時に発生するイベント
s3:ReducedRedundancyLostObject
S3 Glacierストレージを用いているときの復元開始や完了の通知イベント
s3:ObjectRestore:Post
復元が開始された
s3:ObjectRestore:Completed
復元が完了した
S3バケットに対してレプリケーション時間コントロール(S3 RTC)を適用したレプリケーションを構成している場合、時間内に失敗したり再開したりした時のイベント
s3:Replication:OperationFailedReplication
s3:Replication:OperationMissedThreshold
レプリケーション時間コントロールの対象オブジェクトがレプリケーションの15分の閾値を超えた
s3:Replication:OperationReplicatedAfterThreshold
15分の閾値を超えた後にレプリケーションされた
s3:Replication:OperationNotTracked
対象オブジェクトがレプリケーションメトリクスによる追跡から外れた