LoginSignup
8
4

More than 3 years have passed since last update.

AWS LambdaFunctionのS3イベントの対象バケットは同一テンプレート内で定義したものしかサポートしない!

Last updated at Posted at 2019-05-09

きっかけ

S3へのファイル格納をトリガーとしたLambdaFunctionを作成した。

そして
運用自動化のため、SAMのファイルに定義を記述していざ、
デプロイしようとしたときである

問題発生

下記のエラーが発生した

Transform AWS::Serverless-2016-10-31 failed with: Invalid Serverless Application Specification document. Number of errors found: 1. Resource with id [hoge] is invalid. Event with id [hogeUpload] is invalid. S3 events must reference an S3 bucket in the same template.

よくよく見てみると

S3 events must reference an S3 bucket in the same template.

「同じテンプレート内のS3を参照〜」と記述されているので

SAMファイルから生成したCFnのファイル内でAWSの画面コンソールから作成しようとしても
変更セット作成時に同一のエラーが発生した。

原因

どうやら
「対象バケットは同一テンプレート内で定義したものしかサポートしない」らしい
参考URL
https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#s3

issueも上がっている
https://github.com/awslabs/serverless-application-model/issues/124

対応

同一テンプレート内のS3バケットであれば[!GetAtt]で問題なく定義できる。

所感

AWS的にはアプリの機能毎にテンプレートを分けて欲しい為の仕様と思われる

アプリの立ち上げ時にS3、EC2、RDS、etcというAWSの機能単位でテンプレートを作成していた為、当事象に直面した。

他にもアプリを機能単位でまとめないと
CloudFormationのテンプレート内で使う組み込み関数での参照時に
循環依存の問題にぶち当たる事が多々ある

AWS的なベストプラクティスは
アプリの機能毎にテンプレートを分ける
という事なのだろうか?

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4