S3の更新をトリガーにして実行されるLambda関数の設定更新でハマったので後世のためにその対処方法を記しておきます。なお、2018年5月31日時点での情報になります。
エラー概要
S3の変更をトリガーにしたLambda関数の新規作成または更新で発生します。
Lambda関数が作成、または更新できなくなります。
エラー画面
エラーログ
Configuration is ambiguously defined.
Cannot have overlapping suffixes in two rules if the prefixes are overlapping for the same event type.
(Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: XXX; S3 Extended Request ID: ZZZ)
発生原因は2つありますが私は 2
のケースに引っ掛かりました。
Lambda関数の設定更新とS3のバケットにトリガーイベントを設定するのはアトミックな処理になっていないようです。
- 他のLambda関数がトリガーにしているS3のバケットを指定している
- 仕様なのでどうにもならない
- Lambda関数の更新に失敗して関数自体のS3のトリガー設定は消えたが、S3のバケットのトリガー設定は残っている
2のケースの対処方法
該当のS3のバケットの プロパティ > Events
を開き、設定されているイベントを全て削除すればLambda関数が更新できるようになります。
以下のキャプチャはバケットにLambda関数のトリガーイベントが設定されている状態のものです。
参考資料
以下のサイトを読んでS3のイベント設定の存在に気付きました。感謝。