仕事でWEB APIを作成する必要が出てきたので、個人的メモとして記載。
プログラム言語は、自由に選べるので、Goを選択。
#Lambda用の関数を作成する
以下のような関数を作成。
jsonで、値を2つ受け取ると加算して返す関数。
package main
import (
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)
type GetData struct {
Value1 int `json:"Value1"`
Value2 int `json:"Value2"`
}
type ReturnData struct {
Answer string `json:"Answer"`
}
func HandleLambdaEvent(event GetData) (ReturnData, error) {
return ReturnData{Answer: fmt.Sprintf("%d + %d = %d", event.Value1, event.Value2, event.Value1+event.Value2)}, nil
}
func main() {
lambda.Start(HandleLambdaEvent)
}
AWSで実行するため、linux用にコンパイルする。
GOOS=linux GOARCH=amd64 go build -o sampleAdd sampleAdd.go
AWSにアップロードする時に、zipにする必要があるので、zipにする
zip sampleAdd.zip ./sampleAdd
#Lambdaの作成
「一から作成」を選択します。
任意の関数名を入力し、ランタイムに「Go 1.x」を選択します。
アクセス権限は、デフォルト状態のままです。(権限について、後々学習する予定)
この状態で、「関数の作成」ボタンをクリック。
「ハンドラ」の名称を、コンパイルで指定した名称にします。
「関数パッケージ」に上で作成したzipファイルを指定して、画面の右上にある「ボタン」をクリックします。
以下のように「インラインコード編集できない」と出ますが問題ありません。
Go以外だと、インラインでコードの編集ができるようです。
#テストイベントの設定
テストイベントの設定を選択します。
以下のようにテスト内容を記述し、「作成」ボタンをクリックします。
テストを実施すると、想定通りの出力を確認できます。
#API Gatewayの作成
以下の状態で、「APIの作成」ボタンをクリックします。
「メソッドの作成」をクリックします。
##Get(クエリ文字列)の作成
「GET」を選択します。
「Lambda関数」にsampleAddを指定します。
###メソッドリクエストの編集
「メソッドリクエスト」を選択します。
「リクエストの検証」を「クエリ文字列パラメータおよびヘッダーの検証」に変更します。
「URLクエリ文字列パラメータ」に「Value1」「Value2」を追加します。
###統合リクエストの編集
「統合リクエスト」を選択します。
「マッピングテンプレート」で、「テンプレートが定義されていない場合(推奨)」を選択し、
「application/json」を追加します。
"Lambdaで受け取る値": "$input.params('URLパラメータ')"
で値が取得できます。
追加内容は、以下の内容です。
{
"Value1": $input.params('Value1'),
"Value2": $input.params('Value2')
}
以下のような画面の状態で保存します。
##API Gateway のテスト
「テスト」をクリックします。
クエリ文字列を記述し、「テスト」ボタンをクリックします。
予想通りの「レスポンス本文」が返ってきます。
##デプロイ
「APIのデプロイ」を選択します。
任意の「ステージ名」を入力し「デプロイ」ボタンをクリックします。
URLが指定されるので、URLパラメータを追加して、実行します。
期待される値が表示されます。