Serverless Framework (go) で API をデプロイするまで
ゴール
Serverless Framework (go) のプロジェクトを作って API Gateway 経由でレスポンスが得られるところまでです。
Lambda をデプロイするまでは情報があったのですが、API Gateway まで繋げるところの解説がすぐに見つからなかったのでここに書いておきます。
go のインストール
これは必要に応じて実施する感じですね。 私は Mac を使用しているので brew で anyenv インストールからの goenv で 1.13.5 をインストールしました。
Serverless Framework のインストール、プロジェクトテンプレートの作成
Serverless Framework(Go) でHello worldしてみる - Qiita
上記のページを参考にさせていただきました。 プロジェクト内に Serverless Framework を入れておきたかったので以下を実行しておきました。
nom init npm install --save-dev serverless
nom build
でビルドと npm run sls
が実行できるように package.json
を編集しておきます。
"scripts": { "build": "GOOS=linux go build -o bin/main", "sls": "./node_modules/.bin/sls" }
main.go の編集
API Gateway の Lambda proxy integration に対応するために適当に書き換えます。
package main import ( "encoding/json" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" ) func Handler() (events.APIGatewayProxyResponse, error) { body := map[string]interface{}{ "Message": "Go Serverless v1.0! Your function executed successfully!", } s, _ := json.Marshal(body) return events.APIGatewayProxyResponse{Body: string(s), StatusCode: 200}, nil } func main() { lambda.Start(Handler) }
必要なパッケージのインストール
go get \ github.com/aws/aws-lambda-go/events \ github.com/aws/aws-lambda-go/lambda
ビルド
以下のコマンドで bin/main
を作ります。
npm run build
serverless.yml の編集
Lambda と API Gateway をデプロイするために適当に書き換えます。
service: hello-go-lambda provider: name: aws runtime: go1.x stage: dev region: ap-northeast-1 package: exclude: - ./** include: - ./bin/** functions: hello: handler: bin/main events: - http: path: hello method: get
デプロイ
以下のコマンドで Lambda と API Gateway をデプロイします。
npm run sls deploy
動作確認
API Gateway の Management Console のテスト機能から動作確認してみます。
{ "Message": "Go Serverless v1.0! Your function executed successfully!" }
レスポンスを得られることが確認できました。
作成したプロジェクト
ここに置いておきます。