AWS

Lambda Layerを利用して、処理のスマート化をしてみよう

NEW 2026年8月27日

目次Category


はじめに

今回の記事では、AWS LambdaのLambda Layerを実際に作成し、Lambda関数からLayer内の共通処理を利用する方法について説明します。

Lambda Layerを利用すると、Lambda関数本体とは別にライブラリや共通処理を管理できます。複数のLambda関数で同じ処理を利用する場合に、同じコードを各関数へ配置せず共通化できます。

今回実施する作業
  1. Lambda関数を作成する
  2. Layer内の共通処理をimportするコードを記述する
  3. Layerがない状態でテストし、ImportModuleErrorを確認する
  4. Layer用の共通処理を作成する
  5. Layer用ファイルをZIP化する
  6. Lambda Layerを作成する
  7. Lambda関数へLayerを追加する
  8. 再度テストして正常実行を確認する
  9. 作成したリソースを削除する

この記事では最初にLambda Layerの仕組みを説明し、その後に実際の操作手順を進めます。

今回の構成
Lambda関数
 ojt-lambda-layer-[name]-01
        │
        │ import
        ↓
Lambda Layer
 ojt-common-layer-[name]-01
        │
        └── python/
              └── common_utils.py
                    └── create_message()

Lambda関数本体には common_utils.py を配置せず、Layer側に配置した共通処理をimportして利用します。

0. Lambda Layerについて

Lambda Layerとは

Lambda Layerは、Lambda関数から利用するライブラリや共通処理を、関数本体とは別に管理できる仕組みです。

複数のLambdaで同じ処理を使用する場合、それぞれのLambdaに同じコードを配置すると重複が発生します。

Layerを使用しない場合

Lambda A
├── lambda_function.py
└── common_utils.py

Lambda B
├── lambda_function.py
└── common_utils.py

Layerを使用する場合

   Lambda Layer
 common_utils.py
    ↑      ↑
    │      │
Lambda A  Lambda B

共通処理をLayerへ分離することで、複数のLambdaから再利用できます。

主な利用例
  • 共通処理
  • ログ出力処理
  • 日付変換処理
  • 入力チェック処理
  • 外部ライブラリ

1. Lambda関数を作成する

この章で行うこと

まずはLayerを利用する側となるLambda関数を作成します。この時点ではLayerはまだ作成しません。

1-1. Lambda関数を作成する

1-1. Lambda関数を作成する

1. AWSマネジメントコンソールで「Lambda」を検索し、AWS Lambdaを開きます。

2. 「関数の作成」をクリックします。

3. 「一から作成」を選択し、以下を設定します。

関数名:
ojt-lambda-layer-[name]-01

ランタイム:
Python 3.13

アーキテクチャ:
x86_64

その他:
デフォルト

4. 「関数の作成」をクリックします。

[name]について
[name] の部分は、自分の識別名へ置き換えてください。

2. Layerを使用するLambdaコードを作成する

ここであえてエラーになるコードを作成する理由

今回はLambda本体から common_utils という別ファイルを読み込むコードを記述します。

ただし、この時点では common_utils.py はまだ存在しません。そのため、最初のテストではエラーになります。

2-1. lambda_function.pyを変更する

2-1. lambda_function.pyを変更する

作成したLambda関数の「コード」タブを開き、lambda_function.py を以下に変更します。

from common_utils import create_message

def lambda_handler(event, context):
    name = event.get("name", "AWS")
    message = create_message(name)

    return {
        "statusCode": 200,
        "message": message
    }

コードを変更したら「Deploy」をクリックします。

2-2. Layerなしでテストする

2-2. Layerなしでテストする

1. 「Test」をクリックします。

2. テストイベントを作成します。

イベント名:
layer-test

イベントJSONは次の内容にします。

{
  "name": "自身の名前"
}

3. テストを実行します。

この時点では common_utils.py が存在しないため、次のようなエラーになることを確認します。

Runtime.ImportModuleError:
Unable to import module 'lambda_function':
No module named 'common_utils'
Lambda
↓
common_utilsをimport
↓
common_utils.pyが存在しない
↓
エラー

3. Lambda Layer用のファイルを作成する

Python用Layerのフォルダ構成

Python用のLambda Layerでは、ZIPファイルの直下に python フォルダを配置します。今回は、その中に common_utils.py を配置します。

lambda-layer
├── python
│   └── common_utils.py
└── common-utils-layer.zip

3-1. フォルダを作成する

3-1. フォルダを作成する

1. PC上に lambda-layer フォルダを作成します。

2. その中に python フォルダを作成します。

3-2. common_utils.pyを作成する

3-2. common_utils.pyを作成する

python フォルダ内に common_utils.py を作成し、次のコードを記述します。

def create_message(name):
    return f"Hello, {name}! This message came from Lambda Layer."

3-3. ZIPファイルを作成する

3-3. ZIPファイルを作成する

Lambda Layerへアップロードするため、python フォルダをZIPファイルにします。

ZIPファイルの構成に注意
ZIPファイルを開いたとき、python フォルダがZIPの直下に存在する必要があります。
common-utils-layer.zip
└── python
    └── common_utils.py

PowerShellで lambda-layer フォルダを開き、次のコマンドを実行します。

Compress-Archive -Path .\python -DestinationPath .\common-utils-layer.zip

4. Lambda Layerを作成する

この章で行うこと

作成した common-utils-layer.zip をAWS Lambdaへアップロードし、Lambda Layerとして登録します。その後、作成したLayerをLambda関数へ追加します。

4-1. Lambda Layerを作成する

4-1. Lambda Layerを作成する

1. AWS Lambdaを開きます。

2. 左側メニューから「Layers」を開きます。

3. 「レイヤーの作成」をクリックします。

4. 以下を設定します。

レイヤー名:
ojt-common-layer-[name]-01

アップロード:
.zipファイルをアップロード

ファイル:
common-utils-layer.zip

互換性のあるランタイム:
Python 3.13

5. 「作成」をクリックします。

4-2. Lambda関数にLayerを追加する

4-2. Lambda関数にLayerを追加する

1. ojt-lambda-layer-[name]-01 を開きます。

2. 関数画面の「Layers」を開きます。

3. 「Add a layer」をクリックします。

4. 「Custom layers」を選択します。

5. 以下を選択します。

Layer:
ojt-common-layer-[name]-01

Version:
1

6. 「Add」をクリックします。

5. Layer追加後の動作を確認する

Layer追加後の状態

作成したLayerをLambda関数へ関連付けることで、Lambda本体からLayer内の common_utils.py をimportできるようになります。

5-1. 再度テストする

5-1. 再度テストする

1. 「Test」をクリックします。

2. 先ほど作成した layer-test を使用します。

{
  "name": "自身の名前"
}

3. テストを実行します。

正常に動作すると、以下のような結果になります。

{
  "statusCode": 200,
  "message": "Hello, Yoshida! This message came from Lambda Layer."
}

5-2. 動作を整理する

5-2. 動作を整理する

Layer追加前

Lambda
↓
common_utilsをimport
↓
ファイルがない
↓
エラー

Layer追加後

Lambda
↓
common_utilsをimport
↓
Lambda Layer
↓
common_utils.py
↓
create_message()実行
↓
成功

Lambda本体には common_utils.py を配置していません。それでもLayerを追加することで、以下のように共通処理を利用できます。

from common_utils import create_message

6. Lambda LayerのメリットとVersionを確認する

Lambda Layerのメリット

Layerを使用することで、共通コードやライブラリをLambda本体から分離できます。

Layerなし:

Lambda A → common_utils.py
Lambda B → common_utils.py
Lambda C → common_utils.py

複数のLambdaで同じ処理を利用する場合は、共通処理をLayerへまとめることで再利用できます。

Layerを使えば必ず設計が良くなるわけではありません
1つのLambdaでしか使用しない小さな処理をLayerへ分離すると、構成が複雑になる場合もあります。複数のLambdaで共通利用するものかを判断して使用することが重要です。

6-1. Lambda LayerのVersion

6-1. Lambda LayerのVersion
ojt-common-layer-[name]-01
├── Version 1
├── Version 2
└── Version 3

Lambda関数側では、どのLayer Versionを使用するか指定します。

Lambda A
→ Layer Version 1

Lambda B
→ Layer Version 2

Layerの新しいVersionを作成しただけで、既存Lambdaが自動的に新しいVersionへ切り替わるわけではありません。

6-2. 今回のポイント

6-2. 今回のポイント
Lambda:
プログラムを実行するサービス

Lambda Layer:
Lambdaから利用する共通コードやライブラリを
Lambda本体とは別に管理する仕組み

今回確認した内容:
Lambdaのみ → common_utils.pyがないためエラー
Layer追加   → common_utils.pyを利用できる → Lambda実行成功

7. ハンズオンで作成したリソースを削除する

削除するリソース
  • Lambda関数
  • Lambda Layer
  • Lambda実行用IAMロール(Lambda作成時に新規作成された場合のみ)

7-1. Lambda関数を削除する

7-1. Lambda関数を削除する

1. AWS Lambdaを開きます。

2. 「Functions」を開きます。

3. ojt-lambda-layer-[name]-01 を選択します。

4. 「Actions」→「Delete」をクリックします。

5. 画面の指示に従って削除します。

7-2. Lambda Layerを削除する

7-2. Lambda Layerを削除する

1. Lambda左側メニューの「Layers」を開きます。

2. ojt-common-layer-[name]-01 を開きます。

3. Version 1を選択します。

4. 「Delete」を実行します。

7-3. IAMロールを削除する

7-3. IAMロールを削除する

Lambda作成時に新しいIAMロールを作成した場合のみ削除します。

1. IAMを開きます。

2. 「ロール」を開きます。

3. 今回のLambda用に作成されたロールを探します。

ojt-lambda-layer-[name]-01-role-xxxxxxxx

4. 他のリソースで使用していないことを確認します。

5. ロールを削除します。

IAMロール削除時の注意
他のLambda関数やAWSリソースで利用されていないことを確認してから削除してください。

まとめ

今回の記事では、AWS LambdaのLambda Layerを作成し、Lambda関数本体とは別に配置した共通処理を利用する方法を確認しました。

今回の流れは次のとおりです。

Lambda関数作成
↓
Layer内の処理をimport
↓
Layerがないためエラー
↓
common_utils.py作成
↓
ZIPファイル作成
↓
Lambda Layer作成
↓
LambdaにLayerを追加
↓
再テスト
↓
正常実行

Lambda Layerは、Lambdaから利用する共通コードやライブラリを、Lambda本体とは別に管理する仕組みです。

特に、複数のLambdaで同じコードやライブラリを使用する場合に活用できます。

 

参考にした記事

参考にした記事

Lambda Layerの仕様やLayerの構成について、以下のAWS公式ドキュメントを参考にしました。

この記事を書いた人

義田蓮巨

reo_yoshida

義田蓮巨