API Gatewayとは
Amazon API Gateway は、規模の大きさに関係なく、開発者が API を作成、配布、保守、監視、保護できる AWS サービスです。
Amazon Lambda と連係させることで、Lambda Function を HTTP 形式の API にできるところに注目が集まっているとか。
サービス呼び出しを仲介して良い感じにしてくれるやつで、認証やエンドポイント集約をしてくれる。正しいキーがないリクエストは拒絶するっていうことがこのAPI Gatewayで行うことができるみたい。
また、こんなメリットがあるらしい。
ほう。 まあとりあえず今回はlambdaとAPI Gatewayを繋げてjsonを返すことをする。 そのために、まずはLambda関数を作る。
lambda関数を作成する
Go言語でjsonを返却するコードを書きます。
package main import ( "fmt" "github.com/aws/aws-lambda-go/lambda" ) type MyEvent struct { Name string `json:"What is your name?"` } type MyResponse struct { Message string `json:"Answer:"` } func hello(event MyEvent) (MyResponse, error) { return MyResponse{Message: fmt.Sprintf("Hello %s!!", event.Name)}, nil } func main() { lambda.Start(hello) }
参考 : AWS Lambda で Go が使えるようになったので試してみた | Developers.IO
上記の記述を書いたmain.goをbuildしてzipにする。
$ env GOOS=linux GOARCH=amd64 go build -o hello $ zip hello.zip hello
出来上がったzipをあげる。
アップロードをして「保存」したら、テストを設定します。
「作成」ボタンを押したら実行して確認。
良い感じ。 トリガーとして、API Gatewayを設定します。
API Gatewayを使ってみる
「新しいAPI」を選択。
エンドポイントタイプって何だ・・・
Amazon API Gateway で、REST API およびカスタムドメインの作成時に 2 種類の API エンドポイントから選択できるようになりました。リージョンの API エンドポイントは、REST API をデプロイするのと同じ AWS リージョンからアクセスできる新しいタイプのエンドポイントです。これにより、API リクエストが REST API と同じリージョンから発信される場合に、リクエストのレイテンシーを減らすことができます。さらに、独自の Amazon CloudFront ディストリビューションとリージョンの API エンドポイントの関連付けを選択できるようになりました。API エンドポイントの 2 つ目のタイプは、エッジ最適化 API です。エッジ最適化 API は、API ゲートウェイによって作成および管理される CloudFront ディストリビューション経由でアクセスするエンドポイントです。以前は、エッジ最適化 API は、API ゲートウェイを使用して API を作成する際のデフォルトオプションでした。
ぶっちゃけ何言ってるかわからないけど、以前のデフォルトオプションだったらしい。とりあえずこれを選択しておく。 地域っていうのを設定した場合、同じ地域からリクエストが来る場合、そのレイテンシーを減らすことができるらしい。
入力したら「APIの作成」をクリック。
リソースの作成をクリック。
メソッドの作成をクリック。httpメソッドを選択する。
とりあえず、今回はgetで試す。 Lambda リージョンはLambdaを作った画面で確認できる。
Lambda関数は左側に書いてあるやつ。これでいうと「return_json」。
そしたらAPIのデプロイをする。
適当に名前をつけてデプロイ!
URLが表示されるので、そのURLに/hello
をつけて実行すれば、期待する結果が返ってきたーーーー。
URLがわからなくなった場合は、ステージから見ることが可能。
まとめ
割と公式のドキュメントが使えるからみて見ると良いと思います。