kdnakt blog

hello there.

Windows環境でserverless frameworkを使ってAWS LambdaにGoをデプロイするためにビルドした話とか

Windows環境でGoで書いたAWS Lambda関数をデプロイするのに、serverless frameworkを試してみようとしてハマったので、覚書。

serverless.com

 

 

[deployまでの手順]

基本的な手順はこのページに記載されている通り。

serverless.com

 

ざっと抜き出すとこんな感じ。

  • 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のページが出てきたが、インストールしなおせや、と書かれているので諦めて他を当たることに。

stackoverflow.com

 

日本語で解説記事があったので、これを参考にmakeを実行できるようにした。 

qiita.com

 

といっても、本家のサイトからセットアップ用のプログラムをダウンロードして実行するだけ。

gnuwin32.sourceforge.net

 

[依存管理ツールdepのインストール失敗問題]

というわけで、いざmakeコマンドを実行してみると、dep ensureの文字列の後にCreateProcess(NULL, dep ensure, ...) failed.というエラーが。

f:id:kidani_a:20180801033212p:plain

 

基本手順のページに書いてあったが、depを事前にインストールしておけ、という指示を無視してしまったのが原因のようだ。

 

github.com

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.というエラーメッセージが。

f:id:kidani_a:20180801033722p:plain

 

環境変数GOBINが上手く指定されていないから駄目だ、ということらしい(正確には、GOBIN環境変数は「%GOBIN%¥bin」と指定されているのだが、MinGW上でコマンドを実行するとLinux風に$GOBINと指定されていないとうまく読み取れない)。

 

github.com

この辺を参考に、GOBINを「C:¥go¥bin」のように環境変数GOPATHを使っていた部分をフルパスで記述することで回避。

 

f:id:kidani_a:20180801034339p:plain

今度は無事にビルドが通った。

 

[まとめ]

  • 説明のページは隅々まで読みましょう
  • serverlessいいよserverless 

※この後まだ別の問題にハマって、結局AWSにデプロイしてLambdaの呼び出しまで実行できてないのは内緒。

 

今日のブログ執筆BGMはこちら。

www.youtube.com