HitCounterハンドラー

Hit counter Lambda handler

さて、ヒットカウンターのLambdaハンドラーコードを記述しましょう。最初に、AWS DynamoDBモジュールをインストールする必要があります。

pip install aws-cdk.aws_dynamodb

lambda/hitcount.pyのファイルを作成し、次のコードを追記してください。

import json
import os

import boto3

ddb = boto3.resource('dynamodb')
table = ddb.Table(os.environ['HITS_TABLE_NAME'])
_lambda = boto3.client('lambda')


def handler(event, context):
    print('request: {}'.format(json.dumps(event)))
    table.update_item(
        Key={'path': event['path']},
        UpdateExpression='ADD hits :incr',
        ExpressionAttributeValues={':incr': 1}
    )

    resp = _lambda.invoke(
        FunctionName=os.environ['DOWNSTREAM_FUNCTION_NAME'],
        Payload=json.dumps(event),
    )

    body = resp['Payload'].read()

    print('downstream response: {}'.format(body))
    return json.loads(body)

実行時のリソースの発見

このコードは、次の2つの環境変数に依存していることがわかります。

  • HITS_TABLE_NAME ストレージを使用するDynamoDBテーブルの名前
  • DOWNSTREAM_FUNCTION_NAME AWS Lambda 関数のダウンストリーム

テーブルとダウンストリーム関数の実際の名前はアプリをデプロイするときにのみ決定されるため、これらの値をコンストラクトコードから関連付ける必要があります。次のセクションでそれを行います。