.zip ファイルアーカイブで Node.js Lambda 関数をデプロイする - AWS Lambda

.zip ファイルアーカイブで Node.js Lambda 関数をデプロイする

AWS Lambda 関数のコードは、スクリプトまたはコンパイルされたプログラムとそれらの依存関係で構成されます。関数コードを Lambda にデプロイするには、デプロイパッケージを使用します。Lambda は、コンテナイメージと .zip ファイルの、2 種類のデプロイパッケージをサポートしています。

デプロイパッケージを作成するには、コマンドラインツール用の組み込み .zip ファイルアーカイブユーティリティまたは他の .zip ファイルユーティリティ (7zip など) を使用できます。.zip ファイルをデプロイパッケージとして使用するには、次の要件に留意してください。

  • .zip ファイルには、関数のコードと、関数のコード (該当する場合) を Lambda で実行するために使用される依存関係が含まれている必要があります。関数が標準ライブラリまたは AWS SDK ライブラリにのみ依存する場合は、これらのライブラリを .zip ファイルに含める必要はありません。これらのライブラリは、サポートされている Lambda ランタイム環境とともに含まれています。

  • .zip ファイルは 50 MB 未満である必要があります。50 MB より大きい場合は、Amazon Simple Storage Service (Amazon S3) バケットにアップロードすることをお勧めします。

  • .zip ファイルには、C または C++ で記述されたライブラリを含めることはできません。.zip ファイルに Pillow (PIL) や numpy ライブラリなどの C 拡張ライブラリが含まれている場合は、AWS サーバーレスアプリケーションモデル (AWS SAM) コマンドラインインターフェイス (CLI) を使用してデプロイパッケージを構築することをお勧めします。

このセクションでは、デプロイパッケージとして .zip ファイルを作成し、AWS Command Line Interface (AWS CLI) を使用して関数コードを Lambda にデプロイするためにその .zip ファイルを使用する方法について説明します。

前提条件

AWS CLI は、コマンドラインシェルでコマンドを使用して AWS サービスとやり取りするためのオープンソースツールです。このセクションの手順を完了するには、以下が必要です。

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

Lambda API を使用して関数を更新するには、UpdateFunctionCode オペレーションを使用します。関数コードを含むアーカイブを作成し、AWS Command Line Interface (AWS CLI) を使用してアップロードします。

依存関係のない Node.js 関数を更新するには

  1. .zip ファイルアーカイブを作成します。

    zip function.zip index.js
  2. パッケージをアップロードするには、update-function-code コマンドを使用します。

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

    次のような出力が表示されます。

    { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "index.handler", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }

追加の依存関係を使用して関数を更新する

関数が AWS SDK for JavaScript 以外のライブラリに依存している場合は、npm を使用してそれらのライブラリをデプロイパッケージに含めます。ローカル環境の Node.js バージョンが関数の Node.js バージョンと一致していることを確認します。ライブラリのいずれかでネイティブコードを使用している場合は、Amazon Linux 環境を使用してデプロイパッケージを作成します。

ランタイムに含まれているバージョンよりも新しいバージョンが必要な場合、または将来バージョンが変更されないようにするために、SDK for JavaScript をデプロイパッケージに追加できます。

デプロイパッケージにネイティブライブラリが含まれている場合は、AWS サーバーレスアプリケーションモデル(AWS SAM) でデプロイパッケージを構築できます。AWS SAMCLI sam build コマンドを --use-container と共に使用して、デプロイパッケージを作成できます。このオプションは、Lambda 実行環境と互換性のある Docker イメージ内にデプロイパッケージを構築します。

詳細については、AWS サーバーレスアプリケーションモデル 開発者ガイドの「sam ビルド」を参照してください。

別の方法として、Amazon Linux 環境を提供する Amazon EC2 インスタンスを使用してデプロイパッケージを作成できます。手順については、AWS コンピューティングブログの「AWS でパッケージとネイティブ nodejs モジュールを使用する」をご参照ください。

依存関係のある Node.js 関数を更新するには

  1. コマンドラインターミナルまたはシェルを開きます。ローカル環境の Node.js バージョンが関数の Node.js バージョンと一致していることを確認します。

  2. デプロイパッケージ用のフォルダを作成します。次の手順は、フォルダの名前が my-function> であることを前提としています。

  3. npm install コマンドを使用して、ライブラリを node_modules ディレクトリにインストールします。

    npm install aws-xray-sdk

    これにより、次のようなフォルダ構造が作成されます。

    ~/my-function ├── index.js └── node_modules ├── async ├── async-listener ├── atomic-batcher ├── aws-sdk ├── aws-xray-sdk ├── aws-xray-sdk-core
  4. プロジェクトフォルダの内容を含む .zip ファイルを作成します。r (再帰的) オプションを使用して、zip がサブフォルダを確実に圧縮するようにします。

    zip -r function.zip .
  5. update-function-code コマンドを使用してパッケージをアップロードします。

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

    次のような出力が表示されます。

    { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "index.handler", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }

デプロイパッケージには、コードとライブラリに加えて、実行可能ファイルとその他のリソースも含めることができます。詳細については、AWS コンピューティングブログの「AWS Lambda で任意の実行可能ファイルを実行する」をご参照ください。