

# .zip ファイルアーカイブで Node.js Lambda 関数をデプロイする
<a name="nodejs-package"></a>

 AWS Lambda 関数のコードは、関数のハンドラーコードと、そのコードが依存するその他のパッケージやモジュールを含む .js または .mjs ファイルで構成されています。この関数コードを Lambda にデプロイするには、*デプロイパッケージ*を使用します。このパッケージは、.zip ファイルアーカイブでもコンテナイメージでもかまいません。Node.js でコンテナイメージを使用する方法の詳細については、「[コンテナイメージで Node.js Lambda 関数をデプロイする](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-image.html)」を参照してください。

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

 Lambda は POSIX ファイルアクセス許可を使用するため、.zip ファイルアーカイブを作成する前に、[デプロイパッケージフォルダのアクセス許可を設定する](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-deployment-package-errors/)ことが必要になる場合があります。

**Topics**
+ [

## Node.js でのランタイム依存関係
](#nodejs-package-dependencies)
+ [

## 依存関係のない .zip デプロイパッケージを作成する
](#nodejs-package-create-no-dependencies)
+ [

## 依存関係を含めて .zip デプロイパッケージを作成する
](#nodejs-package-create-dependencies)
+ [

## 依存関係の Node.js レイヤーを作成する
](#nodejs-package-dependencies-layers)
+ [

## 依存関係検索パスおよびランタイムを含むライブラリ
](#nodejs-package-searchpath)
+ [

## .zip ファイルを使用した Node.js Lambda 関数の作成と更新
](#nodejs-package-create-update)

## Node.js でのランタイム依存関係
<a name="nodejs-package-dependencies"></a>

 Node.js ランタイムを使用する Lambda 関数の場合、依存関係はどの Node.js モジュールでもかまいません。Node.js ランタイムには、多くの共通ライブラリに加えて、あるバージョンの AWS SDK for JavaScript が含まれています。[サポートされているすべての Lambda Node.js ランタイム](lambda-nodejs.md#nodejs-supported-runtimes)には、SDK バージョン 3 が含まれています。SDK バージョン 2 を使用するには、SDK を .zip ファイルのデプロイパッケージに追加する必要があります。使用しているランタイムに含まれている SDK の特定のバージョンを確認するには、「[ランタイムに含まれる SDK バージョン](lambda-nodejs.md#nodejs-sdk-included)」を参照してください。

 Lambda は Node.js ランタイムの SDK ライブラリを定期的に更新して、最新機能とセキュリティアップグレードを適用します。Lambda は、ランタイムに含まれる他のライブラリにもセキュリティパッチとアップデートを適用します。パッケージ内の依存関係を完全に制御するには、ランタイムに含まれる依存関係の任意のバージョンをデプロイパッケージに追加できます。例えば、特定のバージョンの JavaScript 用 SDK を使用する場合は、そのバージョンを依存関係として .zip ファイルに含めることができます。ランタイムに含まれる依存関係を .zip ファイルに追加する方法の詳細については、[依存関係検索パスおよびランタイムを含むライブラリ](#nodejs-package-searchpath) を参照してください。

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

## 依存関係のない .zip デプロイパッケージを作成する
<a name="nodejs-package-create-no-dependencies"></a>

 関数コードに、Lambda ランタイムに含まれるライブラリ以外の依存関係がない場合、.zip ファイルには関数のハンドラーコードを含む `index.js` または `index.mjs` ファイルのみが含まれます。任意の zip ユーティリティを使用して、`index.js` または `index.mjs` ファイルをルートに置く .zip ファイルを作成します。関数のハンドラーコードを含むファイルが .zip ファイルのルートにない場合、Lambda はコードを実行できません。

 .zip ファイルをデプロイして新しい Lambda 関数を作成する方法の詳細、既存の Lambda 関数を更新する方法の詳細については、「[.zip ファイルを使用した Node.js Lambda 関数の作成と更新](#nodejs-package-create-update)」を参照してください。

## 依存関係を含めて .zip デプロイパッケージを作成する
<a name="nodejs-package-create-dependencies"></a>

関数コードが Lambda Node.js ランタイムに含まれていないパッケージやモジュールに依存している場合、これらの依存関係を関数コードとともに .zip ファイルに追加するか、[Lambda レイヤー](chapter-layers.md)を使用できます。このセクションでは、依存関係を .zip デプロイパッケージに含める方法について説明します。依存関係をレイヤーに含める方法については、「[依存関係の Node.js レイヤーを作成する](#nodejs-package-dependencies-layers)」を参照してください。

次の CLI コマンドの例では、関数のハンドラーコードとその依存関係を含む `index.js` または `index.mjs` ファイルを格納する `my_deployment_package.zip` という名前の .zip ファイルを作成します。この例では、npm パッケージマネージャーを使用して依存関係をインストールします。

**デプロイパッケージを作成するには**

1. `index.js` または `index.mjs` ソースコードファイルを含むプロジェクトディレクトリに移動します。この例では、ディレクトリ名は `my_function` です。

   ```
   cd my_function
   ```

1. `npm install` コマンドを使用して、`node_modules` ディレクトリに関数に必要なライブラリをインストールします。この例では、AWS X-Ray SDK for Node.js をインストールします。

   ```
   npm install aws-xray-sdk
   ```

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

   ```
   ~/my_function
   ├── index.mjs
   └── node_modules
       ├── async
       ├── async-listener
       ├── atomic-batcher
       ├── aws-sdk
       ├── aws-xray-sdk
       ├── aws-xray-sdk-core
   ```

   自分で作成したカスタムモジュールをデプロイパッケージに追加することもできます。モジュールの名前を使用して `node_modules` にディレクトリを作成し、そこにカスタムで作成したパッケージを保存します。

1. プロジェクトフォルダの内容を含む .zip ファイルをルートに作成します。`r` (再帰的) オプションを使用して、zip がサブフォルダを確実に圧縮するようにします。

   ```
   zip -r my_deployment_package.zip .
   ```

## 依存関係の Node.js レイヤーを作成する
<a name="nodejs-package-dependencies-layers"></a>

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

関数にレイヤーを追加すると、Lambda はレイヤーのコンテンツをその実行環境の `/opt` ディレクトリに読み込みます。Lambda ランタイムごとに、`PATH` 変数には `/opt` ディレクトリ内の特定のフォルダパスがあらかじめ含まれます。Lambda がレイヤーコンテンツを確実に取得できるようにするには、レイヤーの .zip ファイルの依存関係が次のフォルダパスにある必要があります。
+ `nodejs/node_modules`
+ `nodejs/node18/node_modules (NODE_PATH)`
+ `nodejs/node20/node_modules (NODE_PATH)`
+ `nodejs/node22/node_modules (NODE_PATH)`

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

```
xray-sdk.zip
└ nodejs/node_modules/aws-xray-sdk
```

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

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

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

## 依存関係検索パスおよびランタイムを含むライブラリ
<a name="nodejs-package-searchpath"></a>

Node.js ランタイムには、多くの共通ライブラリに加えて、あるバージョンの AWS SDK for JavaScript が含まれています。ランタイムに含まれるライブラリの別のバージョンを使用する場合は、それを関数にバンドルするか、デプロイパッケージに依存関係として追加することで対応できます。例えば、別のバージョンの SDK を .zip デプロイパッケージに追加して使用できます。関数の [Lambda レイヤー](chapter-layers.md)に含めることもできます。

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

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

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

```
console.log(process.env.NODE_PATH)
```

.zip パッケージ内の個別のフォルダに依存関係を追加することもできます。例えば、カスタムモジュールを .zip パッケージ内の `common` というフォルダに追加できます。.zip パッケージを解凍してマウントすると、このフォルダは `/var/task` ディレクトリ内に配置されます。コード内の.zip デプロイパッケージにあるフォルダの依存関係を使用するには、CJS または ESM のどちらのモジュール解決を使用しているかに応じて、`import { } from` か `const { } = require()` ステートメントを使用します。例えば、次のようになります。

```
import { myModule } from './common'
```

コードを `esbuild`、`rollup` または同様のものでバンドルすると、関数で使用される依存関係が 1 つ以上のファイルにバンドルされます。可能な限り、この方法を使用して依存関係を提供することをお勧めします。デプロイパッケージに依存関係を追加する場合と比較して、コードをバンドルすると I/O 操作が減るため、パフォーマンスが向上します。

## .zip ファイルを使用した Node.js Lambda 関数の作成と更新
<a name="nodejs-package-create-update"></a>

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

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

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

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

```
chmod 644 <filepath>
```

Windows でファイルアクセス許可を変更するには、「Microsoft Windows ドキュメント」の「[Set, View, Change, or Remove Permissions on an Object](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc731667(v=ws.10))」を参照してください。

**注記**  
デプロイパッケージのディレクトリにアクセスするために必要なアクセス許可を Lambda に付与しない場合、Lambda はそれらのディレクトリのアクセス許可を 755 (rwxr-xr-x) に設定します。

### コンソールを使用して .zip ファイルの関数を作成、更新する
<a name="nodejs-package-create-console"></a>

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

 .zip ファイルが 50 MB 未満の場合は、ローカルマシンから直接ファイルをアップロードして関数を作成または更新できます。50 MB を超える .zip ファイルの場合は、まず  Amazon S3 バケットにパッケージをアップロードする必要があります。AWS マネジメントコンソール を使用して Amazon S3 バケットにファイルをアップロードする手順については、「[Amazon S3 の開始方法](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)」を参照してください。AWS CLI を使用してファイルをアップロードするには、「*AWS CLI ユーザーガイド*」の「[オブジェクトの移動](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-managing-objects-move)」を参照してください。

**注記**  
既存の関数の[デプロイパッケージタイプ](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html#lambda-CreateFunction-request-PackageType) (.zip またはコンテナイメージ) を変更することはできません。例えば、既存のコンテナイメージ関数を、.zip ファイルアーカイブを使用するように変換することはできません。この場合は、新しい関数を作成する必要があります。

**新しい関数を作成するには (コンソール)**

1. Lambda コンソールの [[関数]](https://console.aws.amazon.com/lambda/home#/functions) ページを開き、**[関数の作成]** を選択します。

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

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

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

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

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

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

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

**ローカルマシンから  zip アーカイブをアップロードするには (コンソール)**

1. Lambda コンソールの [[関数ページ]](https://console.aws.amazon.com/lambda/home#/functions) で、.zip ファイルをアップロードする関数を選択します。

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

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

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

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

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

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

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

**Amazon S3 バケットから .zip アーカイブをアップロードするには (コンソール)**

1. Lambda コンソールの [[関数ページ]](https://console.aws.amazon.com/lambda/home#/functions) で、新しい .zip ファイルをアップロードする関数を選択します。

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

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

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

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

### コンソールコードエディタを使用して .zip ファイル関数を更新する
<a name="nodejs-package-console-edit"></a>

 .zip デプロイパッケージを使用する一部の関数では、Lambda コンソールの組み込みコードエディタを使用して、関数コードを直接更新できます。この機能を使用するには、関数が次の基準を満たしている必要があります。
+ 関数が、インタープリター言語ランタイムのいずれか (Python、Node.js、Ruby) を使用する必要があります。
+ 関数のデプロイパッケージが 50 MB (解凍時)未満である必要があります。

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

**コンソールのコードエディタを使用して関数コードを更新するには**

1. Lambda コンソールの「[関数ページ](https://console.aws.amazon.com/lambda/home#/functions)」を開き、関数を選択します。

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

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

1. **[DEPLOY]** セクションで、**[デプロイ]** を選択して関数のコードを更新します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

### AWS CLI を使用して .zip ファイルで関数を作成、更新する
<a name="nodejs-package-create-cli"></a>

 [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) を使用して新しい関数を作成したり、.zip ファイルを使用して既存の関数を更新したりできます。[create-function](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html) コマンドと [update-function-code](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html) を使用して、.zip パッケージをデプロイします。.zip ファイルが 50 MB 未満の場合は、ローカルビルドマシン上のファイルの場所から .zip パッケージをアップロードできます。サイズの大きいファイルの場合は、Amazon S3 バケットから .zip パッケージをアップロードする必要があります。AWS CLI を使用して Amazon S3 バケットにファイルをアップロードする方法については、「*AWS CLI ユーザーガイド*」の「[オブジェクトの移動](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-managing-objects-move)」を参照してください。

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

 AWS CLI を含む .zip ファイルを使用して新しい関数を作成するには、以下を指定する必要があります。
+ 関数の名前 (`--function-name`)
+ 関数のランタイム (`--runtime`)
+ 関数の[実行ロール](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) (`--role`) の Amazon リソースネーム (ARN)
+ 関数コード内のハンドラーメソッド (`--handler`) の名前

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

```
aws lambda create-function --function-name myFunction \
--runtime nodejs24.x --handler index.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 nodejs24.x --handler index.handler \
--role arn:aws:iam::111122223333:role/service-role/my-lambda-role \
--code S3Bucket=amzn-s3-demo-bucket,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 amzn-s3-demo-bucket --s3-key myFileName.zip --s3-object-version myObject Version
```

### Lambda API を使用して .zip ファイルで関数を作成、更新する
<a name="nodejs-package-create-api"></a>

 .zip ファイルアーカイブを使用して関数を作成および更新するには、以下の API オペレーションを使用します。
+ [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html)
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)

### AWS SAM を使用して .zip ファイルで関数を作成、更新する
<a name="nodejs-package-create-sam"></a>

 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 デベロッパーガイド*」の「[Getting started with AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started.html)」を参照してください。

AWS SAM を使用して、既存の .zip ファイルアーカイブを使用する Lambda 関数を作成できます。AWS SAM を使用して Lambda 関数を作成するには、.zip  ファイルを Amazon S3 バケットまたはビルドマシンのローカルフォルダに保存します。AWS CLI を使用して Amazon S3 バケットにファイルをアップロードする方法については、「*AWS CLI ユーザーガイド*」の「[オブジェクトの移動](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-managing-objects-move)」を参照してください。

 AWS SAM テンプレートでは、Lambda 関数は `AWS::Serverless::Function` のリソースにより指定されます。このリソースで次のプロパティを設定し、.zip ファイルアーカイブを使用して関数を作成します。
+ `PackageType` - `Zip` に設定
+ `CodeUri` - 関数コードの Amazon S3 URI、ローカルフォルダへのパス、または [FunctionCode](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-function-functioncode.html) オブジェクトに設定
+ `Runtime` - 選択したランタイムに設定

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

 AWS SAM で .zip ファイルを使用して関数をデプロイする方法の詳細については、「*AWS SAM デベロッパーガイド*」の「[AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html)」を参照してください。

### CloudFormation を使用して .zip ファイルで関数を作成、更新する
<a name="nodejs-package-create-cfn"></a>

 CloudFormation を使用して、.zip ファイルアーカイブを使用する Lambda 関数を作成できます。.zip ファイルから Lambda 関数を作成するには、最初にファイルを Amazon S3 バケットにアップロードする必要があります。AWS CLI を使用して Amazon S3 バケットにファイルをアップロードする方法については、「*AWS CLI ユーザーガイド*」の「[オブジェクトの移動](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-managing-objects-move)」を参照してください。

CloudFormation テンプレートでは、Lambda 関数は `AWS::Lambda::Function` のリソースにより指定されます。このリソースで次のプロパティを設定し、.zip ファイルアーカイブを使用して関数を作成します。
+ `PackageType` - `Zip` に設定
+ `Code` - `S3Bucket` および `S3Key` フィールドに Amazon S3 バケット名と .zip ファイル名を入力
+ `Runtime` - 選択したランタイムに設定

 CloudFormation が生成する .zip ファイルは、4 MB を超えることはできません。CloudFormation で .zip ファイルを使用して関数をデプロイする方法の詳細については、「*CloudFormation ユーザーガイド*」の「[AWS::Lambda::Function](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html)」を参照してください。