はじめに
最近、AWS Lambdaがgolangに対応しました。
golangの魅力の1つは実行速度。やはりAPIに利用したいという方は多いのではないでしょうか? これまでもapexを利用することで、Lambda(apex) + API Gateway構成のgolangを使ったREST APIは開発できました。
今回、lambdaがgolangを公式にサポートしたということで、apexを使わずに作ってみました。試しにGETパラメータをオウム返しする仕様です。
1. golang
環境の準備
まだ、goの開発環境が無い方はこのあたりを参照。
http://golang-jp.org/doc/install
必要なライブラリをインストール
$ go get github.com/aws/aws-lambda-go/lambda
lambdaで動かすコードを用意
以下のコードを適当な場所に保存。
package main
import (
"context"
"github.com/aws/aws-lambda-go/lambda"
)
func HandleRequest(ctx context.Context, params interface{}) (interface{}, error) {
// TODO your processing
return params, nil
}
func main() {
lambda.Start(HandleRequest)
}
lambdaにアップロードするzipファイルを用意。
$ GOOS=linux GOARCH=amd64 go build -o apitest api-test.go
$ zip apitest.zip apitest
2. AWS Lambda
1章で作ったgoバイナリをlambdaにアップロードする。
lambda関数の作成
AWS Lambdaのコンソール→関数の作成。
ランタイムにGo 1.xを選択。名前はやロールはお好みで

左の項目からAPI Gatewayを選択。画面下に設定項目が表示される。

API名は、次の章で作るAPI Gatewayの名前を選択。ステージやセキュリティはお好みで。

前の章で作った、apitest.zipをアップロード。ハンドラを先程のハンドラ名apitestと統一(でないと実行時にエラー)
※ 画面右上にある保存を押さないとアップロードファイルが反映されないので注意

テスト
次に、今作っているlambda関数をテストする。
まだ、テストイベントが作成されていないので作る。
画面右上の「テスト」ボタン左側の欄→テストイベントの編集
何でもいいんですが、今回はHello Worldを選択。

3. API Gateway
2章で作ったlambda関数とAPI Gatewayを繋げる。
リソース・メソッドの作成
API Gatewayコンソール→APIの作成
適当なAPI名を選択。

2章で選択したlambda関数を選択。途中まで入力すると自動で候補が表示されるはず。

リクエストの編集
メソッドリクエストに移動し、下図の様にGETパラメータを設定。今回はhogeパラメータを用意。

本文マッピングのテンプレートのContent-TypeはApplication/json。

テンプレートの内容はこんな感じ。
# set($inputRoot = $input.path('$'))
{
"hoge" : "$input.params('hoge')"
}
テスト
APIの機能面はこれで出来上がったので、ちゃんと動作するかテスト。
「メソッドの実行」画面の左上にあるテストを選択。
hogeパラメータの中身を入力してテスト。
するとGETパラメータがそのままAPIのレスポンスとして返ってきている。

デプロイ
終わりに
goでREST APIを作るんだったらEC2上でwebサーバーをたてても良いんですが、やっぱりサーバーレス構成だと保守が楽ですね。






