

# 계층으로 Lambda 종속성 관리
<a name="chapter-layers"></a>

Lambda 계층은 추가 코드 또는 데이터를 포함하는 .zip 파일 아카이브입니다. 계층에는 일반적으로 라이브러리 종속 항목, [사용자 지정 런타임](runtimes-custom.md) 또는 구성 파일이 포함됩니다.

계층 사용을 고려하는 데에는 여러 가지 이유가 있습니다.
+ **배포 패키지의 크기를 줄이기 위해.** 모든 함수 종속 항목을 함수 코드와 함께 배포 패키지에 포함하는 대신 계층에 배치합니다. 이렇게 하면 배포 패키지가 작고 체계적으로 유지됩니다.
+ **핵심 함수 로직을 종속 항목과 분리하기 위해.** 계층을 사용하면 함수 코드와 독립적으로 함수 종속 항목을 업데이트할 수 있으며 그 반대의 경우도 마찬가지입니다. 이렇게 하면 관심사를 분리하고 함수 로직에 집중할 수 있습니다.
+ **여러 함수에서 종속 항목을 공유하기 위해.** 계층을 생성한 후 계정의 여러 함수에 적용할 수 있습니다. 계층이 없으면 각 개별 배포 패키지에 동일한 종속 항목을 포함해야 합니다.
+ **Lambda 콘솔 코드 편집기를 사용하기 위해.** 코드 편집기는 함수 코드의 부분 업데이트를 빠르게 테스트하는 데 유용한 도구입니다. 그러나 배포 패키지 크기가 너무 큰 경우 편집기를 사용할 수 없습니다. 계층을 사용하면 패키지 크기가 줄어들고 코드 편집기를 사용할 수 있습니다.
+ **임베드된 SDK 버전을 잠그기 위해.**임베드된 SDK는 AWS에서 새로운 서비스 및 기능을 출시함에 따라 예고 없이 변경될 수 있습니다. 필요한 특정 버전으로 [Lambda 계층을 생성](#chapter-layers)하여 SDK 버전을 잠글 수 있습니다. 이후 함수는 서비스에 임베드된 버전이 변경되더라도 항상 계층의 버전을 사용합니다.

Go 또는 Rust에서 Lambda 함수를 사용하는 경우 계층을 사용하지 않는 것이 좋습니다. Go 및 Rust 함수의 경우 컴파일된 함수 코드와 모든 종속성을 포함하는 실행 파일로 함수 코드를 제공합니다. 종속 항목을 계층에 추가하면 함수가 초기화 단계에서 수동으로 추가 어셈블리를 로드해야 하기 때문에 콜드 시간이 늘어날 수 있습니다. Go 및 Rust 함수의 성능을 최적화하려면 배포 패키지와 함께 종속 항목을 포함하세요.

다음 다이어그램에서는 종속 항목을 공유하는 두 함수 간의 중요 아키텍처 차이를  보여줍니다. 하나는 Lambda 계층을 사용하고 다른 하나는 사용하지 않습니다.

![\[\]](http://docs.aws.amazon.com/ko_kr/lambda/latest/dg/images/lambda-layers-diagram.png)


함수에 계층을 추가하면 Lambda는 계층 콘텐츠를 함수 [실행 환경](lambda-runtime-environment.md)의 `/opt` 디렉터리로 추출합니다. 기본적으로 지원되는 모든 Lambda 런타임에는 `/opt` 디렉터리 내의 특정 디렉터리에 대한 경로가 포함되어 있습니다. 이를 통해 함수가 계층 콘텐츠에 액세스할 수 있습니다. 이러한 특정 경로와 계층을 올바르게 패키징하는 방법에 대한 자세한 내용은 [계층 콘텐츠 패키징](packaging-layers.md) 섹션을 참조하세요.

함수당 최대 5개의 계층을 포함할 수 있습니다. 또한 [.zip 파일 아카이브로 배포된](configuration-function-zip.md) Lambda 함수에서만 계층을 사용할 수 있습니다. [컨테이너 이미지로 정의된](images-create.md) 함수의 경우 컨테이너 이미지를 생성할 때 기본 런타임 및 모든 코드 종속 항목을 패키징합니다. 자세한 내용은 AWS 컴퓨팅 블로그에서 [컨테이너 이미지의 Lambda 계층 및 익스텐션 작업](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/)을 참조하세요.

**Topics**
+ [

## 계층 사용 방법
](#lambda-layers-overview)
+ [

## 계층 및 계층 버전
](#lambda-layer-versions)
+ [

# 계층 콘텐츠 패키징
](packaging-layers.md)
+ [

# Lambda에서 계층 생성 및 삭제
](creating-deleting-layers.md)
+ [

# 함수에 계층 추가
](adding-layers.md)
+ [

# 계층으로 AWS CloudFormation 작업
](layers-cfn.md)
+ [

# 계층으로 AWS SAM 작업
](layers-sam.md)

## 계층 사용 방법
<a name="lambda-layers-overview"></a>

계층을 생성하려면 [일반 배포 패키지를 생성](configuration-function-zip.md)하는 방법과 유사하게 종속 항목을 .zip 파일로 패키징합니다. 보다 구체적으로, 계층을 생성하고 사용하는 일반적인 프로세스에는 다음 세 단계가 포함됩니다.
+ **먼저 계층 콘텐츠를 패키징합니다.** 즉, .zip 파일 아카이브를 생성합니다. 자세한 내용은 [계층 콘텐츠 패키징](packaging-layers.md) 섹션을 참조하세요.
+ **다음으로 Lambda에서 계층을 생성합니다.** 자세한 내용은 [Lambda에서 계층 생성 및 삭제](creating-deleting-layers.md) 섹션을 참조하세요.
+ **함수에 계층을 추가합니다.** 자세한 내용은 [함수에 계층 추가](adding-layers.md) 섹션을 참조하세요.

## 계층 및 계층 버전
<a name="lambda-layer-versions"></a>

계층 버전은 특정 계층 버전의 변경 불가능한 스냅샷입니다. 새 계층을 생성하면 Lambda는 버전 번호가 1인 새 계층 버전을 생성합니다. 계층에 업데이트를 게시할 때마다 Lambda는 버전 번호를 늘리고 새 계층 버전을 생성합니다.

모든 계층 버전은 고유한 Amazon 리소스 이름(ARN)으로 식별됩니다. 함수에 계층을 추가할 때 사용하려는 정확한 계층 버전(예: `arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1`)을 지정해야 합니다.

# 계층 콘텐츠 패키징
<a name="packaging-layers"></a>

Lambda 계층은 추가 코드 또는 데이터를 포함하는 .zip 파일 아카이브입니다. 계층에는 일반적으로 라이브러리 종속 항목, [사용자 지정 런타임](runtimes-custom.md) 또는 구성 파일이 포함됩니다.

이 섹션에서는 계층 콘텐츠를 올바르게 패키징하는 방법을 설명합니다. 계층에 대한 개념 정보와 계층 사용을 고려하는 이유에 대한 자세한 내용은 [계층으로 Lambda 종속성 관리](chapter-layers.md) 섹션을 참조하세요.

계층을 생성하는 첫 번째 단계는 모든 계층 콘텐츠를.zip 파일 아카이브로 번들링하는 것입니다. Lambda 함수는 [Amazon Linux](https://docs.aws.amazon.com/linux/al2023/ug/what-is-amazon-linux.html)에서 실행되기 때문에 계층 콘텐츠는 Linux 환경에서 컴파일하고 빌드할 수 있어야 합니다.

Linux 환경에서 계층 콘텐츠가 제대로 작동하도록 하려면 [Docker](https://docs.docker.com/get-docker)와 같은 도구를 사용하여 계층 콘텐츠를 생성하는 것이 좋습니다.

**Topics**
+ [

## 각 Lambda 런타임에 대한 계층 경로
](#packaging-layers-paths)

## 각 Lambda 런타임에 대한 계층 경로
<a name="packaging-layers-paths"></a>

함수에 계층을 추가하면 Lambda는 계층 콘텐츠를 해당 실행 환경의 `/opt` 디렉터리로 추출합니다. 각 Lambda 런타임에 대해 `PATH` 변수에는 `/opt` 디렉터리 내의 특정 폴더 경로가 이미 포함되어 있습니다. Lambda가 계층 콘텐츠를 가져오도록 하려면 계층 .zip 파일의 종속성이 다음 폴더 경로 중 하나에 있어야 합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/lambda/latest/dg/packaging-layers.html)

다음 예제는 계층 .zip 아카이브에 폴더를 구성하는 방법을 보여줍니다.

------
#### [ Node.js ]

**Example Node.js 용 AWS X-Ray SDK 파일 구조**  

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

------
#### [ Python ]

**Example**  

```
python/              # Required top-level directory
└── requests/
└── boto3/
└── numpy/
└── (dependencies of the other packages)
```

------
#### [ Ruby ]

**Example JSON gem에 대한 파일 구조**  

```
json.zip
└ ruby/gems/3.4.0/
               | build_info
               | cache
               | doc
               | extensions
               | gems
               | └ json-2.1.0
               └ specifications
                 └ json-2.1.0.gemspec
```

------
#### [ Java ]

**Example Jackson JAR 파일의 파일 구조**  

```
layer_content.zip
└ java
    └ lib
        └ jackson-core-2.17.0.jar
        └ <other potential dependencies>
        └ ...
```

------
#### [ All ]

**Example jq 라이브러리의 파일 구조**  

```
jq.zip
└ bin/jq
```

------

계층 패키징, 생성, 추가에 대한 언어별 지침은 다음 페이지를 참조하세요.
+ **Node.js** – [Node.js Lambda 함수를 위한 계층 작업](nodejs-layers.md)
+ **Python** – [Python Lambda 함수를 위한 계층 작업](python-layers.md)
+ **Ruby** – [Ruby Lambda 함수를 위한 계층 작업](ruby-layers.md)
+ **Java** – [Java Lambda 함수를 위한 계층 작업](java-layers.md)

Go 및 Rust로 작성된 Lambda 함수의 종속성을 관리하는 데는 계층을 **사용하지 않는 것**이 좋습니다. 이는 이러한 언어로 작성된 Lambda 함수가 단일 실행 파일로 컴파일되어 함수를 배포할 때 Lambda에 제공하기 때문입니다. 이 실행 파일에는 컴파일된 함수 코드와 모든 종속성이 포함되어 있습니다. 계층을 사용하면 이 프로세스가 복잡해질 뿐만 아니라 함수가 초기화 단계에서 추가 어셈블리를 메모리에 수동으로 로드해야 하기 때문에 콜드 스타트 시간이 늘어납니다.

Go 및 Rust Lambda 함수와 함께 외부 종속성을 사용하려면 배포 패키지에 외부 종속성을 직접 포함하세요.

# Lambda에서 계층 생성 및 삭제
<a name="creating-deleting-layers"></a>

Lambda 계층은 추가 코드 또는 데이터를 포함하는 .zip 파일 아카이브입니다. 계층에는 일반적으로 라이브러리 종속 항목, [사용자 지정 런타임](runtimes-custom.md) 또는 구성 파일이 포함됩니다.

이 섹션에서는 Lambda에서 계층을 생성하고 삭제하는 방법을 설명합니다. 계층에 대한 개념 정보와 계층 사용을 고려하는 이유에 대한 자세한 내용은 [계층으로 Lambda 종속성 관리](chapter-layers.md) 섹션을 참조하세요.

[계층 콘텐츠를 패키징](packaging-layers.md)한 후 다음 단계는 Lambda에서 계층을 생성하는 것입니다 이 섹션에서는 Lambda 콘솔 또는 Lambda API만 사용하여 계층을 생성하고 삭제하는 방법을 보여줍니다. AWS CloudFormation을 사용하여 계층을 생성하려면 [계층으로 AWS CloudFormation 작업](layers-cfn.md) 섹션을 참조하세요. AWS Serverless Application Model(AWS SAM)을 사용하여 계층을 생성하려면 [계층으로 AWS SAM 작업](layers-sam.md) 섹션을 참조하세요.

**Topics**
+ [

## 계층 생성
](#layers-create)
+ [

## 계층 버전 삭제
](#layers-delete)

## 계층 생성
<a name="layers-create"></a>

계층을 생성하려면 로컬 시스템이나 Amazon Simple Storage Service(S3)에서 계층으로 .zip 파일 아카이브를 업로드합니다. Lambda는 함수에 대한 실행 환경을 설정할 때 계층 콘텐츠를 `/opt` 디렉토리에 추출합니다.

계층에는 하나 이상의 [계층 버전](chapter-layers.md#lambda-layer-versions)이 있을 수 있습니다. 계층을 작성할 때 Lambda에서 계층 버전을 버전 1로 설정합니다. 언제든지 기존 계층 버전에 대한 권한을 변경할 수 있습니다. 그러나 코드를 업데이트하거나 다른 구성을 변경하려면 계층의 새 버전을 생성해야 합니다.

**계층을 생성하려면(콘솔)**

1. Lambda 콘솔의 [계층 페이지](https://console.aws.amazon.com/lambda/home#/layers)를 엽니다.

1. **계층 생성**을 선택합니다.

1. [**계층 구성(Layer configuration)**]에서 [**이름(Name)**]에 계층 이름을 입력합니다.

1. (선택 사항) **설명**에 계층에 대한 설명을 입력합니다.

1. 계층 코드를 업로드하려면 다음 중 하나를 수행하세요.
   + 컴퓨터에서 .zip 파일을 업로드하려면 [**zip 파일 업로드(Upload a .zip file)**]를 선택합니다. 그리고 [**업로드(Upload)**]를 선택하여 로컬 .zip 파일을 선택합니다.
   + Amazon S3에서 파일을 업로드하려면 **Amazon S3에서 파일 업로드(Upload a file from Amazon S3)**를 선택합니다. 그런 다음 **Amazon S3 링크 URL**에 파일 링크를 입력합니다.

1. (선택 사항) **호환 아키텍처**에서 값을 하나 또는 둘 다 선택합니다. 자세한 내용은 [Lambda 함수에 대한 명령 세트 아키텍처의 선택 및 구성](foundation-arch.md) 섹션을 참조하세요.

1. (선택 사항) **호환 런타임**에서 계층과 호환되는 런타임을 선택합니다.

1. (선택 사항) **라이선스**의 경우 필요한 라이선스 정보를 입력합니다.

1. **생성(Create)**을 선택합니다.

또는 [publish-layer-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/publish-layer-version.html) AWS Command Line Interface(CLI) 명령을 실행할 수 있습니다. 예제:

```
aws lambda publish-layer-version --layer-name my-layer --zip-file fileb://layer.zip --compatible-runtimes python3.14
```

`publish-layer-version`을 실행할 때마다 Lambda는 새 [버전의 계층](chapter-layers.md#lambda-layer-versions)을 생성합니다.

## 계층 버전 삭제
<a name="layers-delete"></a>

계층 버전을 삭제하려면 [DeleteLayerVersion](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteLayerVersion.html) API 작업을 사용합니다. 예를 들어, 계층 이름과 계층 버전을 지정하여 [delete-layer-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/delete-layer-version.html) AWS CLI 명령을 실행합니다.

```
aws lambda delete-layer-version --layer-name my-layer --version-number 1
```

계층 버전을 삭제하면 이를 사용하기 위한 Lambda 함수를 더 이상 구성할 수 없습니다. 그러나 해당 버전을 이미 사용 중인 모든 함수는 이 버전에 계속 액세스할 수 있습니다. 또한 Lambda는 계층 이름에 버전 번호를 재사용하지 않습니다.

[할당량](gettingstarted-limits.md)을 계산할 때, 계층 버전을 삭제하면 해당 버전은 더 이상 함수 및 계층 저장에 대한 기본 75GB 할당량에 포함되지 않습니다. 그러나 삭제된 계층 버전을 사용하는 함수의 경우 계층 콘텐츠는 여전히 해당 함수의 배포 패키지 크기 할당량(즉, .zip 파일 아카이브를 위한 250MB)에 포함됩니다.

# 함수에 계층 추가
<a name="adding-layers"></a>

Lambda 계층은 추가 코드 또는 데이터를 포함하는 .zip 파일 아카이브입니다. 계층에는 일반적으로 라이브러리 종속 항목, [사용자 지정 런타임](runtimes-custom.md) 또는 구성 파일이 포함됩니다.

이 섹션에서는 Lambda 함수에 계층을 추가하는 방법을 설명합니다. 계층에 대한 개념 정보와 계층 사용을 고려하는 이유에 대한 자세한 내용은 [계층으로 Lambda 종속성 관리](chapter-layers.md) 섹션을 참조하세요.

계층을 사용하도록 Lambda 함수를 구성하려면 먼저 다음을 수행해야 합니다.
+ [계층 콘텐츠 패키징](packaging-layers.md)
+ [Lambda에서 계층 생성](creating-deleting-layers.md)
+ 계층 버전에 대해 [GetLayerVersion](https://docs.aws.amazon.com/lambda/latest/api/API_GetLayerVersion.html) API를 직접적으로 호출할 권한이 있는지 확인합니다. AWS 계정의 함수인 경우 [사용자 정책](access-control-identity-based.md)에 이 권한이 있어야 합니다. 다른 계정에서 계층을 사용하려면 해당 계정의 소유자가 [리소스 기반 정책](access-control-resource-based.md)에서 계정 권한을 부여해야 합니다. 예제는 [Lambda 계층에 다른 계정에 대한 액세스 권한 부여](permissions-layer-cross-account.md)을 참조하세요.

Lambda 함수에 최대 5개의 계층을 추가할 수 있습니다. 함수 및 모든 계층의 압축되지 않은 총 크기는 압축 해제된 배포 패키지 크기 할당량인 250MB를 초과할 수 없습니다. 자세한 내용은 [Lambda 할당량](gettingstarted-limits.md) 섹션을 참조하세요.

함수는 이미 추가한 모든 계층 버전을 계속 사용할 수 있습니다. 이는 해당 계층 버전이 삭제되거나 계층 액세스 권한이 취소된 후에도 마찬가지입니다. 그러나 삭제된 계층 버전을 사용하는 새 함수는 작성할 수 없습니다.

**함수에 계층을 추가하려면 다음을 수행하세요.**

1. Lambda 콘솔의 [함수 페이지](https://console.aws.amazon.com/lambda/home#/functions)를 엽니다.

1. 함수를 선택합니다.

1. 아래로 스크롤하여 **계층** 섹션으로 이동하고 **계층 추가**를 선택하세요.

1. **계층 선택**에서 계층 소스를 선택합니다.

   1. **AWS 계층**: [AWS 관리형 확장](extensions-api-partners.md#aws-managed-extensions) 목록에서 선택합니다.

   1. **사용자 지정 계층**: AWS 계정에서 생성된 계층을 선택합니다.

   1. **ARN 지정**: [타사 확장](extensions-api-partners.md) 등의 [다른 AWS 계정](permissions-layer-cross-account.md)의 계층을 사용하려면 Amazon 리소스 이름(ARN)을 입력합니다.

1. **추가**를 선택합니다.

계층을 추가하는 순서에 따라 나중에 Lambda가 계층 콘텐츠를 실행 환경에 병합하는 순서가 결정됩니다. 콘솔을 사용하여 계층 병합 순서를 변경할 수 있습니다.

**함수의 계층 병합 순서 업데이트(콘솔)**

1. Lambda 콘솔의 [함수 페이지](https://console.aws.amazon.com/lambda/home#/functions)를 엽니다.

1. 구성할 함수를 선택합니다.

1. [**계층(Layers)**]에서 [**편집(Edit)**]을 선택합니다.

1. 계층 중 하나를 선택합니다.

1. [**앞에 병합(Merge earlier)**] 또는 [**뒤에 병합(Merge later)**]을 선택하여 계층의 순서를 조정합니다.

1. **저장**을 선택합니다.

계층의 버전이 지정됩니다. 각 계층 버전의 콘텐츠는 변경할 수 없습니다. 계층의 소유자는 새 계층 버전을 릴리스하여 업데이트된 콘텐츠를 제공할 수 있습니다. 콘솔을 사용하여 함수에 연결된 계층 버전을 업데이트할 수 있습니다.

**함수의 계층 버전 업데이트(콘솔)**

1. Lambda 콘솔의 [계층 페이지](https://console.aws.amazon.com/lambda/home#/layers)를 엽니다.

1. 버전을 업데이트하려는 계층을 선택합니다.

1. **이 버전을 사용하는 함수** 탭을 선택합니다.

1. 수정하려는 함수를 선택하고 **편집**을 선택합니다.

1. **계층 버전**에서 변경할 계층 버전을 선택합니다.

1. **함수 업데이트(Update functions)**를 선택합니다.

여러 AWS 계정에 걸쳐 함수의 계층 버전을 업데이트할 수 없습니다.

## 계층 정보 찾기
<a name="finding-layer-information"></a>

계정에서 함수의 런타임과 호환되는 계층을 찾으려면 [ListLayers](https://docs.aws.amazon.com/lambda/latest/api/API_ListLayers.html) API를 사용하세요. 예를 들어, 다음 [list-layers](https://docs.aws.amazon.com/cli/latest/reference/lambda/list-layers.html) AWS Command Line Interface(CLI) 명령을 사용할 수 있습니다.

```
aws lambda list-layers --compatible-runtime python3.14
```

다음과 유사한 출력 화면이 표시되어야 합니다.

```
{
    "Layers": [
        {
            "LayerName": "my-layer",
            "LayerArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer",
            "LatestMatchingVersion": {
                "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:2",
                "Version": 2,
                "Description": "My layer",
                "CreatedDate": "2025-04-15T00:37:46.592+0000",
                "CompatibleRuntimes": [
                    "python3.14"
                ]
            }
        }
    ]
}
```

계정의 모든 계층을 나열하려면 `--compatible-runtime` 옵션을 생략합니다. 응답 세부 정보에는 각 계층의 최신 버전이 표시됩니다.

[ListLayerVersions](https://docs.aws.amazon.com/lambda/latest/api/API_ListLayerVersions.html) API를 사용하여 최신 버전의 계층을 가져올 수도 있습니다. 예를 들어, 다음 `list-layer-versions` CLI 명령을 사용할 수 있습니다. 

```
aws lambda list-layer-versions --layer-name my-layer
```

다음과 유사한 출력 화면이 표시되어야 합니다.

```
{
    "LayerVersions": [
        {
            "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:2",
            "Version": 2,
            "Description": "My layer",
            "CreatedDate": "2023-11-15T00:37:46.592+0000",
            "CompatibleRuntimes": [
                "java11"
            ]
        },
        {
            "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:1",
            "Version": 1,
            "Description": "My layer",
            "CreatedDate": "2023-11-15T00:27:46.592+0000",
            "CompatibleRuntimes": [
                "java11"
            ]
        }
    ]
}
```

# 계층으로 AWS CloudFormation 작업
<a name="layers-cfn"></a>

CloudFormation을 사용하여 계층을 생성하고 해당 계층을 Lambda 함수와 연결할 수 있습니다. 다음 예제 템플릿에서는 `my-lambda-layer`라는 계층을 만들고 **계층** 속성을 사용하여 Lambda 함수에 계층을 연결합니다.

이 예제에서 템플릿은 기존 IAM [실행 역할](lambda-intro-execution-role.md)의 Amazon 리소스 이름(ARN)을 지정합니다. 또한 CloudFormation [AWS::IAM::Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html) 리소스를 사용하여 템플릿에서 새 실행 역할을 생성할 수도 있습니다.

함수에는 계층을 사용하는 데 특별한 권한이 필요하지 않습니다.

```
---
Description: CloudFormation Template for Lambda Function with Lambda Layer
Resources:
  MyLambdaLayer:
    Type: AWS::Lambda::LayerVersion
    Properties:
      LayerName: my-lambda-layer
      Description: My Lambda Layer
      Content:
        S3Bucket: amzn-s3-demo-bucket
        S3Key: my-layer.zip
      CompatibleRuntimes:
        - python3.9
        - python3.10
        - python3.11

  MyLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: my-lambda-function
      Runtime: python3.9
      Handler: index.handler
      Timeout: 10
      Role: arn:aws:iam::111122223333:role/my_lambda_role
      Layers:
        - !Ref MyLambdaLayer
```

# 계층으로 AWS SAM 작업
<a name="layers-sam"></a>

AWS Serverless Application Model(AWS SAM)을 사용하여 애플리케이션에서 계층 생성을 자동화할 수 있습니다. `AWS::Serverless::LayerVersion` 리소스 유형은 Lambda 함수 구성에서 참조할 수 있는 계층 버전을 생성합니다.

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: AWS SAM Template for Lambda Function with Lambda Layer

Resources:
  MyLambdaLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      LayerName: my-lambda-layer
      Description: My Lambda Layer
      ContentUri: s3://amzn-s3-demo-bucket/my-layer.zip
      CompatibleRuntimes:
        - python3.9
        - python3.10
        - python3.11

  MyLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: MyLambdaFunction
      Runtime: python3.9
      Handler: app.handler
      CodeUri: s3://amzn-s3-demo-bucket/my-function
      Layers:
        - !Ref MyLambdaLayer
```