はじめに
最近、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サーバーをたてても良いんですが、やっぱりサーバーレス構成だと保守が楽ですね。