AWS Cloud9 で API Gateway がらみのテストをする #reinvent

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Trigger API Gateway

今回は AWS Cloud9 で Lambda と API Gateway の結合テストを行う方法を紹介します。
ベースの Cloud9 環境は以下のブログで作成したものとなっていますので、ぜひご一読ください。

AWS Cloud9 で Lambda 関数の作成・実行・デバッグ・デプロイをやってみる #reinvent

API Gateway トリガーの Lambda 関数作成

まずは Lambda 関数を作成します。


1


2


3


途中で表示される Function trigger を設定するダイアログでトリガーの設定を行います。
その他のダイアログはデフォルトのままで OK です。


4


初回デプロイが完了すると、Lambda 関数の他に API Gateway のリソース も自動で作成されます。


5

コードを書く

今回書いたコードは以下です。

'use strict';

var AWS = require('aws-sdk');
var documentClient = new AWS.DynamoDB.DocumentClient();

exports.handler = (event, context, callback) => {
    var body = JSON.parse(event.body);
    var params = {
        TableName: 'StarWars',
        Item: {
            Episode: body.episode,
            Title: body.title
        }
    };

    documentClient.put(params, function(err, data) {
        if (err) {
            callback('error');
        } else {
            const response = { 
                statusCode: 200,
                headers: { "Content-type": "application/json" },
                body: JSON.stringify( { "params": params } )
            };
            callback(null, response);
        }
    });
};

POST メソッドのリクエストで episodetitle というパラメータが渡されることを想定しています。
それらの情報から DynamoDB の StarWars テーブルに新たな項目(エピソード)を追加します。

17

Lambda 関数と API Gateway の結合テスト

API Gateway をトリガーとした Lambda 関数の実行を行います。


6


7


8


Method には POST を指定し、Body には以下の JSON を指定しました。

{
    "episode": "8",
    "title": "The Last Jedi"
}

9


実行すると 200 OK が返ってくることが確認できます。


10


DynamoDB のテーブルにも期待する項目が追加されました。

ハマリポイント

今回のハマリポイントは 2 つ。

  • レスポンスにはキー statusCode を含める必要がある(ローカルのみ?)
    • 含めないと 502 エラーが返ります
  • リモートとローカルではペイロードの取り出し方が異なる
    • リモートでは関数の第一引数 event から直接キーを指定して値を取り出せるが、ローカルでは body というキーに包まれるため 1 階層深くなっている
    • リモートにデプロイする時は修正が必要

ペイロードの取り出しに関しては 公式ドキュメント にも記載があります。
お気をつけください。

To invoke the preceding Node.js code with Lambda, you must remove the line var body = JSON.parse(event.body) as well as substitute body.fruit and body.vegetable with event.fruit and event.vegetable.

リンク

ミレニアム・ファルコン製作日記 #99

99 号 表紙

パーツ

成果

今回の作業は以下の 4 つでした。

  • 船体下部を完成させる
  • 着陸脚を取り付ける
  • エンジン室カバーをディテールアップする
  • 偏向シールド投射装置を取り付ける

船体を裏返してレーザー砲と着陸脚を取り付けました。
これで船体下部は出来上がり!
ファルコンも自分で立てるようになりました。

エンジン室カバーのディテールアップも今回で終了!
とうとうパーツを取り付ける穴がなくなりました。
長かったけど、出来上がった姿を見ると頑張ったかいがありました。
超カッコイイ!

船体上部にもいくつかパーツを取り付けました。
そして気づいたのですが、まだかなりのパーツ取り付け穴が船体上部にあるんですよね。
あと 1 回なんですけどー

それではまた次回。

May the Force be with you!