

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

# 를 사용한 기본 빌드 AWS SAM
<a name="serverless-sam-cli-using-build"></a>

서버리스 애플리케이션을 구축하려면 `sam build` 명령을 사용합니다. 또한 이 명령은 애플리케이션 종속성의 구축 아티팩트를 수집하여 로컬 테스트, 패키징, 배포와 같은 다음 단계를 위해 적절한 형식과 위치에 배치합니다.

`requirements.txt`(Python) 또는 `package.json`(Node.js) 같은 매니페스트 파일에서 또는 함수 리소스의 `Layers` 속성을 사용하여 애플리케이션의 종속성을 지정합니다. `Layers` 속성에는 Lambda 함수가 의존하는 [AWS Lambda 계층](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) 리소스 목록이 포함되어 있습니다.

애플리케이션 구축 아티팩트의 형식은 각 함수의 `PackageType` 속성에 따라 달라집니다. 이 속성의 옵션은 다음과 같습니다.
+ **`Zip`** – 애플리케이션 코드와 그 종속 항목을 포함하는 .zip 파일 아카이브입니다. 코드를 .zip 파일 아카이브로 패키징하는 경우 함수의 Lambda 런타임을 지정해야 합니다.
+ **`Image`** - 애플리케이션 코드 및 그 종속 항목에 추가하여 기본 운영 체제, 런타임, 익스텐션 등을 포함하는 컨테이너 이미지입니다.

Lambda 패키지 유형에 대한 자세한 내용은 [개발자 가이드](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html)의 *AWS Lambda Lambda 배포 패키지*를 참조하세요.

**Topics**
+ [.zip 파일 아카이브 만들기](#build-zip-archive)
+ [컨테이너 이미지 구축](#build-container-image)
+ [컨테이너 환경 변수 파일](#serverless-sam-cli-using-container-environment-file)
+ [소스 폴더에서 프로젝트를 빌드하여 빌드 시간 단축](#serverless-sam-cli-using-build-in-source)
+ [예제](#building-applications-examples)
+ [외부에서 함수 빌드 AWS SAM](#building-applications-skip)

## .zip 파일 아카이브 만들기
<a name="build-zip-archive"></a>

서버리스 애플리케이션을 .zip 파일 아카이브로 구축하려면 서버리스 함수에 대해 `PackageType: Zip`을 선언합니다.

AWS SAM 는 지정한 [아키텍처](sam-resource-function.md#sam-function-architectures)에 대한 애플리케이션을 빌드합니다. 아키텍처를 지정하지 않으면 `x86_64` 기본적으로를 AWS SAM 사용합니다.

Lambda 함수가 기본적으로 컴파일된 프로그램이 있는 패키지에 의존하는 경우 `--use-container` 플래그를 사용하십시오. 이 플래그는 Lambda 환경처럼 작동하는 컨테이너에서 함수를 로컬로 컴파일하므로 AWS 클라우드에 배포할 때 올바른 형식입니다.

`--use-container` 옵션을 사용하면는 기본적으로 [Amazon ECR Public](https://docs.aws.amazon.com/AmazonECR/latest/public/what-is-ecr.html)에서 컨테이너 이미지를 AWS SAM 가져옵니다. 다른 리포지토리 또는 특정 버전의 AWS SAM CLI에 대해 컨테이너 이미지를 가져오려면 `--build-image` 옵션을 사용하고 대체 컨테이너 이미지의 URI를 제공할 수 있습니다. 다음은 특정 AWS SAM CLI 버전의 컨테이너 이미지를 사용하여 애플리케이션을 빌드하기 위한 두 가지 예제 명령입니다.

```
# Build a Node.js 20 application using a container image for a specific version of AWS SAM CLI (1.136.0)
sam build --use-container --build-image public.ecr.aws/sam/build-nodejs22.x:1.136.0

# Build a function resource using the Python 3.13 container image from a specific version of AWS SAM CLI (1.136.0)(
sam build --use-container --build-image Function1=public.ecr.aws/sam/build-python3.13:1.136.0
```

.zip 파일 아카이브 애플리케이션을 구축하는 추가 예제는 이 주제 뒷부분의 예제 섹션을 참조하세요.

## 컨테이너 이미지 구축
<a name="build-container-image"></a>

서버리스 애플리케이션을 컨테이너 이미지로 구축하려면 서버리스 함수에 대해 `PackageType: Image`을 선언하십시오. 또한 다음 항목들을 사용하여 `Metadata` 리소스 속성을 선언해야 합니다.

`Dockerfile`  
Lambda 함수와 연결되는 Dockerfile의 이름입니다.

`DockerContext`  
Dockerfile의 위치입니다.

`DockerTag`  
(선택 사항) 구축된 이미지에 적용할 태그.

`DockerBuildArgs`  
구축에 대한 구축 인수입니다.  
 AWS SAMCLI는 `DockerBuildArgs` 인수에 포함된 정보를 삭제하거나 난독화하지 않습니다. 이 섹션을 사용하여 암호나 보안 암호와 같은 민감한 정보를 저장하지 않는 것이 좋습니다.

다음은 예제 `Metadata` 리소스 속성 섹션입니다.

```
    Metadata:
      Dockerfile: Dockerfile
      DockerContext: ./hello_world
      DockerTag: v1
```

`Image` 패키지 유형으로 구성된 샘플 애플리케이션을 다운로드하려면 [자습서:를 사용하여 Hello World 애플리케이션 배포 AWS SAM](serverless-getting-started-hello-world.md) 섹션을 참조하세요. 설치할 패키지 유형을 묻는 메시지가 나타나면 `Image`을 선택합니다.

**참고**  
Dockerfile에서 다중 아키텍처 기본 이미지를 지정하는 경우는 호스트 시스템의 아키텍처에 맞게 컨테이너 이미지를 AWS SAM 빌드합니다. 다른 아키텍처용으로 구축하려면 특정 대상 아키텍처를 사용하는 기본 이미지를 지정하십시오.

## 컨테이너 환경 변수 파일
<a name="serverless-sam-cli-using-container-environment-file"></a>

구축 컨테이너의 환경 변수가 포함된 JSON 파일을 제공하려면 `--container-env-var-file` 인수를 `sam build` 명령과 함께 사용하십시오. 모든 서버리스 리소스에 적용되는 단일 환경 변수를 제공하거나 각 리소스에 대해 서로 다른 환경 변수를 제공할 수 있습니다.

### 형식
<a name="serverless-sam-cli-using-container-environment-file-format"></a>

구축 컨테이너에 환경 변수를 전달하는 형식은 리소스에 제공하는 환경 변수의 개수에 따라 달라집니다.

모든 리소스에 단일 환경 변수를 제공하려면 다음과 같이 `Parameters` 객체를 지정하십시오.

```
{
  "Parameters": {
    "GITHUB_TOKEN": "TOKEN_GLOBAL"
  }
}
```

각 리소스에 서로 다른 환경 변수를 제공하려면 다음과 같이 각 리소스의 객체를 지정하십시오.

```
{
  "MyFunction1": {
    "GITHUB_TOKEN": "TOKEN1"
  },
  "MyFunction2": {
    "GITHUB_TOKEN": "TOKEN2"
  }
}
```

환경 변수를 파일로(예를 들면 `env.json`이라는 이름으로) 저장합니다. 다음 명령은 이 파일을 사용하여 환경 변수를 구축 컨테이너에 전달합니다.

```
sam build --use-container --container-env-var-file env.json
```

### 우선 순위
<a name="serverless-sam-cli-using-container-environment-file-precedence"></a>
+ 특정 리소스에 귀하가 제공하는 환경 변수는 모든 리소스의 단일 환경 변수보다 우선합니다.
+ 명령 행에 제공하는 환경 변수는 한 파일 내 환경 변수보다 우선합니다.

## 소스 폴더에서 프로젝트를 빌드하여 빌드 시간 단축
<a name="serverless-sam-cli-using-build-in-source"></a>

지원되는 런타임과 빌드 메서드의 경우 `--build-in-source` 옵션을 사용하여 소스 폴더에서 직접 프로젝트를 빌드할 수 있습니다. 기본적으로는 소스 코드 및 프로젝트 파일을 복사하는 임시 디렉터리에 AWS SAM CLI 빌드됩니다. `--build-in-source`를 AWS SAM 사용하면가 소스 폴더에 직접 CLI 빌드되므로 임시 디렉터리에 파일을 복사할 필요가 없으므로 빌드 프로세스의 속도가 빨라집니다.

지원되는 런타임 및 빌드 메서드 목록은 `--build-in-source`를 참조하세요.

## 예제
<a name="building-applications-examples"></a>

### 예제 1: .zip 파일 아카이브
<a name="examples-zip-archives"></a>

다음 `sam build` 명령은.zip 파일 아카이브를 구축합니다.

```
# Build all functions and layers, and their dependencies
sam build

# Run the build process inside a Docker container that functions like a Lambda environment
sam build --use-container

# Build a Node.js 20 application using a container image for a specific version of AWS SAM CLI (1.136.0)
sam build --use-container --build-image public.ecr.aws/sam/build-nodejs22.x:1.136.0

# Build a function resource using the Python 3.13 container image from a specific version of AWS SAM CLI (1.136.0)(
sam build --use-container --build-image Function1=public.ecr.aws/sam/build-python3.13:1.136.0

# Build and run your functions locally
sam build && sam local invoke

# For more options
sam build --help
```

### 예제 2: 컨테이너 이미지
<a name="examples-container-image-1"></a>

다음 AWS SAM 템플릿은 컨테이너 이미지로 빌드됩니다.

```
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      ImageConfig:
        Command: ["app.lambda_handler"]
    Metadata:
      Dockerfile: Dockerfile
      DockerContext: ./hello_world
      DockerTag: v1
```

다음은 Dockfile 파일의 예입니다.

```
FROM public.ecr.aws/lambda/python:3.12

COPY app.py requirements.txt ./

RUN python3.12 -m pip install -r requirements.txt

# Overwrite the command by providing a different command directly in the template.
CMD ["app.lambda_handler"]
```

### 예제 3: npm ci
<a name="examples-npm-ci"></a>

Node.js 애플리케이션의 경우 종속물을 설치하기 위하여 `npm ci`대신 `npm install`를 사용할 수 있습니다. `npm ci`을 사용하려면 Lambda 함수의 `UseNpmCi: True` 리소스 속성 내 `BuildProperties` 이하에 `Metadata`를 지정하십시오. `npm ci`을 사용하려면 애플리케이션에 귀하의 Lambda 함수용 `package-lock.json`에 존재하는 `npm-shrinkwrap.json` 또는 `CodeUri` 파일이 있어야 합니다.

다음 예제는 `npm ci`의 실행 시 종속 항목을 설치하기 위해 `sam build`를 사용합니다.

```
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
    Metadata:
      BuildProperties:
        UseNpmCi: True
```

### Python 상위 패키지
<a name="building-applications-python-parent-packages"></a>

Python 애플리케이션의 경우, 빌드 프로세스 중에 패키지 구조를 보존하여 절대 임포트를 활성화할 수 있습니다. 패키지 구조를 보존하려면, Lambda 함수의 `Metadata` 리소스 속성에서 `BuildProperties` 아래에 `ParentPackageMode`을(를) 지정하세요.

다음 예시는 `sam build`을(를) 실행할 때 `app` 패키지 구조를 보존합니다.

```
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello-world/
      Handler: app.main.handler
      Runtime: python3.12
      Architectures:
        - x86_64
    Metadata:
      BuildProperties:
        ParentPackageMode: explicit
        ParentPackages: app
```

이 구성을 사용하면, 코드가 `from .utils import logger`와(과) 같은 상대 임포트 대신 `from app.utils import logger`와(과) 같은 절대 임포트를 사용할 수 있습니다.

## 외부에서 함수 빌드 AWS SAM
<a name="building-applications-skip"></a>

기본적으로를 실행하면가 모든 함수 리소스를 **sam build** AWS SAM 빌드합니다. 그 밖에도 다음과 같은 옵션이 있습니다.
+ **외부의 모든 함수 리소스 빌드 AWS SAM** - 모든 함수 리소스를 수동으로 또는 다른 도구를 통해 빌드하는 경우 **sam build**는 필요하지 않습니다. **sam build**을 건너뛰고 로컬 테스트 수행 또는 애플리케이션 배포와 같은 프로세스의 다음 단계로 이동할 수 있습니다.
+ **외부에서 일부 함수 리소스 빌드 AWS SAM** - 외부에서 다른 함수 리소스를 빌드하는 동안 일부 함수 리소스를 빌드 AWS SAM 하려면 AWS SAM 템플릿에서 이를 지정할 AWS SAM수 있습니다.

### 외부에서 일부 함수 리소스 빌드 AWS SAM
<a name="building-applications-skip-some"></a>

를 사용할 때 함수를 AWS SAM 건너뛰려면 AWS SAM 템플릿에서 다음을 **sam build**구성합니다.

1. 함수에 `SkipBuild: True` 메타데이터 속성을 추가합니다.

1. 구축된 함수 리소스의 경로를 지정합니다.

다음은 `TestFunction`을 건너뛰도록 구성한 예제입니다. 구축된 리소스는 `built-resources/TestFunction.zip`에 있습니다.

```
TestFunction:
  Type: AWS::Serverless::Function
  Properties:
    CodeUri: built-resources/TestFunction.zip
    Handler: TimeHandler::handleRequest
    Runtime: java11
  Metadata:
    SkipBuild: True
```

이제를 실행하면 **sam build** AWS SAM 가 다음을 수행합니다.

1. AWS SAM 는 로 구성된 함수를 건너뜁니다`SkipBuild: True`.

1. AWS SAM 는 다른 모든 함수 리소스를 빌드하고 `.aws-sam` 빌드 디렉터리에 캐시합니다.

1. 건너뛰는 함수의 경우 `.aws-sam` 구축 디렉터리 내 이들의 템플릿이 구축된 함수 리소스의 지정된 경로를 참조하도록 자동으로 업데이트됩니다.

   다음은 `TestFunction` 구축 디렉터리에 있는 `.aws-sam`를 위한 캐시된 템플릿의 예입니다.

   ```
   TestFunction:
     Type: AWS::Serverless::Function
     Properties:
       CodeUri: ../../built-resources/TestFunction.zip
       Handler: TimeHandler::handleRequest
       Runtime: java11
     Metadata:
       SkipBuild: True
   ```