

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# で esbuild を使用して Node.js Lambda 関数を構築する AWS SAM
<a name="serverless-sam-cli-using-build-typescript"></a>

Node.js AWS Lambda 関数を構築してパッケージ化するには、esbuild AWS SAM CLIJavaScript バンドルャで を使用できます。esbuild バンドラーは TypeScript で記述されて Lambda 関数をサポートします。

esbuild を使用して Node.js Lambda 関数を構築するには、`AWS:Serverless::Function` リソースに `Metadata` オブジェクトを追加し、`BuildMethod` に `esbuild` を指定します。**sam build** コマンドを実行すると、 は esbuild AWS SAM を使用して Lambda 関数コードをバンドルします。

## Metadata プロパティ
<a name="serverless-sam-cli-using-build-typescript-metadata"></a>

`Metadata` オブジェクトは esbuild の以下のプロパティをサポートします。

### BuildMethod
<a name="serverless-sam-cli-using-build-typescript-metadata-buildmethod"></a>

アプリケーションのバンドルを指定します。`esbuild` はサポートされる唯一の値です。

### BuildProperties
<a name="serverless-sam-cli-using-build-typescript-metadata-buildproperties"></a>

Lambda 関数コードの構築プロパティを指定します。

`BuildProperties` オブジェクトは esbuild の以下のプロパティをサポートします。プロパティはすべてオプションです。デフォルトでは、 はエントリポイントに Lambda 関数ハンドラー AWS SAM を使用します。

**EntryPoint**  
アプリケーションのエントリポイントを指定します。

**外部**  
構築から除外するパッケージのリストを指定します。詳細については、esbuild ウェブサイトの「[External](https://esbuild.github.io/api/#external)」を参照してください。

**形式**  
アプリケーションで生成される JavaScript ファイルの出力形式を指定します。詳細については、*esbuild ウェブサイト*で「[Format](https://esbuild.github.io/api/#format)」を参照してください。

**[ローダー]**  
特定のファイルタイプのデータをロードするための設定のリストを指定します。

**MainFields**  
パッケージを解決する際にインポートを試行する `package.json` フィールドを指定します。デフォルト値は `main,module` です。

**Minify**  
バンドルされた出力コードを縮小するかどうかを指定します。デフォルト値は `true` です。

**OutExtension**  
esbuild が生成するファイルのファイル拡張子をカスタマイズします。詳細については、*esbuild ウェブサイト*で「[Out extension](https://esbuild.github.io/api/#out-extension)」を参照してください。

**Sourcemap**  
バンドラーでソースマップファイルを生成するかどうかを指定します。デフォルト値は `false` です。  
`true` に設定すると、`NODE_OPTIONS: --enable-source-maps` が Lambda 関数の環境変数に追加され、ソースマップが生成されて関数に含まれます。  
また、`NODE_OPTIONS: --enable-source-maps` が関数の環境変数に含まれると、`Sourcemap` が自動的に `true` に設定されます。  
競合する場合、`Sourcemap: false` は `NODE_OPTIONS: --enable-source-maps` より優先されます。  
デフォルトでは、Lambda は保存中のすべての環境変数を AWS Key Management Service (AWS KMS) で暗号化します。デプロイを正常に行うには、ソースマップを使用するとき、関数の実行ロールに `kms:Encrypt` アクションを実行するアクセス許可が必要です。

**SourcesContent**  
ソースマップファイルにソースコードを含めるかどうかを指定します。`Sourcemap` が `'true'` に設定されている場合、このプロパティを設定します。  
+ すべてのソースコードを含めるには `SourcesContent: 'true'` を指定します。
+ すべてのソースコードを除外するには `SourcesContent: 'false'` を指定します。これにより、ソースマップのファイルサイズが小さくなり、起動時間が短縮されるため本番環境で役立ちます。ただし、ソースコードはデバッガーでは使用できません。
デフォルト値は `SourcesContent: true` です。  
詳細については、*esbuild ウェブサイト*で「[ソースコンテンツ](https://esbuild.github.io/api/#sources-content)」を参照してください。

**ターゲット**  
ターゲットの ECMAScript バージョンを指定します。デフォルト値は `es2020` です。

## TypeScript Lambda 関数の例
<a name="serverless-sam-cli-using-build-typescript-example"></a>

次の AWS SAM テンプレートスニペット例では、esbuild を使用して、 の TypeScript コードから Node.js Lambda 関数を作成します`hello-world/app.ts`。

```
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello-world/
      Handler: app.handler
      Runtime: nodejs20.x
      Architectures:
        - x86_64
      Events:
        HelloWorld:
          Type: Api 
          Properties:
            Path: /hello
            Method: get
      Environment:
        Variables:
          NODE_OPTIONS: --enable-source-maps
    Metadata:
      BuildMethod: esbuild
      BuildProperties:
        Format: esm
        Minify: false
        OutExtension:
          - .js=.mjs
        Target: "es2020"
        Sourcemap: true
        EntryPoints: 
          - app.ts
        External:
          - "<package-to-exclude>"
```