gitkadoの気まぐれ日記

島根在住エンジニアが何かに興味を持ったらブログを更新します

sam local invoke で環境変数が読み込めないトラブル解決方法

はじめに

AWS SAMCLIsam local invokeという
Lambda関数をローカル実行するコマンドがあります。

前提

  • cloud9でLambda関数およびLambdaLayerを開発
  • Lambda関数
    • Layer(2種)を使った処理
    • 環境変数GEM_PATHを設定
  • LambdaLayer(2種)
    • gem
    • 定数や独自実装メソッド

問題

deployしたLambda関数は問題なく処理を実行できるが、
sam local invokeで実行したLambda関数はgemがrequireできずエラーに…

原因

samで使用しているtemplate.yamlでEnviroments設定をしているが、
sam local invokeではパラメータで環境変数を指定する必要がある!?

対処

  1. 環境変数を定義したファイル(env.json)を作成
  2. --env-varsを指定してLambda関数を実行
# env.json
{
  "HelloWorldFunction": {
    "GEM_PATH": "/opt/ruby/2.5.0"
  }
}
$ sam local invoke HelloWorldFunction --event event.json --env-vars env.json

まとめ

template.yaml書いてれば良いと思い込んでしまってた…
でも、これでLambda開発環境は整った!(はず)

参考サイト

[公式] AWS SAM --env-vars オプション