+++ title = "HitCounter の使用" weight = 400 +++ ## スタックに HitCounter を追加する HitCounter の準備ができたのでアプリに実装していきましょう。 `~/CdkWorkshopStack.java` を開き、次のハイライトされたコードを追加します。 {{}} package com.myorg; import software.constructs.Construct; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.amazon.awscdk.services.apigateway.LambdaRestApi; import software.amazon.awscdk.services.lambda.Code; import software.amazon.awscdk.services.lambda.Function; import software.amazon.awscdk.services.lambda.Runtime; public class CdkWorkshopStack extends Stack { public CdkWorkshopStack(final Construct parent, final String id) { this(parent, id, null); } public CdkWorkshopStack(final Construct parent, final String id, final StackProps props) { super(parent, id, props); // Defines a new lambda resource final Function hello = Function.Builder.create(this, "HelloHandler") .runtime(Runtime.NODEJS_14_X) // execution environment .code(Code.fromAsset("lambda")) // code loaded from the "lambda" directory .handler("hello.handler") // file is "hello", function is "handler" .build(); // Defines our hitcounter resource final HitCounter helloWithCounter = new HitCounter(this, "HelloHitCounter", HitCounterProps.builder() .downstream(hello) .build()); // Defines an API Gateway REST API resource backed by our "hello" function LambdaRestApi.Builder.create(this, "Endpoint") .handler(helloWithCounter.getHandler()) .build(); } } {{}} API Gateway のハンドラーを `hello` から `helloWithCounter.getHandler()` に変更しています。エンドポイントがアクセスされるたびに、API Gateway が HitCounter ハンドラーにリクエストをルーティングし、そのリクエストが記録され、`hello` Lambda 関数に引き渡します。レスポンスはユーザーに返されるまで逆順でリレーされます。 ## Deploy ``` mvn package 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"} ``` 原因を調べて、修正してみましょう。