API Gateway + Lambda - golang

2020-07-05

APIGateway + GoでLambdaのサンプルです。

仕様

  • エンドポイント: https://<API ID>.execute-api.ap-northeast-1.amazonaws.com/<stage>/<Resource>
  • HTTPメソッド: GET
  • パラメータ:
{
    "text": "string"
}

Lambdaハンドラ

引数をstructで定義。

package main

import (
	"context"
	"github.com/aws/aws-lambda-go/lambda"
	"github.com/pkg/errors"
)

// Ref: https://docs.aws.amazon.com/lambda/latest/dg/golang-handler.html

// Receive arguments as struct.
type Event struct {
	Text string `json:"text"`
}

func (e *Event) validate() bool {
	valid := true
	if e.Text == "" {
		valid = false
	}
	return valid
}

// Response
type Response struct {
	Message string `json:"message"`
}

// Lambda handler
func HandleRequest(ctx context.Context, event Event) (Response, error) {
	resp := Response{}

	if !event.validate() {
		return resp, errors.Errorf("need text.")
	}

	// Something to do you want here.
	resp.Message = "ok"

	return resp, nil
}

// Main
func main() {
	lambda.Start(HandleRequest)
}

統合リクエスト - マッピングテンプレート

structに設定する値を追加。
ここではtextを設定しています。

#set($allParams = $input.params())
{
    "text": "$input.params('text')",
    "body-json" : $input.json('$'),
...
}

レスポンス

返ってくるレスポンス。

{
    "message": "ok"
}