【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