Serverless FrameworkでGolangのLambda関数を作成してみる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

先日、AWS LambdaでGolangがサポートされました。それに伴い、Serverless FrameworkでもGolangが使えるようにようなので(※)、試してみました。

※ 厳密には以前から追加モジュールなどを使えばできましたが・・・

手順

以下の手順でできました。今回作るプロジェクト名は「goserverless」とします。

1. Serverless Frameworkをインストール

Serverless Frameworkをインストールします。今回は作業フォルダ内のローカルにインストールしました。グローバル領域にインストールする場合は、以降の「serverless」コマンドを「./node_modules/.bin/serverless」などではなく「serverless」としてください。

$ npm install serverless

2. プロジェクト作成

プロジェクトを作成します。

$ ./node_modules/.bin/serverless create -u https://github.com/serverless/serverless-golang/-p goserverless

3. ビルド

ビルドを行います。

$ cd goserverless
$ GOOS=linux go build -o bin/main
main.go:4:2: cannot find package "github.com/aws/aws-lambda-go/lambda" in any of:

cannot find package "github.com/aws/aws-lambda-go/lambda"とパッケージが無いとのエラーメッセージが出たので、これをインストールします。

$ go get github.com/aws/aws-lambda-go/lambda

再度ビルドします。

$ GOOS=linux go build -o bin/main

4. デプロイ

デプロイを行います。

$ ../node_modules/.bin/serverless deploy
(中略)
...............
Serverless: Stack update finished...
Service Information
service: goserverless
stage: dev
region: us-east-1
stack: goserverless-dev
api keys:
  None
endpoints:
  None
functions:
  hello: goserverless-dev-hello

結果確認

結果をマネージメントコンソールで確認してみます。まずはLambdaが出来ているかを見てみます。

次にこのLambdaをテストしてみます。

無事実行できたようです。

まとめ

serverless deploy コマンドでデプロイを行うなど、Serverless Frameworkを使ったことがある場合は、それほど違和感なく使えるのではないかと思います。今回はLambda関数だけ試しましたが、API Gatewayを組み合わせることもできるようです。個人的には待望だったAWS LambdaのGolang対応、今後とも色々試してみたいと思います。

参考サイト

Serverless Framework example for Golang and Lambda