はじめに
AWS CDKについて初心者用にまとめた記事はこちら
概要
最近AWSCDKを使用してpythonベースのlambdaを書いたのですが、pandasやらboto3やら使用する必要がありました。
もちろん素のpythonには入っていないライブラリなのでlambdaにパッケージごと入れる必要があるのですが、いちいちzipで固めて入れるのはめんどくさい。。。
AWSCDKをpythonで書き進めている記事もネットには少なくどうしたものかと思っていたのですが、色々調べていくうちに先人の知恵を借りられそうだったのでメモしておきます。
手順
cdk languageはpythonを選択しています。
① lambdaの作成
手始めにlambdaを作成します。
from aws_cdk import(
aws_lambda as _lambda
Stack
)
class HogeStack(Stack):
(省略)
my_func = _lambda.Function(
self, "MyFunction",
function_name = "my_function",
runtime = _lambda.Runtime.PYTHON_3_8,
code = _lambda.Code.from_asset('lambda/test_asset')
handler = 'test_asset.handler'
)
② 先人のArn情報を確認する
今回はlambdaにpandasを入れてみたいと思います。
お世話になる先人の情報はここ。
こちらでlayerに使用できるArn情報を公開してくれています。
lambdaでバックグラウンド的にライブラリを必要とする場合にlambdalayerと呼ばれるものを使用します。
先に述べた通り、ライブラリをzipで固めてlayerにすることは可能ですが、今回は既に公開されている先人のものをお借りしようと言うわけです。
上記のページにアクセスすると以下表示となります。
今回は無難にTokyo regionで作成しようと思いますので、該当のjsonをクリック。
jsonの中から「pandas」の情報を探します。
発見しました。
後で使用するので、Arn情報をコピーしておきます。
③ layerを追加する
①で作成したlambdaに②で確認したlayerを追加します。
class HogeStack(Stack):
(省略)
my_func.add_layers(
_lambda.LayerVersion.from_layer_version_arn(
self, 'pandas',
'arn:aws:lambda:ap-northeast-1:770693421928:layer:Klayers-p38-pandas:8'
)
)
layerの追加は、定義したlambdaにadd_layerメソッドで行うことができます。
またこの時、layerとしてarn情報を与えたいときは、from_layer_version_arnでオブジェクト化したものを与えてあげることが必要です。
ここで重要なのは、my_funcに直接from_layer_version_arnを指定できないことですかね。
一度Arnをオブジェクト化(?)してあげる必要があるようです。
公式は以下参照。
④ deployする
最後にdeployしてあげれば、無事lambdaにlayerをつけられます。
$ cdk deploy
まとめ
自分で一から環境を作成するより断然早い!(はず!)
あくまで自己責任だとは思いますが、とりあえず動作を確認したい時などサクッとできるので便利です。