AWSのAPI GatewayとLambdaを軽く触ってみたお話
タイトルの通り。
先日のLT大会でサーバーレスの話を聞いて、ちょっとやってみようかなーと思ったわけで。 Lambdaの話は聞いたことあったけど、API Gatewayと組み合わせることでお手軽にRest APIができる!という話を知って、じゃあやってみようという感じですね。 今考えているサービスに組み込めば、ランニングコストの大幅な削減にもなるしね。 あと、何より面白そうだったのが決め手(・∀・)
【用意するもの】 AWSのアカウント(無料枠でおk)
【手順】 1.IAMロールを作る。 この時、LambdaのフルアクセスとAPI GATEWAYのフルアクセスをつけておく。
2.Lambda関数の作成。
とりあえずLambdaが実行されて、疎通の確認ができればいいので内容は簡単に。 [Create a Lambda function]から、新しいFunctionを作成。 内容はシンプルにこんな感じ。
console.log("Loading Event") exports.handler = (event, context, callback) => { // TODO implement context.done(null, "Hello! This is Lambda Function"); };
そして、Lambdaの設定とかは↓
さっき作成したRoleを設定して、あとはMemoryのサイズとかは適当に。 とりあえずテストなので最小サイズでいいかなと。 これでLambdaの作成はOK
API Gatewayにアクセスして、[APIの作成]から新しく作ります。 名前と説明を適当に入力して、まずはリソースを作っていきます。
[アクション]-[リソースの作成]から、今回は「call」という名前で作成。 その後、GETメソッドを追加して、メソッドの内容を↓のように設定。
この時、リージョンは呼び出すLambda関数のやつと一緒にしないとダメみたい。 保存したら、こんな感じの画面になるかな。
あとは、ステージを作るとAPIのアクセスURLが表示される。 そこにアクセスして、"Hello! This is Lambda Function"が表示されればOK! (ちゃんとhttp://XXXX/call/にアクセスすること)
とりあえず、これでAPI GatewayとLambdaの組み合わせは動かせたっぽい。 あとはS3にファイルを置いて読み込ませるなり、DynamoDBと組み合わせたり、諸々の使い方ができますな。
こっからメモ Lambdaはリクエスト数と実行時間で料金が発生するよ。 API Gatewayはデータ送出で料金が発生するよ。