【速報】AWS Cloud9を使ってLambdaのテストをしてみた #reinvent

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

本日リリースされたAWS Cloud9では、IDEからLambdaのテストやデプロイなどの操作が行えます。

【速報】AWS Cloud9がリリースされました! #reinvent

本記事では、IDEからLambdaの

  • リソースの確認
  • 新規作成
  • ローカル実行
  • デプロイ
  • リモート実行
  • 既存Functionのインポート
  • API Gatewayと統合されたFunctionを作成

を、試してみました。

やってみた

リソースの確認

画面右側のAWS Resourcesから、ローカルに開発中、リモートにデプロイ済みのLambda Functionの一覧が確認できます。

新規作成

λ+ボタンから新規でFunctionを作成できます。

実行環境とテンプレートを選びます。とりあえずempty-nodejsを選択しました。

トリガーにAPI Gatewayを指定するかどうかを選びます。とりあえずNoneとしました。

Functionが新規で作成されました。

ローカル実行

index.jsにログ出力用のコードだけ指定して、ローカルで実行してみます。

Runをクリックすると実行用のビューが表示されます。 実行環境をLambda(local)に指定します。

ペイロードも指定できるので、適当な値を設定しました。

Runボタンで実行します。 ログとレスポンスが確認できます。

デプロイ

作成したFunctionをデプロイしてみます。

AWS Resourcesビューからデプロイ対象のFunctionを選択し、↑をクリックするとデプロイが開始します。

デプロイが完了し、デプロイ済みのFunction一覧に表示されました。

リモート実行

実行用のビューの実行環境をLambda(remote)に指定し、再度実行します。

ローカル同様ログとレスポンスが確認できます。

既存Functionのインポート

デプロイ済みのchatwork-token-validateをインポートしてみます。

右クリック→Importでインポートできます。

デプロイ済みのFunctionをインポートできました。

API Gatewayと統合されたFunctionを作成

Function作成時にTrigerにAPI Gatewayを指定します。

Functionがひもづくパスを指定し、関数を作成します。

FunctionをAPI Gatewayがレスポンスを受け取れる形に編集しました。

exports.handler = (event, context, callback) => {
    console.log('Received event:', JSON.stringify(event, null, 2));

    var response = {
        statusCode: 200,
        headers: {
            "x-custom-header" : "my custom header value"
        },
        body: "success"
    };

    callback(null, response);
};

実行環境をAPI Gateway(local)に指定します。 HTTP methodやQuery parameter、Request bodyを指定できます。

実行できました。

まとめ

Lambdaのローカル実行は様々な方法で可能ですが、開発時のテストで実行したい場合にIDEで完結するのは便利だと思います。

また、API Gateway経由でのテストは今まで実際にデプロイしてcurlでAPIを叩いて・・・となかなか面倒なことをしていたのですが、リクエストの値を指定して実行できるためテストが非常に簡単に行えました。

私からは以上です。