

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 에서 esbuild를 사용하여 Node.js Lambda 함수 빌드 AWS SAM
<a name="serverless-sam-cli-using-build-typescript"></a>

Node.js AWS Lambda 함수를 AWS SAM CLI 빌드하고 패키징하려면 esbuild JavaScript 번들러와 함께를 사용할 수 있습니다. esbuild 번들러는 TypeScript로 작성하는 Lambda 함수를 지원합니다.

esbuild를 사용하여 Node.js Lambda 함수를 빌드하려면 `AWS:Serverless::Function` 리소스에 `Metadata` 객체를 추가하고 `BuildMethod`에 `esbuild`를 지정합니다. **sam build** 명령을 실행하면가 esbuild를 AWS SAM 사용하여 Lambda 함수 코드를 번들링합니다.

## 메타데이터 속성
<a name="serverless-sam-cli-using-build-typescript-metadata"></a>

`Metadata` 객체는 다음 속성을 지원합니다.

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

애플리케이션의 URL 접두사를 지정합니다. 지원되는 유일한 값은 `esbuild`입니다.

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

Lambda 함수 코드의 빌드 속성을 지정합니다.

`BuildProperties` 객체는 다음 속성을 지원합니다. 다른 모든 속성은 선택 사항입니다. 기본적으로는 진입점에 Lambda 함수 핸들러를 AWS SAM 사용합니다.

**EntryPoint**  
애플리케이션의 진입점을 지정합니다.

**외부**  
빌드에서 제외할 패키지 목록을 지정합니다. 자세한 내용은 *esbuild 웹사이트*의 [외부](https://esbuild.github.io/api/#external) 섹션을 참조하세요.

**형식**  
애플리케이션에서 생성된 JavaScript 파일의 출력 형식을 지정합니다. 자세한 내용은 *esbuild 웹 사이트*의 [형식](https://esbuild.github.io/api/#format)을 참조하세요.

**로더**  
지정된 파일 유형의 데이터를 로드하기 위한 구성 목록을 지정합니다.

**MainFields**  
패키지를 확인할 때 가져오려고 시도할 `package.json` 필드를 지정합니다. 기본값은 `main,module`입니다.

**Minify**  
번들링된 출력 코드를 축소할지 여부를 지정합니다. 기본값은 `true`입니다.

**OutExtension**  
esbuild가 생성하는 파일의 파일 확장자를 사용자 지정합니다. 자세한 내용은 *esbuild 웹사이트*의 [확장](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>"
```