AWS Lambda Layerをbashで爆速作成!Pythonライブラリをまとめてデプロイ

AWS Lambda Layerをbashで爆速作成!Pythonライブラリをまとめてデプロイ
AWS Lambda Layer作成、もっと簡単に、もっと速く!

AWS Lambdaを利用してサーバーレスアーキテクチャを構築する際、外部ライブラリの利用は避けて通れません。しかし、多くのライブラリを含めるとデプロイパッケージのサイズが肥大化し、デプロイ時間の増加やLambdaの制限に抵触する可能性があります。そこで登場するのがLambda Layerです。Layerを使うことで、共通のライブラリ群をLambda関数本体から分離し、デプロイパッケージを小さく保ち、複数の関数でライブラリを共有できるようになります。

特にPythonで開発する場合、様々なライブラリ(例: requests, Pillow, google-api-python-clientなど)を利用することが一般的です。これらのライブラリとその依存関係をまとめてLayerとしてパッケージ化する作業は、手動で行うと意外と手間がかかります。

この記事では、提供されたbashスクリプトをベースに、AWS Lambda Layer(特にPythonライブラリを含むもの)をbashコマンドを使って効率的かつ「爆速」で作成し、デプロイする手順を詳細に解説します。

この記事を読むメリット
  • AWS Lambda Layerの基本的な概念と重要性が理解できます。
  • PythonライブラリをLayerとしてパッケージ化する具体的な手順が分かります。
  • bashスクリプトを使うことによるLayer作成の効率化を体験できます。
  • LayerをS3にアップロードする方法とその理由が理解できます。
  • Layer作成時の注意点や応用的な方法についても触れます。

さあ、Lambda開発の効率を飛躍的に向上させるLayer作成の世界に飛び込みましょう!

目次

AWS Lambda Layerとは?なぜ必要なのか?

サーバーレスコンピューティングの代表格であるAWS Lambdaは、コードの実行環境を提供してくれます。しかし、デフォルトの実行環境に含まれていないライブラリを使いたい場合、それらを関数コードと一緒にデプロイパッケージに含める必要があります。

初期の頃はこれで問題ありませんでしたが、利用するライブラリが増えるにつれて、デプロイパッケージのサイズがどんどん大きくなっていきました。Lambdaにはデプロイパッケージのサイズ制限(解凍後250MBなど)があり、これを超えるとデプロイできなくなります。また、パッケージが大きいとアップロードやデプロイに時間がかかり、開発サイクルが遅くなるという問題も発生します。

ここでLambda Layerが役立ちます。Lambda Layerは、追加のコードやデータを含むことができるzipファイルです。これにはライブラリ、カスタムランタイム、またはその他の依存関係を含めることができます。LayerをLambda関数に関連付けることで、関数コード本体とは別にこれらの依存関係を管理できるようになります。

重要なポイント:Layerの最大のメリットは、関数コードと依存関係を分離できること、そして複数のLambda関数で同じLayerを共有できることです。

これにより、以下のような利点が得られます。

  • デプロイパッケージサイズの削減: 関数コードだけをデプロイするため、パッケージサイズが小さくなります。
  • デプロイ時間の短縮: アップロードするデータ量が減るため、デプロイが速くなります。
  • 依存関係の管理効率化: ライブラリのバージョンアップがあった場合、Layerだけを更新すれば、そのLayerを利用している全ての関数に反映されます。
  • コードの再利用性向上: 共通して使用するライブラリ群をLayerとして一度作成すれば、異なるLambda関数から再利用できます。

特にPythonのようなライブラリエコシステムが非常に活発な言語では、Layerの恩恵は大きいと言えるでしょう。多くの便利なライブラリが存在するため、それらを効率的に管理する方法が不可欠だからです。

bashスクリプトによるLayer作成の全体像

今回紹介するbashスクリプトは、PythonのライブラリをLayerとしてパッケージ化するための基本的な流れを自動化します。その流れは以下の通りです。

  1. 作業用フォルダの作成: Layerのビルドに必要なファイルやフォルダを整理するための場所を作ります。
  2. 必要なライブラリのリスト化: requirements.txt ファイルにインストールしたいPythonライブラリを記述します。
  3. ライブラリのインストール: pip を使って、指定したライブラリを作業用フォルダ内の特定の構造(Lambda Layerの仕様に合わせた形式)にインストールします。
  4. zipファイルへの圧縮: インストールしたライブラリフォルダをLambda Layerとしてデプロイ可能なzip形式に圧縮します。
  5. S3へのアップロード: 作成したzipファイルをAmazon S3バケットにアップロードします。これは、LambdaコンソールやAWS CLIから直接大きなLayerファイルをアップロードする際の制限を回避したり、バージョン管理をしやすくするためです。

この一連の作業を手動で行うと、フォルダ作成、pip install のオプション指定、zipコマンドの実行、S3へのアップロードコマンド入力など、複数のステップが必要になります。bashスクリプトとしてまとめておくことで、コマンド一つでこれらの作業を自動化でき、圧倒的に効率が向上します。

bashを使う理由

bashはLinuxやmacOSで標準的に利用できるコマンドラインシェルです。簡単なテキスト処理やファイル操作、コマンドの連結などが得意です。Lambda Layerの作成プロセスは、フォルダ作成、ファイルの書き込み、コマンド実行、ファイルの圧縮といった基本的なファイルシステム操作とコマンド実行の組み合わせであるため、bashで自動化するのに非常に適しています。Windows環境でも、WSL (Windows Subsystem for Linux) を利用すればbashスクリプトを実行できます。

bashスクリプトの各ステップを徹底解説

それでは、提供されたbashスクリプトの各ステップを詳しく見ていきましょう。それぞれのコマンドが何をしているのか、なぜ必要なのかを理解することが、より効果的にスクリプトを利用するために重要です。

提供されたスクリプトは以下の通りです。

# ステップ1: 作業用フォルダの作成
mkdir lambda_layer
cd lambda_layer

# ステップ2: 必要なライブラリのリストを作成
echo "google-api-python-client" >> requirements.txt
echo "google-generativeai" >> requirements.txt
echo "Pillow" >> requirements.txt
echo "markdown" >> requirements.txt
echo "requests" >> requirements.txt

# ステップ3: ライブラリをインストール
python3 -m pip install -r requirements.txt -t ./python

# ステップ4: インストールしたフォルダをzipファイルに圧縮
zip -r my-lambda-layer.zip python

# ステップ5: 作成したzipファイルをS3にアップロード
# ※your-bucket-name の部分は、あなたのS3バケット名に書き換えてください。
aws s3 cp my-lambda-layer.zip s3://your-bucket-name/
# (例: aws s3 cp my-lambda-layer.zip s3://lambda-deploy-packages-kazuki-mizutani/)

ステップ1: 作業用フォルダの作成

mkdir lambda_layer
cd lambda_layer

最初のステップは、Layer作成のための一時的な作業ディレクトリを作成し、その中に移動することです。

  • mkdir lambda_layer: lambda_layer という名前の新しいディレクトリを作成します。このディレクトリ内に、Layerに必要なファイルやフォルダをまとめます。
  • cd lambda_layer: 作成した lambda_layer ディレクトリにカレントディレクトリを変更します。これ以降のコマンドは、このディレクトリ内で実行されることになります。

このステップは、Layerのビルドプロセスを他のファイルから隔離し、作業を整理するために不可欠です。

ステップ2: 必要なライブラリのリストを作成

echo "google-api-python-client" >> requirements.txt
echo "google-generativeai" >> requirements.txt
echo "Pillow" >> requirements.txt
echo "markdown" >> requirements.txt
echo "requests" >> requirements.txt

このステップでは、インストールしたいPythonライブラリとそのバージョンを指定するための requirements.txt ファイルを作成します。

  • echo "ライブラリ名" >> requirements.txt: echo コマンドは指定した文字列を標準出力に出力します。>> はリダイレクション演算子で、標準出力を指定したファイルに追記します。もし requirements.txt が存在しない場合は新規作成されます。

ここでは、以下の5つのライブラリを例としてリストアップしています。

ライブラリ名 概要・主な用途
google-api-python-client Google API(Gmail API, Drive APIなど)をPythonから操作するための公式クライアントライブラリ。
google-generativeai GoogleのGenerative AIモデル(Geminiなど)を利用するためのクライアントライブラリ。
Pillow Python Imaging Library (PIL) のフォーク。画像処理機能を提供。サムネイル作成、画像形式変換などに利用。
markdown MarkdownテキストをHTMLに変換するためのライブラリ。
requests HTTP通信を簡単に行うためのデファクトスタンダードなライブラリ。API連携などで頻繁に利用。

これらのライブラリは、それぞれ異なる機能を提供し、Lambda関数で様々な外部サービスと連携したり、データ処理を行ったりする際に非常に有用です。requirements.txt にリスト化することで、後続の pip install コマンドでこれらのライブラリとその依存関係をまとめてインストールできるようになります。

ポイント:バージョンを指定したい場合は、`ライブラリ名==バージョン` の形式で記述します(例: `requests==2.28.1`)。これにより、Layerの再現性が確保されます。バージョンを指定しない場合、インストール実行時の最新バージョンがインストールされます。

ステップ3: ライブラリをインストール

python3 -m pip install -r requirements.txt -t ./python

このステップが、Layerのコンテンツを実際に準備する部分です。

  • python3 -m pip: インストールに使う pip コマンドを、特定のPythonインタープリタ (python3) に紐づけて実行します。これにより、システムに複数のPythonバージョンがインストールされている場合でも、意図したバージョンの pip を確実に使用できます。
  • install: pip のインストールコマンドです。
  • -r requirements.txt: インストールするライブラリを requirements.txt ファイルから読み込むように指定します。
  • -t ./python: これが非常に重要なオプションです。インストール先ディレクトリを指定します。Lambda Layerの仕様では、PythonライブラリはLayerのルートディレクトリ直下の python または python/lib/pythonX.Y/site-packages ディレクトリに配置されている必要があります。-t ./python と指定することで、カレントディレクトリ (lambda_layer) の直下に python というディレクトリが作成され、その中にライブラリがインストールされます。

このコマンドを実行すると、requirements.txt にリストされたライブラリとその依存関係が、lambda_layer/python ディレクトリ以下にダウンロードされ、展開されます。

インストールが完了すると、lambda_layer ディレクトリの構成は以下のようになります(インストールされるライブラリによって内容は異なります)。

lambda_layer/
├── python/
│   ├── ライブラリA/
│   ├── ライブラリB/
│   ├── ...
│   └── (依存ライブラリ群)
└── requirements.txt

ステップ4: インストールしたフォルダをzipファイルに圧縮

zip -r my-lambda-layer.zip python

Layerとしてデプロイするためには、必要なファイル群をzip形式で圧縮する必要があります。

  • zip: zip圧縮を行うコマンドです。
  • -r: 再帰的にディレクトリを含めるオプションです。python ディレクトリとその中の全てのファイル・サブディレクトリを圧縮対象に含めるために必要です。
  • my-lambda-layer.zip: 作成するzipファイルの名前を指定します。
  • python: 圧縮対象とするディレクトリを指定します。カレントディレクトリ (lambda_layer) の直下にある python ディレクトリが圧縮されます。

このコマンドを実行すると、lambda_layer ディレクトリ内に my-lambda-layer.zip というファイルが作成されます。このzipファイルのルートには python ディレクトリが含まれており、その中にインストールしたライブラリ一式が格納されています。この構造がLambda Layerの仕様に合致しています。

ステップ5: 作成したzipファイルをS3にアップロード

aws s3 cp my-lambda-layer.zip s3://your-bucket-name/

最後に、作成したzipファイルをAmazon S3バケットにアップロードします。

  • aws s3 cp: AWS CLIのS3コマンドで、ローカルファイルとS3間、またはS3バケット間でファイルをコピーします。
  • my-lambda-layer.zip: コピー元となるローカルのファイルパスです。カレントディレクトリ (lambda_layer) にある my-lambda-layer.zip を指定しています。
  • s3://your-bucket-name/: コピー先となるS3のパスです。your-bucket-name の部分は、実際に使用するS3バケット名に置き換える必要があります。末尾の / は、バケットのルートにファイルを配置することを意味します。

なぜS3にアップロードするのでしょうか?

S3を経由する理由

LambdaコンソールやAWS CLIを使ってLambda Layerを作成・更新する際、直接zipファイルをアップロードする方法と、S3に配置したzipファイルを指定する方法があります。直接アップロードする場合、ファイルサイズに制限(通常50MB)がありますが、S3からの場合はより大きなファイル(最大250MB)を扱えます。多くのライブラリを含むLayerは50MBを超えることがよくあるため、S3を経由するのが一般的です。また、S3にLayerのzipファイルを保管しておくことで、バージョン管理や再利用が容易になります。

このコマンドを実行するには、事前にAWS CLIがインストールされており、適切な認証情報(AWSアクセスキー、シークレットアクセスキー、リージョン設定など)が設定されている必要があります。

bashスクリプト実行前の準備

このbashスクリプトを実行する前に、いくつかの準備が必要です。

  1. 実行環境: LinuxまたはmacOS環境が推奨されます。Windowsの場合はWSL (Windows Subsystem for Linux) をセットアップしてください。
  2. Pythonとpip: スクリプト中で python3 -m pip を使用しているため、Python 3がインストールされており、pipが利用可能である必要があります。必要に応じてPythonの公式サイトからインストールしてください。
  3. AWS CLI: S3へのアップロードにAWS CLIを使用します。AWS CLIがインストールされており、使用するAWSアカウントの認証情報が設定済みであることを確認してください。インストールおよび設定方法はAWSの公式ドキュメントを参照してください。
  4. S3バケット: 作成したzipファイルをアップロードするためのS3バケットが必要です。Layer用のバケットを事前に作成しておきましょう。バケット名はグローバルに一意である必要があります。
  5. zipコマンド: zipファイルを作成するために zip コマンドが必要です。多くのLinuxディストリビューションやmacOSにはデフォルトでインストールされていますが、もし利用できない場合はインストールしてください(例: sudo apt-get install zipbrew install zip)。

これらの準備が整えば、提供されたbashスクリプトをファイルに保存し(例: create_layer.sh)、ターミナルで実行するだけでLayer作成プロセスを開始できます。

bash create_layer.sh

※S3バケット名の部分は、必ずご自身のバケット名に書き換えてから実行してください。

注意点とトラブルシューティング

bashスクリプトでのLayer作成は非常に効率的ですが、いくつか注意すべき点があります。

1. Pythonバージョンの整合性

Lambda Layerに含まれるPythonライブラリは、Lambda関数が使用するPythonランタイムのバージョンと互換性がある必要があります。

  • ローカル環境のPythonバージョン: スクリプトを実行するローカル環境のPythonバージョンは、Lambda関数で使用する予定のPythonバージョンと一致させるか、少なくとも互換性のあるバージョンを使用することが非常に重要です。例えば、Lambda関数でPython 3.9を使用する場合、ローカル環境でもPython 3.9で pip install を実行するのが理想的です。
  • クロスコンパイル: 特にC言語などで実装されたネイティブ拡張を含むライブラリ(例: Pillow の一部機能やデータサイエンス系のライブラリ)をインストールする場合、Layerを作成する環境のOSアーキテクチャがLambda実行環境(Amazon Linuxベース)と異なることが問題になることがあります。ローカルがmacOSやWindowsの場合、Lambda環境とはアーキテクチャが異なります。この問題を解決するためには、Lambdaと同じ実行環境を模倣した環境でライブラリをビルドする必要があります。Dockerコンテナを使うのが最も一般的な方法です。
Dockerを使ったクロスコンパイル

AWSが提供しているLambdaの公式コンテナイメージを利用すると、Lambda実行環境とほぼ同じ環境でライブラリをインストールできます。

  1. Dockerをインストールします。
  2. Lambdaランタイムに合わせたDockerイメージをプルします(例: public.ecr.aws/lambda/python:3.9)。
  3. このDockerコンテナ内で、上記のbashスクリプトのステップ1〜4を実行します。
  4. 作成されたzipファイルをコンテナからローカル環境にコピーし、ステップ5のS3アップロードを実行します。

Dockerを使うことで、ローカル環境の差異による互換性の問題を回避し、より信頼性の高いLayerを作成できます。

2. zipファイルの構造

Lambda Layerとして認識されるためには、zipファイル内のディレクトリ構造が正しくなければなりません。Pythonの場合、ライブラリはzipファイルのルートにある python ディレクトリ、または python/lib/pythonX.Y/site-packages ディレクトリ以下に配置されている必要があります。

今回のスクリプトでは -t ./python オプションを使用しているため、lambda_layer/python ディレクトリにライブラリがインストールされ、その python ディレクトリごとzip圧縮されるため、正しい構造 (my-lambda-layer.zip のルートに python ディレクトリがある) になります。

もし手動でzipを作成する場合や、別のツールを使う場合は、このディレクトリ構造に注意が必要です。

3. デプロイパッケージサイズの制限

Layerを含めたLambda関数の全体の解凍後のサイズは250MBまでという制限があります。Layer自体は最大250MBまでアップロードできますが、関数コードや他のLayerと合計して250MBを超えないように注意が必要です。

特に多くのライブラリを含めたり、サイズの大きいライブラリ(画像処理ライブラリなど)を含めたりする場合、250MBの制限に達しやすいです。必要最小限のライブラリのみをLayerに含めるように検討しましょう。

4. S3バケットの権限

ステップ5でS3にアップロードする際、AWS CLIを実行しているIAMユーザー/ロールに、指定したS3バケットへの PutObject アクションを許可する権限が必要です。また、そのLayerをLambda関数から参照するためには、Lambda実行ロールに、Layerが格納されているS3バケットからの GetObject 権限が必要です。

作業 必要な権限(IAMポリシー)
Layer zipファイルをS3にアップロード `s3:PutObject` (対象S3バケットに対して)
Lambda関数からLayerを参照・使用 `s3:GetObject` (Layer zipファイルが格納されているS3バケットに対して)
`lambda:GetLayerVersion` (作成したLayerに対して)

必要な権限が付与されていることを確認してください。

Layer作成後のステップ:Lambda関数への紐づけ

bashスクリプトとS3アップロードでLayerのzipファイルは準備できましたが、これをLambda関数で利用するためには、AWS上でLayerリソースとして作成し、関数に紐づける必要があります。

この作業は、AWSマネジメントコンソール、AWS CLI、またはIaC (Infrastructure as Code) ツール(AWS SAM, AWS CDK, Terraformなど)で行うことができます。

AWSマネジメントコンソールでの手順(概要)

  1. AWS Lambdaコンソールにアクセスします。
  2. 左側のナビゲーションペインで「レイヤー」を選択します。
  3. 「レイヤーの作成」ボタンをクリックします。
  4. レイヤー名、説明、互換性のあるランタイム(例: Python 3.9)、互換性のあるアーキテクチャ(例: x86_64またはarm64)を選択します。
  5. 「コードのアップロード」セクションで、「Amazon S3からファイルをアップロード」を選択し、ステップ5でアップロードしたLayer zipファイルのS3 URLを入力します。
  6. 「作成」ボタンをクリックします。

Layerが作成されたら、既存または新規のLambda関数にそのLayerを関連付けます。

  1. Lambda関数の設定ページを開きます。
  2. ページの下部にある「レイヤー」セクションを見つけ、「レイヤーの追加」をクリックします。
  3. 「カスタムレイヤー」を選択し、作成したLayerとそのバージョンを選択します。
  4. 「追加」をクリックし、変更を保存します。

AWS CLIでの手順(概要)

AWS CLIを使ってもLayerの作成と関数への紐づけが可能です。

Layerの作成:

aws lambda publish-layer-version \
    --layer-name my-python-layer \
    --description "My Python Libraries Layer" \
    --content S3Bucket=your-bucket-name,S3Key=my-lambda-layer.zip \
    --compatible-runtimes python3.9 \
    --compatible-architectures x86_64

このコマンドを実行すると、Layerが作成され、そのARN (Amazon Resource Name) が出力されます。ARNにはLayerのバージョンが含まれています。

Lambda関数へのLayerの紐づけ:

aws lambda update-function-configuration \
    --function-name your-lambda-function-name \
    --layers arn:aws:lambda:your-region:your-account-id:layer:my-python-layer:version-number

your-lambda-function-nameyour-regionyour-account-id、そしてLayer作成時に取得したARNの version-number を適切に置き換えてください。

IaCツールでの手順(概要)

AWS SAMやAWS CDK、TerraformなどのIaCツールを使用している場合、これらのツールを使ってLayerリソースとLambda関数の紐づけをコードとして管理するのが最も推奨される方法です。これにより、インフラストラクチャの変更履歴を管理し、再現性のあるデプロイが可能になります。

例(AWS SAMの template.yaml スニペット):

Resources:
  MyPythonLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      LayerName: my-python-layer
      Description: "My Python Libraries Layer"
      ContentUri: s3://your-bucket-name/my-lambda-layer.zip # S3のパスを指定
      CompatibleRuntimes:
        - python3.9
      CompatibleArchitectures:
        - x86_64
      RetentionPolicy: Retain # Layerバージョンを残す設定

  MyLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: my-lambda-function
      Runtime: python3.9
      CodeUri: your_function_code/
      Handler: app.lambda_handler
      Layers:
        - !Ref MyPythonLayer # Layerを関数に紐づけ

IaCツールを使うことで、Layerの更新や関数への適用といった作業も自動化でき、より洗練されたデプロイパイプラインを構築できます。

さらに進んだ活用法と応用

bashスクリプトによるLayer作成は基本的な自動化ですが、これを基盤としてさらに応用的な使い方やワークフローを構築できます。

複数のLayerの管理

一つのLambda関数に複数のLayerを関連付けることができます(最大5つ)。例えば、特定の機能群ごとにLayerを分けたり、共通ライブラリとプロジェクト固有のライブラリでLayerを分けたりすることが考えられます。

  • 機能別Layer: 画像処理関連ライブラリのLayer、データ分析関連ライブラリのLayerなど。
  • 共通/固有Layer: 複数のプロジェクトで共通して使うライブラリを一つのLayerにまとめ、プロジェクト固有のライブラリは別のLayerにする。

これにより、Layerのサイズを小さく保ちつつ、必要な機能だけを選択して関数に適用できるようになります。bashスクリプトも、対象とする requirements.txt ファイルや出力するzipファイル名を変更することで、複数のLayerを作成するように拡張できます。

requirements.txtの自動生成・管理

手動で requirements.txt を編集する代わりに、プロジェクトで使用しているライブラリを自動的にリストアップするツール(例: pip freeze > requirements.txt)や、依存関係の解決とバージョン固定を行うツール(例: pip-toolspip-compile)を活用すると、requirements.txt の管理がより効率的になります。

Layer作成スクリプトのステップ2を、これらのツールを使ったコマンドに置き換えることも可能です。

CI/CDパイプラインへの組み込み

Layerの作成とS3へのアップロードプロセスをCI/CDパイプライン(例: AWS CodeBuild, GitHub Actions, GitLab CI)に組み込むことで、コード変更時にLayerの自動更新やデプロイをトリガーできます。

例えば、requirements.txt が変更された場合に、CI/CDパイプラインが起動し、Layerのzipファイルを再作成してS3にアップロード、そしてLambda Layerリソースを更新(新しいバージョンを発行)するといったワークフローが考えられます。これにより、ライブラリの変更が自動的に反映されるようになり、運用負荷が軽減されます。

Layerのバージョニングとロールバック

Lambda Layerにはバージョニング機能があります。Layerを更新するたびに新しいバージョンが発行されます。Lambda関数は特定のバージョンのLayerを参照するため、新しいLayerバージョンに問題があった場合でも、以前の安定したバージョンに簡単にロールバックできます。

S3にアップロードするzipファイルにバージョン情報を含める(例: my-lambda-layer-v1.0.0.zip)など、S3側でもバージョニングを管理すると、Layerリソースのバージョン管理と合わせてより堅牢な運用が可能になります。

これらの応用的な活用法を取り入れることで、Lambda開発および運用の生産性と安定性をさらに高めることができます。bashスクリプトはあくまで基本的な自動化の入り口であり、ここから様々なツールやサービスと連携させていくことが可能です。

まとめ

【まとめ】AWS Lambda Layerをbashで爆速作成し、Pythonライブラリを効率的にデプロイする方法

この記事では、AWS LambdaでPythonライブラリを効率的に利用するためのLambda Layerについて、その必要性からbashスクリプトを使った具体的な作成・デプロイ手順までを詳しく解説しました。

LayerはLambda関数のデプロイパッケージサイズを削減し、依存関係の管理を容易にし、コードの再利用性を高めるための強力な機能です。特にPythonで多くのライブラリを使用する場合、Layerの活用は開発効率向上に不可欠です。

提供されたbashスクリプトは、以下の主要なステップを自動化します。

ステップ コマンド 目的
1 `mkdir lambda_layer`
`cd lambda_layer`
Layer作成用の作業ディレクトリを準備
2 `echo “lib” >> requirements.txt` (複数行) インストールするライブラリをリスト化
3 `python3 -m pip install -r requirements.txt -t ./python` ライブラリをLayer構造に合わせてインストール
4 `zip -r my-lambda-layer.zip python` Layerとしてデプロイ可能なzipファイルを作成
5 `aws s3 cp my-lambda-layer.zip s3://your-bucket-name/` 作成したzipファイルをS3にアップロード

このスクリプトを実行することで、手動での煩雑な作業から解放され、Layer作成プロセスを大幅に高速化できます。

ただし、Layer作成においては、ローカル環境のPythonバージョンとLambda実行環境の整合性、クロスコンパイルの必要性、zipファイルの正しい構造、そして各種サイズの制限やIAM権限といった注意点があります。特にネイティブ拡張を含むライブラリを扱う場合は、Dockerなどのコンテナ環境でのビルドを検討することを強く推奨します。

LayerのzipファイルがS3にアップロードされた後は、AWSマネジメントコンソール、AWS CLI、またはIaCツールを使ってAWS上にLayerリソースとして登録し、Lambda関数に紐づけることで、実際にそのLayerを利用できるようになります。

さらに、複数のLayerの管理、requirements.txtの自動化、CI/CDパイプラインへの組み込み、Layerのバージョニングといった応用的な活用法を取り入れることで、Lambda開発のワークフローをさらに効率化し、より堅牢なシステムを構築することが可能です。

この記事で紹介したbashスクリプトはLayer作成の素晴らしい出発点となります。ぜひ実際に手を動かして試してみてください。そして、ご自身のプロジェクトのニーズに合わせて、この記事で触れた応用的な方法も検討し、AWS Lambdaでの開発体験をさらに向上させていきましょう!

撮影に使用している機材【PR】

AWS Lambda Layerをbashで爆速作成!Pythonライブラリをまとめてデプロイ

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次