Python Lambda 関数で .zip ファイルアーカイブを使用する - AWS Lambda

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Python Lambda 関数で .zip ファイルアーカイブを使用する

AWS Lambda 関数のコードは、関数のハンドラーコードと、そのコードが依存するその他のパッケージやモジュールを含む .py ファイルで構成されています。この関数コードを Lambda にデプロイするには、デプロイパッケージを使用します。このパッケージは、.zip ファイルアーカイブでもコンテナイメージでもかまいません。Python でコンテナイメージを使用する方法の詳細については、「コンテナイメージで Python Lambda 関数をデプロイする」を参照してください。

.zip ファイルのデプロイパッケージを .zip ファイルアーカイブとして作成するには、コマンドラインツール用の組み込み .zip ファイルアーカイブユーティリティ、または他の .zip ファイルユーティリティ (7zip など) を使用します。次のセクションに示す例では、Linux または macOS 環境でコマンドライン zip ツールを使用していることを前提としています。Windows で同じコマンドを使用するには、Windows Subsystem for Linux をインストールして、Windows 統合バージョンの Ubuntu と Bash を取得します

Lambda は POSIX ファイルアクセス許可を使用するため、.zip ファイルアーカイブを作成する前に、デプロイパッケージフォルダのアクセス許可を設定することが必要になる場合があります。

Python でのランタイム依存関係

Python ランタイムを使用する Lambda 関数の場合、依存関係には任意の Python パッケージまたはモジュールを使用できます。.zip アーカイブを使用して関数をデプロイする場合、これらの依存関係を関数コードとともに .zip ファイルに追加するか、Lambda レイヤーを使用できます。レイヤーは、追加のコードまたはその他のコンテンツを含むことができる個別の .zip ファイルです。Lambda レイヤーの使用の詳細については、「Lambda レイヤーでの作業」を参照してください。

Lambda Python ランタイムには、AWS SDK for Python (Boto3) とその依存関係が含まれます。独自の依存関係を追加できないデプロイシナリオでは、Lambda がランタイムに SDK を提供します。これらのシナリオには、組み込みのコードエディタを使用してコンソールで関数を作成することや、AWS Serverless Application Model (AWS SAM) または AWS CloudFormation テンプレート内のインライン関数を使用することが含まれます。

Lambda は Python ランタイムのライブラリを定期的に更新して、最新の更新とセキュリティパッチを適用します。関数がランタイムに含まれている Boto3 SDK のバージョンを使用しているにも関わらず、デプロイパッケージに SDK の依存関係が含まれている場合、バージョンの不整合の問題が発生する可能性があります。たとえば、デプロイパッケージに SDK 依存関係 urllib3 が含まれる場合があります。Lambda がランタイムで SDK を更新すると、新しいバージョンのランタイムとデプロイパッケージの urllib3 のバージョンとの互換性の問題により、関数が失敗する可能性があります。

重要

依存関係を完全に制御し、バージョンの不整合の問題を回避するには、Lambda ランタイムにそれらのバージョンが含まれていても、関数のすべての依存関係をデプロイパッケージに追加することをお勧めします。これには Boto3 SDK が含まれます。

AWS 責任分担モデルでは、関数のデプロイパッケージに含まれる依存関係を管理する責任があります。これには、更新とセキュリティパッチの適用が含まれます。関数のデプロイパッケージ内の依存関係を更新するには、まず新しい .zip ファイルを作成し、そのファイルを Lambda にアップロードします。詳細については、「依存関係を含めて .zip デプロイパッケージを作成する」と「.zip ファイルを使用した Python Lambda 関数の作成と更新」を参照してください。

依存関係のない .zip デプロイパッケージを作成する

関数コードに依存関係がない場合、.zip ファイルには関数のハンドラーコードを含む .py ファイルのみが含まれます。任意の zip ユーティリティを使用して、.py ファイルをルートとする .zip ファイルを作成します。.py ファイルが .zip ファイルのルートにない場合、Lambda はコードを実行できません。

.zip ファイルをデプロイして新しい Lambda 関数を作成する方法の詳細、既存の Lambda 関数を更新する方法の詳細については、「.zip ファイルを使用した Python Lambda 関数の作成と更新」を参照してください。

依存関係を含めて .zip デプロイパッケージを作成する

関数コードが追加のパッケージやモジュールに依存している場合、これらの依存関係を関数コードとともに .zip ファイルに追加するか、Lambda Layer を使用できます。このセクションでは、依存関係を .zip デプロイパッケージに含める方法について説明します。Lambda でコードを実行するには、ハンドラーコードとすべての関数の依存関係を含む.py ファイルを.zip ファイルのルートにインストールする必要があります。

関数コードが lambda_function.py という名前のファイルに保存されているとします。次の CLI コマンドの例では、関数コードとその依存関係を格納している my_deployment_package.zip という名前の .zip ファイルを作成します。依存関係をプロジェクトディレクトリのフォルダに直接インストールすることも、Python 仮想環境を使用することもできます。

デプロイパッケージ (プロジェクトディレクトリ) を作成するには
  1. lambda_function.py ソースコードファイルを含むプロジェクトディレクトリに移動します。この例では、ディレクトリ名は my_function です。

    cd my_function
  2. 依存関係をインストールする「パッケージ」という名前の新しいディレクトリを作成します。

    mkdir package

    .zip デプロイパッケージの場合、Lambda では、ソースコードとその依存関係がすべて .zip ファイルのルートにあると想定されていることに注意してください。ただし、依存関係をプロジェクトディレクトリに直接インストールすると、多数の新しいファイルやフォルダが追加され、IDE 内を移動することが難しくなります。依存関係をソースコードと区別するために、ここで別の package ディレクトリを作成します。

  3. 依存関係を package ディレクトリにインストールします。以下の例では、pip を使用して Python パッケージインデックスから Boto3 SDK をインストールします。関数コードに自分で作成した Python パッケージを使用している場合は、それらを package ディレクトリに保存します。

    pip install --target ./package boto3
  4. ルートにインストール済みライブラリを含む .zip ファイルを作成します。

    cd package zip -r ../my_deployment_package.zip .

    これにより、プロジェクトディレクトリに my_deployment_package.zip ファイルが生成されます。

  5. .zip ファイルのルートに Lambda_function.py ファイルを追加します。

    cd .. zip my_deployment_package.zip lambda_function.py

    .zip ファイルは、次のように関数のハンドラーコードとすべての依存関係フォルダがルートにインストールされた、フラットなディレクトリ構造である必要があります。

    my_deployment_package.zip |- bin | |-jp.py |- boto3 | |-compat.py | |-data | |-docs ... |- lambda_function.py

    関数のハンドラーコードを含む .py ファイルが .zip ファイルのルートにない場合、Lambda はコードを実行できません。

デプロイパッケージ (仮想環境) を作成するには
  1. プロジェクトディレクトリに仮想環境を作成してアクティブ化します。この例では、プロジェクトディレクトリ名は my_function です。

    ~$ cd my_function ~/my_function$ python3.12 -m venv my_virtual_env ~/my_function$ source ./my_virtual_env/bin/activate
  2. pip を使用して必要なライブラリをインストールします。次の例では、Boto3 SDK をインストールします。

    (my_virtual_env) ~/my_function$ pip install boto3
  3. pip show を使用して、仮想環境内で pip が依存関係をインストールした場所を検索できます。

    (my_virtual_env) ~/my_function$ pip show <package_name>

    pip がライブラリをインストールするフォルダには、site-packages または dist-packages という名前を付けることができます。このフォルダは、lib/python3.x または lib64/python3.x ディレクトリ (python3.x は使用している Python のバージョンを表します) のどちらにあってもかまいません。

  4. 仮想環境を無効化します。

    (my_virtual_env) ~/my_function$ deactivate
  5. pip でインストールした依存関係を含むディレクトリに移動し、インストールした依存関係をルートとする .zip ファイルをプロジェクトディレクトリに作成します。この例では、pip は依存関係を my_virtual_env/lib/python3.12/site-packages ディレクトリにインストールしています。

    ~/my_function$ cd my_virtual_env/lib/python3.12/site-packages ~/my_function/my_virtual_env/lib/python3.12/site-packages$ zip -r ../../../../my_deployment_package.zip .
  6. ハンドラーコードを含む .py ファイルがあるプロジェクトディレクトリのルートに移動し、そのファイルを .zip パッケージのルートに追加します。この例では、関数コードファイルに lambda_function.py という名前が付けられています。

    ~/my_function/my_virtual_env/lib/python3.12/site-packages$ cd ../../../../ ~/my_function$ zip my_deployment_package.zip lambda_function.py

依存関係の Python レイヤーを作成する

このセクションでは、依存関係をレイヤーに含める方法について説明します。依存関係をデプロイパッケージに含める方法については、「依存関係を含めて .zip デプロイパッケージを作成する」を参照してください。

関数にレイヤーを追加すると、Lambda はレイヤーのコンテンツをその実行環境の /opt ディレクトリに読み込みます。Lambda ランタイムごとに、PATH 変数には /opt ディレクトリ内の特定のフォルダパスがあらかじめ含まれます。レイヤーのコンテンツが PATH 変数によって確実に取得されるようにするには、次のフォルダパスにコンテンツを含めます。

  • python

  • python/lib/python3.10/site-packages (サイトディレクトリ)

例えば、レイヤーの.zip ファイルの構造は次のようになります。

pillow.zip │ python/PIL └ python/Pillow-5.3.0.dist-info

さらに、Lambda は /opt/lib ディレクトリ内のライブラリ、および /opt/bin ディレクトリ内のバイナリを自動的に検出します。Lambda がレイヤーのコンテンツを正しく検出できるように、次の構造でレイヤーを作成することもできます。

custom-layer.zip └ lib | lib_1 | lib_2 └ bin | bin_1 | bin_2

レイヤーをパッケージ化したら、「Lambda でのレイヤーの作成と削除」および「関数へのレイヤーの追加」を参照してレイヤーの設定を完了してください。

依存関係検索パスおよびランタイムを含むライブラリ

コードで import ステートメントを使用すると、Python ランタイムはモジュールまたはパッケージが見つかるまで検索パス内のディレクトリを検索します。デフォルトでは、ランタイムが最初に検索する場所は、.zip デプロイパッケージを解凍してマウントするディレクトリ (/var/task) です。ランタイムに含まれるライブラリのバージョンをデプロイパッケージに含める場合、そのバージョンが、ランタイムに含まれるバージョンよりも優先されます。デプロイパッケージ内の依存関係も、レイヤー内の依存関係よりも優先されます。

レイヤーに依存関係を追加すると、Lambda はこれを /opt/python/lib/python3.x/site-packages (ここで python3.x は使用しているランタイムのバージョンを表します) または /opt/python に抽出します。検索パスでは、これらのディレクトリは、ランタイムに含まれるライブラリおよび pip でインストールされたライブラリを含むディレクトリ (/var/runtime および /var/lang/lib/python3.x/site-packages) よりも優先されます。このため、関数レイヤー内のライブラリは、ランタイムに含まれるバージョンよりも優先されます。

注記

Python 3.11 マネージドランタイムとベースイメージでは、AWS SDK とその依存関係は /var/lang/lib/python3.11/site-packages ディレクトリにインストールされます。

次のコードスニペットを追加すると、Lambda 関数の完全な検索パスを確認できます。

import sys search_path = sys.path print(search_path)
注記

デプロイパッケージまたはレイヤーの依存関係はランタイムに含まれるライブラリよりも優先されるため、SDK を含めずに urllib3 などの SDK 依存関係をパッケージに含めると、バージョンの不整合の問題が発生する可能性があります。独自のバージョンの Boto3 依存関係をデプロイする場合は、Boto3 もデプロイパッケージ内の依存関係としてデプロイする必要があります。ランタイムに関数の依存関係のバージョンが含まれていても、それらをすべてパッケージ化することをお勧めします。

.zip パッケージ内の個別のフォルダに依存関係を追加することもできます。たとえば、Boto3 SDK のバージョンを .zip パッケージ内の common というフォルダに追加できます。.zip パッケージを解凍してマウントすると、このフォルダは /var/task ディレクトリ内に配置されます。コード内の .zip デプロイパッケージ内のフォルダの依存関係を使用するには、import from ステートメントを使用します。たとえば、.zip パッケージ内の common という名前のフォルダにある Boto3 のバージョンを使用するには、次のステートメントを使用します。

from common import boto3

__pycache__ フォルダを使用する

関数のデプロイパッケージには __pycache__ フォルダを含めないことをお勧めします。アーキテクチャやオペレーティングシステムが異なるビルドマシンでコンパイルされた Python バイトコードは、Lambda 実行環境と互換性がない場合があります。

ネイティブライブラリとともに .zip デプロイパッケージを作成する

関数で、純粋な Python パッケージとモジュールのみを使用する場合は、pip install コマンドを使用して任意のローカルビルドマシンに依存関係をインストールし、.zip ファイルを作成できます。 NumPy や Pandas を含む一般的な Python ライブラリの多くは純粋な Python ではなく、C または C++ で記述されたコードが含まれています。C/C++ コードを含むライブラリをデプロイパッケージに追加するときは、パッケージを正しく構築し、Lambda 実行環境と互換性があることを確認する必要があります。

Python Package インデックス (PyPI) で入手できるほとんどのパッケージは、「ホイール」(.whl ファイル) として利用できます。.whl ファイルは、特定のオペレーティングシステムと命令セットアーキテクチャ用にプリコンパイルされたバイナリ、およびビルド済みディストリビューションを含む ZIP ファイルの一種です。デプロイパッケージに Lambda との互換性をもたせるには、Linux オペレーティングシステム用のホイールと関数の命令セットアーキテクチャをインストールします。

一部のパッケージには、ソースディストリビューションとしてしか利用できないものもあります。これらのパッケージでは、C/C++ コンポーネントを自分でコンパイルして構築する必要があります。

必要なパッケージで利用できるディストリビューションを確認するには、以下を実行します。

  1. Python Package インデックスのメインページでパッケージの名前を検索します。

  2. 使用するパッケージのバージョンを選択します。

  3. [ファイルをダウンロード] を選択します。

ビルド済みディストリビューション (ホイール) を使用する

Lambda と互換性のあるホイールをダウンロードするには、pip --platform オプションを使用します。

Lambda 関数が x86_64 命令セットアーキテクチャを使用している場合は、次の pip install コマンドを実行して、互換性のあるホイールを package ディレクトリにインストールします。--python 3.x を、使用している Python ランタイムのバージョンに置き換えます。

pip install \ --platform manylinux2014_x86_64 \ --target=package \ --implementation cp \ --python-version 3.x \ --only-binary=:all: --upgrade \ <package_name>

関数が arm64 命令セットアーキテクチャを使用している場合は、次のコマンドを実行します。--python 3.x を、使用している Python ランタイムのバージョンに置き換えます。

pip install \ --platform manylinux2014_aarch64 \ --target=package \ --implementation cp \ --python-version 3.x \ --only-binary=:all: --upgrade \ <package_name>

ソースディストリビューションを使用する

パッケージをソースディストリビューションとしてしか入手できない場合は、C/C++ ライブラリを自分で構築する必要があります。パッケージに Lambda 実行環境との互換性をもたせるには、同じ Amazon Linux 2 オペレーティングシステムを使用する環境でパッケージを構築する必要があります。このためには、パッケージを Amazon EC2 Linux インスタンスで構築します。

Amazon EC2 Linux インスタンスを起動して接続する方法の詳細については、「Linux インスタンス向け Amazon EC2 ユーザーガイド」の「チュートリアル: Amazon EC2 Linux インスタンスの開始方法」を参照してください。

.zip ファイルを使用した Python Lambda 関数の作成と更新

.zip デプロイパッケージを作成すると、このパッケージを使用して新しい Lambda 関数を作成するか、既存の関数を更新できます。.zip パッケージをデプロイするには、Lambda コンソール、AWS Command Line Interface、Lambda API を使用します。AWS Serverless Application Model (AWS SAM) および AWS CloudFormation を使用して、Lambda 関数を作成および更新することもできます。

Lambda の .zip デプロイパッケージの最大サイズは  250 MB (解凍) です。この制限は、Lambda レイヤーを含む、更新するすべてのファイルの合計サイズに適用されることに注意してください。

Lambda ランタイムには、デプロイパッケージ内のファイルを読み取るアクセス許可が必要です。Linux アクセス許可の 8 進表記では、Lambda には実行不可能なファイル (rw-r--r--) には 644 のアクセス許可、ディレクトリと実行可能ファイルには 755 のアクセス許可 (rwxr-xr-x) が必要です。

Linux と MacOS で、デプロイパッケージ内のファイルやディレクトリのファイルアクセス権限を変更するには、chmod コマンドを使用します。例えば、実行可能ファイルに正しいアクセス許可を付与するには、次のコマンドを実行します。

chmod 755 <filepath>

Windows でファイルアクセス許可を変更するには、「Microsoft Windows ドキュメント」の「Set, View, Change, or Remove Permissions on an Object」を参照してください。

コンソールを使用して .zip ファイルの関数を作成、更新する

新しい関数を作成するには、まずコンソールで関数を作成し、次に .zip アーカイブをアップロードする必要があります。既存の関数を更新するには、その関数のページを開き、同じ手順に従って更新した .zip ファイルを追加します。

.zip ファイルが 50 MB 未満の場合は、ローカルマシンから直接ファイルをアップロードして関数を作成または更新できます。50 MB を超える .zip ファイルの場合は、まず  Amazon S3 バケットにパッケージをアップロードする必要があります。AWS Management Console を使用して Amazon S3 バケットにファイルをアップロードする手順については、「Amazon S3 の開始方法」を参照してください。AWS CLI を使用してファイルをアップロードするには、「AWS CLI ユーザーガイド」の「オブジェクトの移動」を参照してください。

注記

既存の関数のデプロイパッケージタイプ (.zip またはコンテナイメージ) を変更することはできません。例えば、コンテナイメージ関数を変換して .zip ファイルアーカイブを使用することはできません。この場合は、新しい関数を作成する必要があります。

新しい関数を作成するには (コンソール)
  1. Lambda コンソールの [関数] ページを開き、[関数の作成] を選択します。

  2. [一から作成] を選択します。

  3. [基本的な情報] で、以下を行います。

    1. [関数名] に、関数名を入力します。

    2. [ランタイム] で、使用するランタイムを選択します。

    3. (オプション) [アーキテクチャ]で、関数の命令セットアーキテクチャを選択します。デフォルトのアーキテクチャは x86_64 です。関数用の .zip デプロイパッケージと選択した命令セットのアーキテクチャに互換性があることを確認してください。

  4. (オプション) [アクセス権限] で、[デフォルトの実行ロールの変更] を展開します。新しい [実行ロール] を作成することも、既存のロールを使用することもできます。

  5. [関数の作成]を選択します。Lambda は、選択したランタイムを使用して基本的な「Hello world」関数を作成します。

ローカルマシンから  zip アーカイブをアップロードするには (コンソール)
  1. Lambda コンソールの [関数ページ] で、.zip ファイルをアップロードする関数を選択します。

  2. [コード] タブを選択します。

  3. [コードソース] ペインで、[アップロード元] をクリックします。

  4. [.zip ファイル] をクリックします。

  5. .zip ファイルをアップロードするには、次の操作を行います。

    1. [アップロード] をクリックし、ファイルセレクターで .zip ファイルを選択します。

    2. [開く] をクリックします。

    3. [保存] をクリックします。

Amazon S3 バケットから .zip アーカイブをアップロードするには (コンソール)
  1. Lambda コンソールの [関数ページ] で、新しい .zip ファイルをアップロードする関数を選択します。

  2. [コード] タブを選択します。

  3. [コードソース] ペインで、[アップロード元] をクリックします。

  4. [Amazon S3 ロケーション] を選択します。

  5. .zip ファイルの Amazon S3 リンク URL を貼り付けて、[保存] を選択します。

コンソールコードエディタを使用して .zip ファイル関数を更新する

.zip デプロイパッケージを使用する一部の関数では、Lambda コンソールの組み込みコードエディタを使用して、関数コードを直接更新できます。この機能を使用するには、関数が次の基準を満たしている必要があります。

  • 関数が、インタープリター言語ランタイムのいずれか (Python、Node.js、Ruby) を使用する必要があります。

  • 関数のデプロイパッケージが 3 MB 未満である必要があります。

コンテナイメージデプロイパッケージを含む関数の関数コードは、コンソールで直接編集することはできません。

コンソールのコードエディタを使用して関数コードを更新するには
  1. Lambda コンソールの「関数ページ」を開き、関数を選択します。

  2. [コード] タブを選択します。

  3. [コードソース] ペインでソースコードファイルを選択し、統合コードエディタで編集します。

  4. コードの編集が終了したら、[デプロイ] を選択して変更を保存し、関数を更新します。

AWS CLI を使用して .zip ファイルで関数を作成、更新する

AWS CLI を使用して新しい関数を作成したり、.zip ファイルを使用して既存の関数を更新したりできます。create-function コマンドと update-function-code コマンドを使用して、.zip パッケージをデプロイします。.zip ファイルが 50 MB 未満の場合は、ローカルビルドマシン上のファイルの場所から .zip パッケージをアップロードできます。サイズの大きいファイルの場合は、Amazon S3 バケットから .zip パッケージをアップロードする必要があります。AWS CLI を使用して Amazon S3 バケットにファイルをアップロードする方法については、「AWS CLI ユーザーガイド」の「オブジェクトの移動」を参照してください。

注記

AWS CLI を使用して Amazon S3 バケットから .zip ファイルをアップロードする場合、このバケットは関数と同じ AWS リージョン に配置する必要があります。

AWS CLI を含む .zip ファイルを使用して新しい関数を作成するには、以下を指定する必要があります。

  • 関数の名前 (--function-name)

  • 関数のランタイム (--runtime)

  • 関数の実行ロール (--role) の Amazon リソースネーム (ARN)

  • 関数コード内のハンドラーメソッド (--handler) の名前

.zip ファイルの場所も指定する必要があります。.zip ファイルがローカルビルドマシン上のフォルダにある場合は、次のコマンド例に示すように、--zip-file オプションを使用してファイルパスを指定します。

aws lambda create-function --function-name myFunction \ --runtime python3.12 --handler lambda_function.lambda_handler \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --zip-file fileb://myFunction.zip

Amazon S3 バケット内の .zip ファイルの場所を指定するには、以下のコマンド例にある --code オプションを使用します。S3ObjectVersion パラメータは、バージョン管理下のオブジェクトにのみ使用する必要があります。

aws lambda create-function --function-name myFunction \ --runtime python3.12 --handler lambda_function.lambda_handler \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --code S3Bucket=myBucketName,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion

CLI を使用して既存の関数を更新するには、--function-name パラメータを使用して関数の名前を指定します。関数コードの更新に使用する .zip ファイルの場所も指定する必要があります。.zip ファイルがローカルビルドマシン上のフォルダにある場合は、次のコマンド例に示すように、--zip-file オプションを使用してファイルパスを指定します。

aws lambda update-function-code --function-name myFunction \ --zip-file fileb://myFunction.zip

Amazon S3 バケット内の .zip ファイルの場所を指定するには、以下のコマンド例にある --s3-bucket および --s3-key オプションを使用します。--s3-object-version パラメータは、バージョン管理下のオブジェクトにのみ使用する必要があります。

aws lambda update-function-code --function-name myFunction \ --s3-bucket myBucketName --s3-key myFileName.zip --s3-object-version myObject Version

Lambda API を使用して .zip ファイルで関数を作成、更新する

.zip ファイルアーカイブを使用して関数を作成および更新するには、以下の API オペレーションを使用します。

AWS SAM を使用して .zip ファイルで関数を作成、更新する

AWS Serverless Application Model (AWS SAM) は、AWS のサーバーレスアプリケーションの構築と実行のプロセスを合理化するのに役立つツールキットです。YAML または JSON テンプレートでアプリケーションのリソースを定義し、AWS SAM コマンドラインインターフェイス (AWS SAM CLI) を使用して、アプリケーションを構築、パッケージ化、デプロイします。AWS SAM テンプレートから Lambda 関数を構築すると、AWS SAM は関数コードと指定した任意の依存関係を含む .zip デプロイパッケージまたはコンテナイメージを自動的に作成します。AWS SAM を使用して Lambda 関数を構築およびデプロイする方法の詳細については、「AWS Serverless Application Model 開発者ガイドの」の「AWS SAM の開始方法」を参照してください。

AWS SAM を使用して、既存の .zip ファイルアーカイブを使用する Lambda 関数を作成できます。AWS SAM を使用して Lambda 関数を作成するには、.zip  ファイルを Amazon S3 バケットまたはビルドマシンのローカルフォルダに保存します。AWS CLI を使用して Amazon S3 バケットにファイルをアップロードする方法については、「AWS CLI ユーザーガイド」の「オブジェクトの移動」を参照してください。

AWS SAM テンプレートでは、Lambda 関数は AWS::Serverless::Function のリソースにより指定されます。このリソースで次のプロパティを設定し、.zip ファイルアーカイブを使用して関数を作成します。

  • PackageTypeZip に設定

  • CodeUri - 関数コードの Amazon S3 URI、ローカルフォルダへのパス、または FunctionCode オブジェクトに設定

  • Runtime - 選択したランタイムに設定

AWS SAM では、.zip ファイルが 50 MB を超える場合、この .zip ファイルを最初に Amazon S3 バケットにアップロードする必要はありません。AWS SAM では、ローカルビルドマシン上の場所から、最大許容サイズ 250 MB (解凍) の .zip パッケージをアップロードできます。

で .zip ファイルを使用して関数をデプロイする方法の詳細についてはAWS SAM、「 AWS SAMデベロッパーガイド」のAWS::Serverless::Function「」を参照してください。

AWS CloudFormation を使用して .zip ファイルで関数を作成、更新する

AWS CloudFormation を使用して、.zip ファイルアーカイブを使用する Lambda 関数を作成できます。.zip ファイルから Lambda 関数を作成するには、最初にファイルを Amazon S3 バケットにアップロードする必要があります。AWS CLI を使用して Amazon S3 バケットにファイルをアップロードする方法については、「AWS CLI ユーザーガイド」の「オブジェクトの移動」を参照してください。

Node.js と Python のランタイムでは、AWS CloudFormation テンプレートにインラインソースコードを提供することもできます。AWS CloudFormation は、関数を構築するときにコードを含む .zip ファイルを作成します。

既存の .zip ファイルを使用する

AWS CloudFormation テンプレートでは、Lambda 関数は AWS::Lambda::Function のリソースにより指定されます。このリソースで次のプロパティを設定し、.zip ファイルアーカイブを使用して関数を作成します。

  • PackageTypeZip に設定

  • CodeS3Bucket および S3Key フィールドに Amazon S3 バケット名と .zip ファイル名を入力

  • Runtime - 選択したランタイムに設定

インラインコードから .zip ファイルを作成する

Python で記述された単純な関数や Node.js インラインを AWS CloudFormation テンプレートで宣言できます。コードは YAML または JSON に埋め込まれているため、デプロイパッケージに外部依存関係を追加することはできません。つまり、関数はランタイムに含まれている AWS SDK のバージョンを使用する必要があります。特定の文字をエスケープする必要があるなどのテンプレートの要件も、IDE の構文チェックやコード補完機能の使用を難しくします。つまり、テンプレートに追加のテストが必要な場合があります。このような制限があるため、関数をインラインで宣言することは、頻繁に変更しない極めて単純なコードに最適です。

Node.js および Python ランタイムのインラインコードから .zip ファイルを作成するには、テンプレートの AWS::Lambda::Function リソースに次のプロパティを設定します。

  • PackageType が Zip に設定されている場合

  • Code - ZipFile フィールドに関数コードを入力します。

  • Runtime - 選択したランタイムに設定

AWS CloudFormation が生成する .zip ファイルは、4 MB を超えることはできません。で .zip ファイルを使用して関数をデプロイする方法の詳細についてはAWS CloudFormation、「 AWS CloudFormationユーザーガイドAWS::Lambda::Function」の「」を参照してください。