HitCounterの使用

スタックにHitCounterを追加する

さて、HitCounterの準備ができました。アプリで使用しましょう。lib/cdk-workshop-stack.ts を開き、次の強調表示されたコードを追加します。

import cdk = require('@aws-cdk/core');
import lambda = require('@aws-cdk/aws-lambda');
import apigw = require('@aws-cdk/aws-apigateway');
import { HitCounter } from './hitcounter';

export class CdkWorkshopStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const hello = new lambda.Function(this, 'HelloHandler', {
      runtime: lambda.Runtime.NODEJS_8_10,
      code: lambda.Code.asset('lambda'),
      handler: 'hello.handler'
    });

    const helloWithCounter = new HitCounter(this, 'HelloHitCounter', {
      downstream: hello
    });

    // defines an API Gateway REST API resource backed by our "hello" function.
    new apigw.LambdaRestApi(this, 'Endpoint', {
      handler: helloWithCounter.handler
    });
  }
}

API GatewayのハンドラーをhelloからhelloWithCounter.handlerに変更したことに注意してください。これは、エンドポイントが実行されるたびに、API GatewayがHitCounterハンドラーにリクエストをルーティングし、HitCounteハンドラーが実行されてログに記録し、hello関数に中継することを意味します。レスポンスはユーザーに返されるまで逆順でリレーされます。

デプロイ

cdk deploy

出力は次のとおりです。

CdkWorkshopStack.Endpoint8024A810 = https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/prod/

テスト

さて、試してみる準備はができたので実行してみましょう。 (再び、「deploy」コマンドの出力でAPIのURLを確認する必要があります)。

curl コマンドを実行するか、ブラウザにエンドポイントのURLを入力してみてください。 (-i オプションをつけて実行すると、HTTPレスポンスのフィールドにステータコードが表示されます。)

curl -i https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/prod/

実行すると、何かがうまくいってないことが分かるはずです。

HTTP/1.1 502 Bad Gateway
...

{"message": "Internal server error"}

何が起こったのかを見つけて修正する方法を見てみましょう。