

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

# 에서 Lambda 계층 빌드 AWS SAM
<a name="building-layers"></a>



 AWS SAM 를 사용하여 사용자 지정 Lambda 계층을 빌드할 수 있습니다. Lambda 계층을 사용하면 Lambda 함수에서 코드를 추출한 다음 여러 Lambda 함수에서 재사용할 수 있습니다. 전체 애플리케이션을 빌드하는 대신 Lambda 계층만 빌드함으로써 몇 가지 이점을 얻을 수 있습니다. 예를 들어 배포 패키지의 크기를 줄이고, 핵심 함수 로직을 종속성과 분리하며, 여러 함수에서 종속성을 공유할 수 있습니다. 레이어에 대한 자세한 내용을 알아보려면 [AWS 개발자 가이드](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) 내 *AWS Lambda Lambda 레이어*를 확인하십시오.

## 에서 Lambda 계층을 빌드하는 방법 AWS SAM
<a name="w2aac18c23c19c34b7"></a>

**참고**  
Lambda 계층을 빌드하려면 먼저 AWS SAM 템플릿에 Lambda 계층을 작성해야 합니다. 이 작업 수행과 관련된 자세한 내용과 예제는 [에서 Lambda 계층을 사용하여 효율성 향상 AWS SAM](serverless-sam-cli-layers.md) 섹션을 참조하세요.

사용자 지정 계층을 빌드하려면 AWS Serverless Application Model (AWS SAM) 템플릿 파일에 계층을 선언하고 `Metadata` 리소스 속성 섹션을 `BuildMethod` 항목과 함께 포함합니다. `BuildMethod`의 유효한 값은 [AWS Lambda 런타임의](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) 혹은 `makefile`의 식별자입니다. 레이어가 지원하는 명령어 세트 아키텍처를 지정하기 위해 `BuildArchitecture`을 포함하십시오. `BuildArchitecture`의 유효한 값은 [Lambda 명령 세트 아키텍처](https://docs.aws.amazon.com/lambda/latest/dg/foundation-arch.html)입니다.

`makefile`을 지정하는 경우 사용자 지정 makefile을 제공하고 거기에서 레이어의 빌드 명령이 포함된 `build-layer-logical-id` 양식의 빌드 대상을 선언하십시오. makefile은 필요한 경우 레이어를 컴파일하고 워크플로의 후속 단계에 필요한 적절한 위치에 빌드 아티팩트를 복사합니다. makefile의 위치는 레이어 리소스의 `ContentUri` 속성으로 지정되며 `Makefile`라는 이름을 지정해야 합니다.

**참고**  
사용자 지정 계층을 생성할 때는 환경 변수에 AWS Lambda 따라 계층 코드를 찾습니다. Lambda 런타임에는 레이어 코드가 복사되어 들어가는 `/opt` 디렉토리의 경로가 포함됩니다. 사용자 지정 레이어 코드를 찾을 수 있도록 프로젝트의 빌드 아티팩트 폴더 구조가 런타임의 예상 폴더 구조와 일치해야 합니다.  
예를 들어, Python의 경우 귀하의 코드를 `python/` 하위 디렉터리에 배치할 수 있습니다. NodeJS의 경우 코드를 `nodejs/node_modules/` 하위 디렉터리에 배치할 수 있습니다.  
자세한 내용은 [개발자 가이드](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-path)의 레이어에 *AWS Lambda 라이브러리 종속 항목 포함하기*를 참조하세요.

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

```
    Metadata:
      BuildMethod: python3.12
      BuildArchitecture: arm64
```

**참고**  
`Metadata` 리소스 속성 섹션을 포함하지 않으면 계층을 빌드 AWS SAM 하지 않습니다. 대신 그것은 레이어 리소스의 `CodeUri` 속성에 지정된 위치에서 빌드 아티팩트를 복사합니다. 자세한 내용은 [리소스 유형](sam-resource-layerversion.md#sam-layerversion-contenturi)의 `AWS::Serverless::LayerVersion`ContentUri 속성을 참조하세요.

`Metadata` 리소스 속성 섹션을 포함할 때 `sam build` 명령을 사용하여 독립 객체 또는 AWS Lambda 함수의 종속성으로 계층을 빌드할 수 있습니다.
+ ****독립 객체로서.**** 예를 들어 전체 애플리케이션을 빌드하지 않아도 레이어에 대한 코드 변경을 로컬에서 테스트하는 경우에는 레이어 객체만 빌드하는 것이 좋습니다. 레이어를 독립적으로 구축하려면 `sam build layer-logical-id` 명령으로 레이어 리소스를 지정하십시오.
+ **Lambda 함수의 종속 항목으로서.** 동일한 `Layers` 템플릿 파일에 있는 Lambda 함수의 AWS SAM 속성에 레이어의 논리적 ID를 포함시키면 레이어는 해당 Lambda 함수의 종속 항목이 됩니다. 해당 레이어에 `Metadata` 항목이 포함된 `BuildMethod` 리소스 속성 섹션도 포함된 경우 `sam build` 명령으로 전체 애플리케이션을 빌드하거나 `sam build function-logical-id` 명령으로 함수 리소스를 지정하여 레이어를 구축합니다.

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

### 템플릿 예제 1: Python 3.12 런타임 환경에 대한 계층 구축
<a name="building-applications-examples-python"></a>

다음 예제 AWS SAM 템플릿은 Python 3.12 런타임 환경에 대한 계층을 빌드합니다.

```
Resources:
  MyLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      ContentUri: my_layer
      CompatibleRuntimes:
        - python3.12
    Metadata:
      BuildMethod: python3.12   # Required to have AWS SAM build this layer
```

### 템플릿 예제 2: 사용자 지정 makefile을 사용하여 레이어 구축
<a name="building-applications-examples-makefile"></a>

다음 예제 AWS SAM 템플릿은 사용자 지정를 사용하여 계층`makefile`을 빌드합니다.

```
Resources:
  MyLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      ContentUri: my_layer
      CompatibleRuntimes:
        - python3.12
    Metadata:
      BuildMethod: makefile
```

다음`makefile`은 빌드 타겟과 실행될 명령을 포함합니다. 참고로 `ContentUri` 속성은 `my_layer`로 설정되었으므로 makefile은 `my_layer` 하위 디렉토리의 루트에 있어야 하고 파일 이름은 `Makefile`이어야 합니다. 또한 빌드 아티팩트는 `python/` 하위 디렉터리로 복사되므로 AWS Lambda 에서 계층 코드를 찾을 수 있습니다.

```
build-MyLayer:
  mkdir -p "$(ARTIFACTS_DIR)/python"
  cp *.py "$(ARTIFACTS_DIR)/python"
  python -m pip install -r requirements.txt -t "$(ARTIFACTS_DIR)/python"
```

**참고**  
`makefile`이(가) 호출되면 적절한 대상이 트리거되고 아티팩트가 노출된 환경 변수 `$ARTIFACTS_DIR`에 복사되어야 합니다. 자세한 내용은 [GitHub의 aws-lambda-builders](https://github.com/aws/aws-lambda-builders/blob/develop/aws_lambda_builders/workflows/custom_make/DESIGN.md)를 참조하세요.

### sam build 명령어 예시
<a name="building-applications-examples-commands"></a>

다음 `sam build` 명령은 `Metadata` 리소스 속성 섹션을 포함하는 레이어를 구축합니다.

```
# Build the 'layer-logical-id' resource independently
$ sam build layer-logical-id
            
# Build the 'function-logical-id' resource and layers that this function depends on
$ sam build function-logical-id

# Build the entire application, including the layers that any function depends on
$ sam build
```