1
1

More than 1 year has passed since last update.

AWS CDK初心者が爆速でLambda Layerにpythonライブラリを入れた裏技

Posted at

はじめに

AWS CDKについて初心者用にまとめた記事はこちら

概要

最近AWSCDKを使用してpythonベースのlambdaを書いたのですが、pandasやらboto3やら使用する必要がありました。

もちろん素のpythonには入っていないライブラリなのでlambdaにパッケージごと入れる必要があるのですが、いちいちzipで固めて入れるのはめんどくさい。。。

AWSCDKをpythonで書き進めている記事もネットには少なくどうしたものかと思っていたのですが、色々調べていくうちに先人の知恵を借りられそうだったのでメモしておきます。

手順

cdk languageはpythonを選択しています。

① lambdaの作成

手始めにlambdaを作成します。

stack.py
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にすることは可能ですが、今回は既に公開されている先人のものをお借りしようと言うわけです。

上記のページにアクセスすると以下表示となります。

スクリーンショット 2022-10-29 21.58.14.png

今回は無難にTokyo regionで作成しようと思いますので、該当のjsonをクリック。
jsonの中から「pandas」の情報を探します。

スクリーンショット 2022-10-29 21.59.37.png

発見しました。
後で使用するので、Arn情報をコピーしておきます。

③ layerを追加する

①で作成したlambdaに②で確認したlayerを追加します。

stack.py
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

まとめ

自分で一から環境を作成するより断然早い!(はず!)
あくまで自己責任だとは思いますが、とりあえず動作を確認したい時などサクッとできるので便利です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1