日々ろぐ

人に優しく٩( 'ω' )و

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の設定とかは↓

161127-0003

さっき作成したRoleを設定して、あとはMemoryのサイズとかは適当に。 とりあえずテストなので最小サイズでいいかなと。 これでLambdaの作成はOK

3.API Gatewayの作成

API Gatewayにアクセスして、[APIの作成]から新しく作ります。 名前と説明を適当に入力して、まずはリソースを作っていきます。

161127-0006-1

[アクション]-[リソースの作成]から、今回は「call」という名前で作成。 その後、GETメソッドを追加して、メソッドの内容を↓のように設定。

161127-0007-1

この時、リージョンは呼び出すLambda関数のやつと一緒にしないとダメみたい。 保存したら、こんな感じの画面になるかな。

161127-0008

あとは、ステージを作るとAPIのアクセスURLが表示される。 そこにアクセスして、"Hello! This is Lambda Function"が表示されればOK! (ちゃんとhttp://XXXX/call/にアクセスすること)

とりあえず、これでAPI GatewayとLambdaの組み合わせは動かせたっぽい。 あとはS3にファイルを置いて読み込ませるなり、DynamoDBと組み合わせたり、諸々の使い方ができますな。

こっからメモ Lambdaはリクエスト数と実行時間で料金が発生するよ。 API Gatewayはデータ送出で料金が発生するよ。