Lambda 레이어 구축 - AWS Serverless Application Model

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

Lambda 레이어 구축

를 AWS SAM 사용하여 사용자 지정 Lambda 계층을 구축할 수 있습니다. Lambda 계층을 사용하면 Lambda 함수에서 코드를 추출하여 여러 Lambda 함수에서 재사용할 수 있습니다. 전체 애플리케이션을 구축하는 대신 Lambda 계층만 구축하면 몇 가지 면에서 도움이 될 수 있습니다. 이를 통해 배포 패키지의 크기를 줄이고, 핵심 함수 로직을 종속성과 분리하고, 여러 함수 간에 종속성을 공유할 수 있습니다. 레이어에 대한 자세한 내용을 알아보려면 AWS 개발자 가이드AWS Lambda Lambda 레이어를 확인하십시오.

Lambda 계층을 구축하는 방법 AWS SAM

참고

Lambda 계층을 구축하려면 먼저 템플릿에 Lambda 계층을 작성해야 합니다. AWS SAM 이에 대한 정보와 예제는 을 참조하십시오. 다음과 같은 Lambda 계층을 사용하여 효율성을 높이십시오. AWS SAM

사용자 지정 레이어를 만들려면 AWS Serverless Application Model (AWS SAM) 템플릿 파일에서 사용자 지정 레이어를 선언하고 Metadata 리소스 속성 섹션을 BuildMethod 항목과 함께 포함해야 합니다. BuildMethod의 유효한 값은 AWS Lambda 런타임의 혹은 makefile의 식별자입니다. 레이어가 지원하는 명령어 세트 아키텍처를 지정하기 위해 BuildArchitecture을 포함하십시오. BuildArchitecture의 유효한 값은 Lambda 명령 세트 아키텍처입니다.

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

참고

사용자 지정 레이어를 생성할 때는 환경 변수에 AWS Lambda 따라 레이어 코드를 찾을 수 있습니다. Lambda 런타임에는 레이어 코드가 복사되어 들어가는 /opt 디렉토리의 경로가 포함됩니다. 사용자 지정 레이어 코드를 찾을 수 있도록 프로젝트의 빌드 아티팩트 폴더 구조가 런타임의 예상 폴더 구조와 일치해야 합니다.

예를 들어, Python의 경우 귀하의 코드를 python/ 하위 디렉터리에 배치할 수 있습니다. NodeJS의 경우 코드를 nodejs/node_modules/ 하위 디렉터리에 배치할 수 있습니다.

자세한 내용은 개발자 가이드의 레이어에 AWS Lambda 라이브러리 종속 항목 포함하기를 잠조하세요.

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

Metadata: BuildMethod: python3.8 BuildArchitecture: arm64
참고

Metadata리소스 속성 섹션을 포함하지 않으면 레이어가 AWS SAM 생성되지 않습니다. 대신 그것은 레이어 리소스의 CodeUri 속성에 지정된 위치에서 빌드 아티팩트를 복사합니다. 자세한 내용은 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 명령으로 함수 리소스를 지정하여 레이어를 구축합니다.

템플릿 예제 1: Python 3.9 런타임 환경에서 레이어 구축

다음 예제 AWS SAM 템플릿은 Python 3.9 런타임 환경에 대해 레이어를 빌드합니다.

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

템플릿 예제 2: 사용자 지정 makefile을 사용하여 레이어 구축

다음 예제 AWS SAM 템플릿은 사용자 정의를 makefile 사용하여 레이어를 만듭니다.

Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.8 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"

sam build 명령어 예시

다음 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