はじめに
AWS Lambdaでは、複数のLambda関数間で共通のコードやライブラリを共有するためにLambdaレイヤーを使用します。
Lambdaレイヤーを正しく設定することは、再利用可能なコードを効率よく管理できるため、システムの健全性を保つために非常に重要です。
しかし、Lambdaレイヤーが正しく設定されているかを確認する方法は意外と見落とされがちです。
私も普段からLambdaレイヤーを使う経験がほとんどなかったので、自分への備忘録として記事を整理しました。
Lambdaレイヤーについて
Lambdaレイヤーは、AWS Lambda関数で使用するライブラリやコードを管理するための一種のアーカイブです。
引用画像: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
コマンドを使って正常にインストールが完了したことが確認できました。
zip -r requests-layer.zip python/
zip
コマンドを実行した後、requests-layer.zip
というzipファイルが正常に作成されました。
AWS Lambdaコンソールでレイヤーを作成
AWS Lambdaコンソールを開き、「レイヤーの作成」を選択し、作成した requests-layer.zip
をアップロードします。
レイヤー作成画面に遷移した後、任意の名前を付けて、「requests-layer.zip」をアップロードします。
ここでは、Pythonのバージョンを3.10に設定しています。また、レイヤーを作成後、Lambda関数で使用できるようになります。
Lambda関数の作成
次に、作成したレイヤーを使用するLambda関数を作成します。ここでは、「test」という関数名で作成します。
ランタイムのバージョンは、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関数をクリックし、コードタブの最下部にある「レイヤー」セクションからレイヤーを追加します。
「test」という関数名にレイヤーが正常にアタッチされていることが確認できました。
テスト実行
上記のコードをLambda関数に実装した後、実際にテストを実行し、レイヤーが正しく設定されているかを確認します。
Lambda関数を実行して、requests
パッケージが正常にインポートされ、外部リソースにアクセスできることを確認します。
Lambda関数が正常に実行され、ステータスコード200が表示されれば、レイヤーが正しく設定されていることになります。
エラーが発生した場合は、必要なパッケージが含まれていないか、レイヤーが正しく適用されていない可能性があります。その際は再度確認してみてください。
まとめ
AWS Lambdaのレイヤー機能を使って外部ライブラリの共有を試みましたが、最初はレイヤーの適用方法に苦戦しました。
特に、レイヤーの作成とLambda関数への適用が正しく行われているかの確認に時間がかかりました。
Lambdaにはコードやライブラリを共有するためのレイヤー機能があることを初めて知り、その便利さに驚きました。
これにより、コードの再利用性と管理が大きく向上することが実感できました。
参考文献