0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Lambdaレイヤー設定ガイド:Lambdaレイヤーの活用で外部ライブラリの管理を効率化する方法

Posted at

はじめに

AWS Lambdaでは、複数のLambda関数間で共通のコードやライブラリを共有するためにLambdaレイヤーを使用します。

Lambdaレイヤーを正しく設定することは、再利用可能なコードを効率よく管理できるため、システムの健全性を保つために非常に重要です。

しかし、Lambdaレイヤーが正しく設定されているかを確認する方法は意外と見落とされがちです。

私も普段からLambdaレイヤーを使う経験がほとんどなかったので、自分への備忘録として記事を整理しました。

Lambdaレイヤーについて

Lambdaレイヤーは、AWS Lambda関数で使用するライブラリやコードを管理するための一種のアーカイブです。

スクリーンショット 2024-11-14 21.12.59.png
引用画像:https://aws.amazon.com/jp/builders-flash/202308/learn-lambda-function-execution/

これにより、複数のLambda関数で共通のコードやライブラリを簡単に共有できます。

以下の記事でLambdaレイヤーについて詳しく説明されていますので、興味のある方は参考にしてみてください。

Lambdaレイヤーの特徴

Lambdaレイヤーには、以下の特徴があります。

  • コードの再利用:
    複数のLambda関数で同じコードやパッケージを共有することができ、コードの重複を避けることができます。

  • 依存パッケージの管理:
    必要なライブラリや依存パッケージをLambdaレイヤーにまとめておくことで、Lambda関数内で直接パッケージを管理せずに済みます。

  • サイズ制限:
    1つのレイヤーの最大サイズは50MB(圧縮後)であり、Lambda関数に最大5つのレイヤーを追加できます。

実際にやってみた

Lambdaレイヤーの作成

Lambdaレイヤーを作成するには、まず外部ライブラリ(この例では requests パッケージ)を含むアーカイブを作成する必要があります。

以下は、requests パッケージを含んだLambdaレイヤーの作成手順で、ローカル環境で実施しています。

必要なライブラリのインストール

mkdir python
pip install requests -t python/

ターミナル画面で、pip コマンドを使って正常にインストールが完了したことが確認できました。

スクリーンショット 2024-11-14 20.50.11.png

zip -r requests-layer.zip python/

zip コマンドを実行した後、requests-layer.zip というzipファイルが正常に作成されました。

スクリーンショット 2024-11-14 20.53.27.png

AWS Lambdaコンソールでレイヤーを作成

AWS Lambdaコンソールを開き、「レイヤーの作成」を選択し、作成した requests-layer.zip をアップロードします。

スクリーンショット 2024-11-14 20.54.38.png

レイヤー作成画面に遷移した後、任意の名前を付けて、「requests-layer.zip」をアップロードします。

スクリーンショット 2024-11-14 20.57.27.png

ここでは、Pythonのバージョンを3.10に設定しています。また、レイヤーを作成後、Lambda関数で使用できるようになります。

Lambda関数の作成

次に、作成したレイヤーを使用するLambda関数を作成します。ここでは、「test」という関数名で作成します。

スクリーンショット 2024-11-14 20.59.21.png

ランタイムのバージョンは、Lambdaレイヤーのバージョンと合わせる必要がありますので、同じくPython 3.10を選択してください。

以下のコードは、requests パッケージを使用して外部のウェブサイト(例: https://www.example.com)にアクセスし、そのレスポンスを返すシンプルな「Hello World」コードです。

import requests

def lambda_handler(event, context):
    # Lambdaレイヤーで提供されたrequestsモジュールを使って確認
    response = requests.get('https://www.example.com')
    return {
        'statusCode': 200,
        'body': f'Hello, World! Status code from example.com: {response.status_code}'
    }

Lambda関数とレイヤーの結合

次に、作成したLambda関数とLambdaレイヤーを結びつけます。

作成したLambda関数をクリックし、コードタブの最下部にある「レイヤー」セクションからレイヤーを追加します。

スクリーンショット 2024-11-14 21.03.25.png

「test」という関数名にレイヤーが正常にアタッチされていることが確認できました。

スクリーンショット 2024-11-14 21.04.12.png

テスト実行

上記のコードをLambda関数に実装した後、実際にテストを実行し、レイヤーが正しく設定されているかを確認します。

スクリーンショット 2024-11-14 21.06.24.png

Lambda関数を実行して、requests パッケージが正常にインポートされ、外部リソースにアクセスできることを確認します。

スクリーンショット 2024-11-14 21.07.00.png

Lambda関数が正常に実行され、ステータスコード200が表示されれば、レイヤーが正しく設定されていることになります。

スクリーンショット 2024-11-14 21.07.54.png

エラーが発生した場合は、必要なパッケージが含まれていないか、レイヤーが正しく適用されていない可能性があります。その際は再度確認してみてください。

まとめ

AWS Lambdaのレイヤー機能を使って外部ライブラリの共有を試みましたが、最初はレイヤーの適用方法に苦戦しました。

特に、レイヤーの作成とLambda関数への適用が正しく行われているかの確認に時間がかかりました。

Lambdaにはコードやライブラリを共有するためのレイヤー機能があることを初めて知り、その便利さに驚きました。

これにより、コードの再利用性と管理が大きく向上することが実感できました。

参考文献

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?