(AWS CDK)LambdaのLayerでコードを再利用する
0. この投稿の概要
- AWS Lambdaの異なるFunction間でコードを再利用をするための仕組みであるLayerをAWS CDKでdeployします。
- 元となるLambda Functionは以前の投稿で実装した図書館アラートシステムです。aburaku.hatenablog.com
1. Layerとは?
2. CDKによるdeploy
- コードはgithubに上げています。
layer = _lambda.LayerVersion( self, "Packages", code=_lambda.Code.from_asset(LAYER_PATH), description="requests module", ) library_alert_lambda = _lambda.Function( self, "LibraryAlert", code=_lambda.Code.from_asset(API_PATH), handler="library_alert.lambda_handler", memory_size=512, timeout=core.Duration.seconds(120), role=lambda_role, layers=[layer], # <- 追加 **common_params, )
- CDKのLayerVesionの必須引数はcodeだけです。
pip install requests -t ./packages/python
のようにtargetオプションをつけてパッケージを指定した場所にインストールをして、その場所をcodeに指定します。 - この際気をつけるのはpythonというフォルダの下に配置することです。こうしておくとパスが通るのでLambda側で特にパスを追加しなくてもimportが可能になります。
参考:Lambda レイヤーの作成と共有 - AWS Lambda
- Function側の変更はlayers引数に追加したいlayerをリストで渡してやるだけです。
3. 結果
- 動作自体は元のコードと変化はしませんが、GUIでLayerを追加したFunctionを見に行くと、確かに追加されていることが確認できます。