はじめに
GoをLambdaにデプロイしたのですが、ファイル読み込みで多くの時間を使ったのでまとめます
ServerlessFrameworkを利用したLambdaでファイル読み込みをする方の参考になればと思います
問題
Lambda(go)で以下のコードを実行していました
ここではconfig.ini
という設定ファイルを本番環境では、main
の実行ファイルと同じ階層にあるものを読み込むようにします
しかし、このコードではnot found ./config.ini
となってしまいます
config.go
path := "/go/src/config/config.ini"
if os.Getenv("ENV") == "production" {
path = "./config.ini"
}
cfg, err := ini.Load(path)
解決方法
現在serverless frameworkを利用してserverless.yml
でmain
と同じフォルダにconfig.ini
がアップロードされている状態です
以下のようにファイルパスを変更しました
config.go
if os.Getenv("ENV") == "production" {
path = "/var/task/bin/config.ini"
}
Lambdaのファイルパスは/var/task
いかにアップロードされるようです (serverless framework)
おわりに
この設定で色々遠回りしてしまいましたが、最後はすっきりと書けました
goのテストの関係で相対パスだとファイルの位置でエラーになってしまうので、絶対パスにしてみました