AWS Lambda
開発者ガイド

Python の AWS Lambda デプロイパッケージ

A deployment package is a ZIP archive that contains your function code and dependencies. You need to create a deployment package if you use the Lambda API to manage functions, or if your code uses libraries other than the AWS SDK. Other libraries and dependencies need to be included in the deployment package. You can upload the package directly to Lambda, or you can use an Amazon S3 bucket, and then upload it to Lambda.

If you use the Lambda console editor to author your function, the console manages the deployment package. You can use this method as long as you don't need to add any libraries. You can also use it to update a function that already has libraries in the deployment package, as long as the total size doesn't exceed 3 MB.

注記

Python 関数コードおよび依存関係のデプロイパッケージを作成するには、AWS SAM CLI の build コマンドを使用します。手順については、『AWS SAM 開発者ガイド』の「依存関係を使用してアプリケーションを構築する」を参照してください。

追加の依存関係がない場合

Lambda API を使用して関数を作成または更新するには、関数コードを含むアーカイブを作成し、AWS CLI を使用してアップロードします。

依存関係のない Python 関数を更新するには

  1. ZIP アーカイブを作成します。

    ~/my-function$ zip function.zip function.py
  2. update-function-code コマンドを使用してパッケージをアップロードします。

    ~/my-function$ aws lambda update-function-code --function-name python37 --zip-file fileb://function.zip { "FunctionName": "python37", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:python37", "Runtime": "python3.7", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSize": 815, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2018-11-20T20:41:16.647+0000", "CodeSha256": "GcZ05oeHoJi61VpQj7vCLPs8DwCXmX5sE/fE2IHsizc=", "Version": "$LATEST", "VpcConfig": { "SubnetIds": [], "SecurityGroupIds": [], "VpcId": "" }, "TracingConfig": { "Mode": "Active" }, "RevisionId": "d1e983e3-ca8e-434b-8dc1-7add83d72ebd" }

追加の依存関係がある場合

関数が SDK for Python (Boto3) 以外のライブラリに依存している場合は、pip を使用してローカルディレクトリにインストールし、デプロイパッケージに含めます。

依存関係のある Python 関数を更新するには

  1. 依存関係のディレクトリを作成します。

    ~/my-function$ mkdir package
  2. --target オプションを指定して、ライブラリをパッケージディレクトリにインストールします。

    ~/my-function$ cd package ~/my-function/package$ pip install Pillow --target . Collecting Pillow Using cached https://files.pythonhosted.org/packages/62/8c/230204b8e968f6db00c765624f51cfd1ecb6aea57b25ba00b240ee3fb0bd/Pillow-5.3.0-cp37-cp37m-manylinux1_x86_64.whl Installing collected packages: Pillow Successfully installed Pillow-5.3.0
  3. ZIP アーカイブを作成します。

    package$ zip -r9 ../function.zip . adding: PIL/ (stored 0%) adding: PIL/.libs/ (stored 0%) adding: PIL/.libs/libfreetype-7ce95de6.so.6.16.1 (deflated 65%) adding: PIL/.libs/libjpeg-3fe7dfc0.so.9.3.0 (deflated 72%) adding: PIL/.libs/liblcms2-a6801db4.so.2.0.8 (deflated 67%) ...
  4. 関数コードをアーカイブに追加します。

    ~/my-function/package$ cd ../ ~/my-function$ zip -g function.zip function.py adding: function.py (deflated 56%)
  5. 関数コードを更新します。

    ~/my-function$ aws lambda update-function-code --function-name python37 --zip-file fileb://function.zip { "FunctionName": "python37", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:python37", "Runtime": "python3.7", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSize": 2269409, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2018-11-20T20:51:35.871+0000", "CodeSha256": "GcZ05oeHoJi61VpQj7vCLPs8DwCXmX5sE/fE2IHsizc=", "Version": "$LATEST", "VpcConfig": { "SubnetIds": [], "SecurityGroupIds": [], "VpcId": "" }, "TracingConfig": { "Mode": "Active" }, "RevisionId": "a9c05ffd-8ad6-4d22-b6cd-d34a00c1702c" }

仮想環境がある場合

場合によっては、仮想環境を使用して関数の依存関係をインストールする必要がある場合があります。たとえば、関数またはその依存関係にネイティブライブラリの依存関係があるか、Homebrew を使用して Python をインストールした場合などです。

仮想環境で Python 関数を更新するには

  1. 仮想環境を作成します。

    ~/my-function$ virtualenv v-env Using base prefix '~/.local/python-3.7.0' New python executable in v-env/bin/python3.7 Also creating executable in v-env/bin/python Installing setuptools, pip, wheel... done.
  2. 環境をアクティブ化します。

    ~/my-function$ source v-env/bin/activate (v-env) ~/my-function$

    Windows コマンドラインの場合、アクティベーションスクリプトは、Scripts ディレクトリにあります。

    > v-env\Scripts\activate.bat
  3. pip でライブラリをインストールします。

    ~/my-function$ pip install Pillow Collecting Pillow Using cached https://files.pythonhosted.org/packages/62/8c/230204b8e968f6db00c765624f51cfd1ecb6aea57b25ba00b240ee3fb0bd/Pillow-5.3.0-cp37-cp37m-manylinux1_x86_64.whl Installing collected packages: Pillow Successfully installed Pillow-5.3.0
  4. 仮想環境を無効化します。

    (v-env)~/my-function$ deactivate
  5. ライブラリの内容で ZIP アーカイブを作成します。

    ~/my-function$ cd v-env/lib/python3.7/site-packages/ ~/my-function/v-env/lib/python3.7/site-packages$ zip -r9 ../../../../function.zip . adding: easy_install.py (deflated 17%) adding: PIL/ (stored 0%) adding: PIL/.libs/ (stored 0%) adding: PIL/.libs/libfreetype-7ce95de6.so.6.16.1 (deflated 65%) adding: PIL/.libs/libjpeg-3fe7dfc0.so.9.3.0 (deflated 72%) ...

    依存関係は、ライブラリに応じて site-packages または dist-packages に表示され、仮想環境の最初のフォルダは lib または lib64 になります。特定のパッケージを見つけるには、pip show コマンドを使用します。

  6. 関数コードをアーカイブに追加します。

    ~/my-function/v-env/lib/python3.7/site-packages$ cd ../../../../ ~/my-function$ zip -g function.zip function.py adding: function.py (deflated 56%)
  7. 関数コードを更新します。

    ~/my-function$ aws lambda update-function-code --function-name python37 --zip-file fileb://function.zip { "FunctionName": "python37", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:python37", "Runtime": "python3.7", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSize": 5912988, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2018-11-20T21:08:26.326+0000", "CodeSha256": "A2P0NUWq1J+LtSbkuP8tm9uNYqs1TAa3M76ptmZCw5g=", "Version": "$LATEST", "VpcConfig": { "SubnetIds": [], "SecurityGroupIds": [], "VpcId": "" }, "TracingConfig": { "Mode": "Active" }, "RevisionId": "5afdc7dc-2fcb-4ca8-8f24-947939ca707f" }