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

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

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

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

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

  • .zip ファイルのサイズが 50 MB を超える場合は、Amazon Simple Storage Service (Amazon S3) バケットから関数にアップロードすることをお勧めします。

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

    詳細については、AWS Serverless Application Model デベロッパーガイドsam build を参照してください。

  • この関数の命令セットアーキテクチャと互換性を持たせるようにデプロイパッケージを構築する必要があります。

  • Lambda は POSIX ファイルアクセス許可を使用するため、.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 Serverless Application Model(AWS SAM) でデプロイパッケージを構築できます。AWS SAMCLI sam build コマンドを --use-container と共に使用して、デプロイパッケージを作成できます。このオプションでは、Lambda 実行環境と互換性のある Docker イメージ内にデプロイパッケージを構築します。

詳細については、AWS Serverless Application Model デベロッパーガイドsam build を参照してください。

別の方法として、デプロイパッケージは、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 Lambda コンピューティングブログの「AWS で任意の実行可能ファイルを実行する」をご参照ください。