LoginSignup
0

More than 3 years have passed since last update.

AWS SAM CLI + Ruby のローカル開発時にホットリローディングされない件

Posted at

aws-sam-cliでLambda上で動かすRubyスクリプトを書いていたのだけど、sam local start-apiを実行したときにホットリローディングが効かなくてしばらくハマっていたのでした。

原因はsam build

sam buildをしていたことで.aws-sam配下にパッケージされたLambdaファンクション一式ができあがるのだけど、
これがある状態でsam local start-apiするとこちらが優先して参照されてしまうらしい。

.aws-sam
└── build
    ├── HelloWorldFunction
    │   ├── Gemfile
    │   ├── Gemfile.lock
    │   ├── app.rb
    │   └── vendor
    │       └── bundle
    └── template.yaml

ファンクションごとのgemのインストールパスについて

なぜsam buildしたかというと、start-apiしたときにgemが見つからないってエラーが発生したため。
こんな感じで。

{
  "errorType": "Init\u003cLoadError\u003e",
  "errorMessage": "cannot load such file -- httparty",
  "stackTrace": [
  ~
}

開発時には以下のようにvendor/bundle配下を指定してgem installする。
(自分はいつも.bundleにインストールする派だったのでここでも少しハマった)

$ bundle install --path hello_world/vendor/bundle

複数のLambdaファンクションを作成する場合は--gemfileオプションを付けたほうが良いかも。
--gemfileオプションを付ける場合、--pathで指定するインストールディレクトリは--gemfileで指定したGemfileを起点としたパスになる(さっき気づいた)ので以下のようになる。

$ bundle install --path vendor/bundle --gemfile hello_world/Gemfile

こうなる。

.
├── Gemfile
├── Gemfile.lock
├── README.md
├── hello_world
│   ├── Gemfile
│   ├── Gemfile.lock
│   └── app.rb
│   └── vendor
│       └── bundle
├── template.yaml
└── tests

まとめ

ざざっと調べた程度ですが公式のドキュメントやStack Overflow等でもAWS SAM + Ruby の情報はまだ少ない様子。
今回の教訓は以下のとおりです。

  • sam buildはデプロイ時に
  • gem は vendor/bundleに置く

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
0