.zip ファイルアーカイブで Node.js Lambda 関数をデプロイする
AWS Lambda 関数のコードは、スクリプトまたはコンパイルされたプログラム、さらにそれらの依存関係で構成されます。デプロイパッケージを使用して、Lambda に関数コードをデプロイします。Lambda は、コンテナイメージと .zip ファイルアーカイブの 2 種類のデプロイパッケージをサポートしています。
.zip ファイルのデプロイパッケージを作成するには、コマンドラインツール用の組み込み .zip ファイルアーカイブユーティリティまたは他の .zip ファイルユーティリティ (7zip
-
.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 関数を更新するには
-
.zip ファイルアーカイブを作成します。
zip function.zip index.js
-
パッケージをアップロードするには、
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
ランタイムに含まれているバージョンよりも新しいバージョンが必要な場合、またはバージョンが今後変更されないようにする場合は、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 関数を更新するには
-
コマンドラインターミナルまたはシェルを開きます。ローカル環境の Node.js バージョンが関数の Node.js バージョンと一致していることを確認します。
-
デプロイパッケージ用のフォルダを作成します。次の手順は、フォルダの名前が
my-function
であることを前提としています。 -
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
-
プロジェクトフォルダの内容を含む .zip ファイルを作成します。
r
(再帰的) オプションを使用して、zip がサブフォルダを確実に圧縮するようにします。zip -r function.zip .
-
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 で任意の実行可能ファイルを実行する