/ #lambda-powertools #CDK 

【Lambda Powertools】パブリックレイヤーが実装されたのでCDKで動かしてみた!

もくじ

Lambda PowertoolsがパブリックLambdaレイヤーに対応したらしいですー🎉

Releaseノートはこの辺

これによりかなり気楽にLambda Powertoolsが使えるようになりますねー!わーい!

ということでサクッとCDKで実装してみます。

レッツゴー♪

プロジェクト用意

下記のコマンドでプロジェクトの雛形を作ります。

$ mkdir cdk-lambda-powertools-public-layer && cd $_

次に依存関係を書きます

#...略
setuptools.setup(
	#...略
    install_requires=["aws-cdk.core==1.128.0", "aws-cdk.aws-lambda==1.128.0", "aws-cdk.aws_lambda_python==1.128.0",],
    extras_require={"dev": ["aws-lambda-powertools"]}
	#...略
#...略

余談ですが、

Lambdaで固有のrequirements.txtを使わないので、aws_lambda_pythonを使う必要もないのです。 

が、、まぁ気分で入れておきます(笑)

aws_lambda_pythonを外してもデプロイ時間が多少短くなる程度なので)

下記のコマンドでインストールします

$ pip install -e ".[dev]"

スタックを実装します

特に説明することもないですが、公式ドキュメントにあるARNからLambdaLayerを作ってLambdaにアタッチします!

from aws_cdk import core as cdk, aws_lambda, aws_lambda_python
import os


class CdkLambdaPowertoolsPublicLayerStack(cdk.Stack):
    def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        powertools_layer = aws_lambda.LayerVersion.from_layer_version_arn(
            self,
            "lambda-powertools-layer",
            f"arn:aws:lambda:{os.getenv('CDK_DEFAULT_REGION')}:017000801446:layer:AWSLambdaPowertoolsPython:3",
        )

        aws_lambda_python.PythonFunction(
            self, f"HogeLambda", entry="src", runtime=aws_lambda.Runtime.PYTHON_3_9, layers=[powertools_layer],
        )

Lambdaのコード

無理やりCDKを使います(笑)

from aws_lambda_powertools import Logger
from aws_lambda_powertools.utilities.typing import LambdaContext

logger = Logger(service="payment")


@logger.inject_lambda_context
def handler(event, context: LambdaContext):
    logger.info("Hello!!")
    return "hogehoge"

デプロイ!!

下記のコマンドでデプロイします!

$ cdk deploy

動作確認

関数名を取得する

$ FUNCTION_NAME=$(aws lambda list-functions --output table --query 'Functions[?contains(FunctionName,`HogeLambda`)].[FunctionName]' --output text)

ログを出しておく(aws-cli v2 以上の人限定)

$ aws logs tail --follow /aws/lambda/$FUNCTION_NAME

実行!

$ aws lambda invoke --function-name $FUNCTION_NAME --payload '{}' response.json
{
    "StatusCode": 200,
    "ExecutedVersion": "$LATEST"
}
$ cat response.json
"hogehoge"

ログを出していた場合は、下記のようなPowertoolsのログがでます!

略... START RequestId: 7c6f11b9-a747-4863-a377-0bbc3ea1e723 Version: $LATEST
略... {"level":"INFO","location":"handler:9","message":"Hello!!","timestamp":"略","service":"payment","cold_start":true,"function_name":"略","function_memory_size":"128","function_arn":"略","function_request_id":"7c6f11b9-a747-4863-a377-0bbc3ea1e723","xray_trace_id":"略"}
略... END RequestId: 7c6f11b9-a747-4863-a377-0bbc3ea1e723
略... REPORT RequestId: 7c6f11b9-a747-4863-a377-0bbc3ea1e723  Duration: 1.61 ms       Billed Duration: 2 ms Memory Size: 128 MB     Max Memory Used: 40 MB  Init Duration: 165.84 ms

きちんとうごいてますねーいい感じですー!

では以上ー!

後片付け!

$ cdk destroy

今回のリポジトリはこちら

https://github.com/sisi100/cdk-lambda-powertools-public-layer

Author

Sisii

インフラが好きなエンジニアぶってるなにか