Windows環境でGoで書いたAWS Lambda関数をデプロイするのに、serverless frameworkを試してみようとしてハマったので、覚書。
[deployまでの手順]
基本的な手順はこのページに記載されている通り。
ざっと抜き出すとこんな感じ。
npm i -g serverless
でserverless frameworkをインストールしておく- aws-cliをインストールし、AWSのアクセスキー、シークレットアクセスキーの設定をしておく(
aws configure
コマンドを利用する) - Goの依存管理ツールdepをインストールしておく(Macなら
brew install dep
) cd $GOPATH/src
コマンド(Windowsの場合はcd %GOPATH%¥src
)を実行してからserverless create -t aws-go-dep -p <project-name>
を実行してプロジェクトを作成するcd <project-name>
コマンドを実行したあと、make
コマンドでGoのソースをビルドしてバイナリファイルを生成するserverless deploy
コマンドでAWSにデプロイするserverless invoke -f hello
コマンドで関数実行
[そもそもmakeコマンドが使えない問題]
Windows環境にGitはインストールしてあるので、MinGW (Minimalist GNU for Windows)は使える状態だったが、serverlessが自動生成したGoのソースコードをビルドするためにmakeコマンドを実行しようとすると、bash make: command not found
のエラーが出て先に進めなくなってしまった。
ググるとStackOverflowのページが出てきたが、インストールしなおせや、と書かれているので諦めて他を当たることに。
日本語で解説記事があったので、これを参考にmakeを実行できるようにした。
といっても、本家のサイトからセットアップ用のプログラムをダウンロードして実行するだけ。
[依存管理ツールdepのインストール失敗問題]
というわけで、いざmakeコマンドを実行してみると、dep ensure
の文字列の後にCreateProcess(NULL, dep ensure, ...) failed.
というエラーが。
基本手順のページに書いてあったが、depを事前にインストールしておけ、という指示を無視してしまったのが原因のようだ。
- Macの場合:
brew install dep
- Windowsの場合:
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
を実行してインストールしろとの記載が。
Windows環境なので後者のコマンドを実行してみる。すると今度はInstallation requires your GOBIN directory %GOPATH%¥bin to exists.
というエラーメッセージが。
環境変数GOBINが上手く指定されていないから駄目だ、ということらしい(正確には、GOBIN環境変数は「%GOBIN%¥bin」と指定されているのだが、MinGW上でコマンドを実行するとLinux風に$GOBINと指定されていないとうまく読み取れない)。
この辺を参考に、GOBINを「C:¥go¥bin」のように環境変数GOPATHを使っていた部分をフルパスで記述することで回避。
今度は無事にビルドが通った。
[まとめ]
- 説明のページは隅々まで読みましょう
- serverlessいいよserverless
※この後まだ別の問題にハマって、結局AWSにデプロイしてLambdaの呼び出しまで実行できてないのは内緒。
今日のブログ執筆BGMはこちら。