4
1

More than 5 years have passed since last update.

ローカルでビルドしたものをpackageするときは --template-file オプションはつけない

Last updated at Posted at 2019-02-26

Overview

  • AWS SAM を使ってpackageを実行するとき、 --template-file オプションでテンプレートファイルを指定してしまうと --template-file で指定したファイルの CodeUri にあるリソースをもとに package を実行しようとする
  • ローカルでビルドしたものをデプロイするときは --teplate-file オプションはつけてはいけない

問題に気づいた経緯

  • ローカルでビルドしたものをデプロイするさいに、 node_modules 配下のファイルが Lambda Function にデプロイされていない
  • .aws-sam/build 配下には node_modules 配下のリソースが生成されている

build、package 実行時のコマンドは以下でした

sam build
sam package \
  --template-file template.yaml \
  --output-template-file packaged.yaml \
  --s3-bucket my-bucket \
;

原因

AWS SAM を使ってデプロイするとき、 --template-file オプションでテンプレートファイルを指定すると --template-file で指定したファイルの CodeUri にあるリソースをデプロイしようとするため.
CodeUri にはビルド前のリソースが指定されているので、これをデプロイしようとすると node_modules 配下は含まれていないため、デプロイ後の Lambda Function にも node_modules が含まれていない.

解決方法

ローカルでビルドしたものをpackageするときは --template-file オプションはつけない

sam build
sam package \
  --output-template-file packaged.yaml \
  --s3-bucket my-bucket \
;

教訓

ツールが中でどんな処理を行っているのかちゃんと把握しよう

アーティファクトの依存関係からして当たり前っちゃ当たり前ですね。。
template.yaml (入力) => sam build => pacakged.yaml (出力) という関係なので、
次のステップで sam package を実行するときに入力として template.yaml を指定するのはおかしいわけです。
package でこのオプションを指定するのは、ローカルでビルドした資材を直接 Lambda Function にデプロイする場合です。

参考

GitHub に Issue が上がっていました
https://github.com/awslabs/aws-sam-cli/issues/908

4
1
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
4
1