HitCounterの使用

スタックにHitCounterを追加する

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

from aws_cdk import (
    core,
    aws_lambda as _lambda,
    aws_apigateway as apigw,
)

from hitcounter import HitCounter


class MyStack(core.Stack):

    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        # Defines an AWS Lambda resource
        hello = _lambda.Function(
            self, 'HelloHandler',
            runtime=_lambda.Runtime.PYTHON_3_7,
            code=_lambda.Code.asset('lambda'),
            handler='hello.handler',
        )

        hello_with_counter = HitCounter(
            self, 'HelloHitCounter',
            downstream=hello,
        )

        apigw.LambdaRestApi(
            self, 'Endpoint',
            handler=hello_with_counter.handler,
        )

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

デプロイ

cdk deploy hello-cdk-1

出力は次のとおりです。

hello-cdk-1.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"}

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