+++ title = "HitCounter の使用" weight = 400 +++ ## スタックに HitCounter を追加する HitCounter の準備ができたのでアプリに実装していきましょう。`cdk_workshop_stack.py` を開き、次のハイライトされたコードを追加します。 {{}} from constructs import Construct from aws_cdk import ( Stack, aws_lambda as _lambda, aws_apigateway as apigw, ) from .hitcounter import HitCounter class CdkWorkshopStack(Stack): def __init__(self, scope: Construct, id: str, **kwargs) -> None: super().__init__(scope, id, **kwargs) # Defines an AWS Lambda resource my_lambda = _lambda.Function( self, 'HelloHandler', runtime=_lambda.Runtime.PYTHON_3_7, code=_lambda.Code.from_asset('lambda'), handler='hello.handler', ) hello_with_counter = HitCounter( self, 'HelloHitCounter', downstream=my_lambda, ) apigw.LambdaRestApi( self, 'Endpoint', handler=hello_with_counter._handler, ) {{}} API Gateway のハンドラーを `my_lambda` から `hello_with_counter._handler` に変更しています。エンドポイントがアクセスされるたびに、API Gateway が HitCounter ハンドラーにリクエストをルーティングし、そのリクエストが記録され、`my_lambda` Lambda 関数に引き渡します。レスポンスはユーザーに返されるまで逆順でリレーされます。 ## デプロイ ``` cdk deploy ``` デプロイには少し時間がかかります。 出力は次のとおりです。 ```text cdkworkshop.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/ ``` 実行すると、何かがうまくいってないことに気づきます。 ```text HTTP/1.1 502 Bad Gateway ... {"message": "Internal server error"} ``` 原因を調べて、修正してみましょう。