LoginSignup
0
0

AWS Lambda Layerとは?の備忘録

Last updated at Posted at 2024-01-17

Lambda Layerとは

Lambda Layerは、AWS Lambda関数が共有のコードやライブラリ、設定などを取り込む仕組みです。具体的には、あらかじめ作成されたコードやライブラリのセットをLambda関数とは独立して管理し、必要な関数にアタッチすることができます。これにより、関数ごとに同じコードやライブラリを再度含める必要がなくなり、コードの再利用性と管理が向上します。

Lambda Layer使用上の制限

デプロイパッケージの最大サイズは50MB(ZIPファイル)
1つのレイヤーの最大サイズは解凍後に250MBに抑える必要あり
5つまで登録可能

Lambda Layerの使い方

Layerの作成:

Lambda Layerを作成し、共有したいコードやライブラリを含むZIPアーカイブをアップロードします。

Layerのバージョン管理:

Layerにバージョンを付けて、関数が特定のバージョンのLayerを利用できるようにします。

関数へのLayerのアタッチ:

各Lambda関数の設定で、関数に使用するLayerを指定します。

関数コード内での利用:

関数のコード内で、Lambda Layerに含まれるコードやライブラリを通常のimportステートメントで利用します。

コード例:

以下は、Lambda Layerを使用してBoto3(AWS SDK for Python)を共有する例です。

Lambda Layerは、複数のLambda関数で同じコードやライブラリを再利用するための仕組みです。以下に、一般的なLambda Layerの使い方とそのコード例を示します。

Lambda Layerの使い方:

Layerの作成:

Lambda Layerを作成し、共有したいコードやライブラリを含むZIPアーカイブをアップロードします。
Layerのバージョン管理:

Layerにバージョンを付けて、関数が特定のバージョンのLayerを利用できるようにします。
関数へのLayerのアタッチ:

各Lambda関数の設定で、関数に使用するLayerを指定します。
関数コード内での利用:

関数のコード内で、Lambda Layerに含まれるコードやライブラリを通常のimportステートメントで利用します。
コード例:

以下は、Lambda Layerを使用してBoto3(AWS SDK for Python)を共有する例です。
このモジュールはBoto3を使用してS3のバケット一覧を取得するコードです。

Layerに含まれるコード:my_layer_code.py

# my_layer_code.py
import boto3

def my_layer_function():
    # Boto3を使用した処理
    s3 = boto3.client('s3')
    response = s3.list_buckets()
    return response

Lambda関数のコード:

# my_lambda_function.py
from my_layer_code import my_layer_function

def lambda_handler(event, context):
    # Lambda Layerに含まれるコードを使用
    result = my_layer_function()
    return {
        'statusCode': 200,
        'body': result
    }

Lambda Layerの作成:

my_layer_codeディレクトリ全体をZIPアーカイブにし、AWS LambdaコンソールでLambda Layerとしてアップロードします。

関数へのLayerのアタッチ:

各Lambda関数の設定画面で、作成したLambda Layerをアタッチします。
これにより、複数のLambda関数が同じBoto3コードを再度含めることなく、Lambda Layerを通じて共有できます。Lambda関数は、共有されたLayerに含まれるコードを通常のimportステートメントで利用することができます。

Lambda Layer使用しないとどうなる?

使用しないと以下のようなコード例になる

# 重複する処理: データの取得前後に共通する処理
def common_processing(data):
    # データ取得前の処理
    print(f"Start processing for {data}...")

    # データ取得後の処理
    print(f"Processing completed for {data}.")

# 関数1: ユーザーのデータを取得する処理
def get_user_data(user_id):
    # 重複してしまう処理
    common_processing("user_data")

    # ユーザーデータを取得する処理
    user_data = {"user_id": user_id, "name": "John Doe"}

    # 重複してしまう処理
    common_processing("user_data")

    return user_data

# 関数2: 商品のデータを取得する処理
def get_product_data(product_id):
    # 重複してしまう処理
    common_processing("product_data")

    # 商品データを取得する処理
    product_data = {"product_id": product_id, "name": "Product XYZ"}

    # 重複してしまう処理
    common_processing("product_data")

    return product_data

Lambda Layerを使うとこのようになる

Lambda関数1 (get_user_data.py):

Lambda関数1では、Lambda Layerに登録されたcommon_moduleをインポートして使用します。

# get_user_data.py
from common_module import common_processing

def get_user_data(user_id):
    # 共通の処理を呼び出す
    common_processing("user_data")

    # ユーザーデータを取得する処理
    user_data = {"user_id": user_id, "name": "John Doe"}

    # 共通の処理を呼び出す
    common_processing("user_data")

    return user_data

Lambda関数2 (get_product_data.py):

Lambda関数2も同様にcommon_moduleをインポートして使用します。

# get_product_data.py
from common_module import common_processing

def get_product_data(product_id):
    # 共通の処理を呼び出す
    common_processing("product_data")

    # 商品データを取得する処理
    product_data = {"product_id": product_id, "name": "Product XYZ"}

    # 共通の処理を呼び出す
    common_processing("product_data")

    return product_data

これにより、common_moduleがLambda Layerに登録され、複数のLambda関数が同じ共通処理を共有できるようになります。Lambda関数はLambda Layerで提供されるリソースを通常のimportステートメントで利用することができます。

0
0
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
0
0