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

2017.12.15

この記事は公開されてから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!