Edited at

AWS Lambda関数の「Configuration is ambiguously defined」エラーへの対応

More than 1 year has passed since last update.

S3の更新をトリガーにして実行されるLambda関数の設定更新でハマったので後世のためにその対処方法を記しておきます。なお、2018年5月31日時点での情報になります。


エラー概要

S3の変更をトリガーにしたLambda関数の新規作成または更新で発生します。

Lambda関数が作成、または更新できなくなります。


エラー画面

AWS-Lmbda-error2.png


エラーログ

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のバケットにトリガーイベントを設定するのはアトミックな処理になっていないようです。


  1. 他のLambda関数がトリガーにしているS3のバケットを指定している


    • 仕様なのでどうにもならない



  2. Lambda関数の更新に失敗して関数自体のS3のトリガー設定は消えたが、S3のバケットのトリガー設定は残っている


2のケースの対処方法

該当のS3のバケットの プロパティ > Events を開き、設定されているイベントを全て削除すればLambda関数が更新できるようになります。

以下のキャプチャはバケットにLambda関数のトリガーイベントが設定されている状態のものです。

S3-config.png


参考資料

以下のサイトを読んでS3のイベント設定の存在に気付きました。感謝。

【AWS】Lambdaのトリガー設定時にS3のバケットを追加するとエラーになる時がある