를 사용한 기본 빌드 AWS SAM - AWS Serverless Application Model

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

를 사용한 기본 빌드 AWS SAM

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

requirements.txt(Python) 또는 package.json(Node.js) 같은 매니페스트 파일에서 또는 함수 리소스의 Layers 속성을 사용하여 애플리케이션의 종속성을 지정합니다. 이 Layers 속성에는 다음 목록이 포함되어 있습니다. AWS Lambda Lambda 함수가 의존하는 계층 리소스

애플리케이션 구축 아티팩트의 형식은 각 함수의 PackageType 속성에 따라 달라집니다. 이 속성의 옵션은 다음과 같습니다.

  • Zip – 애플리케이션 코드와 그 종속 항목을 포함하는 .zip 파일 아카이브입니다. 코드를 .zip 파일 아카이브로 패키징하는 경우 함수의 Lambda 런타임을 지정해야 합니다.

  • Image - 애플리케이션 코드 및 그 종속 항목에 추가하여 기본 운영 체제, 런타임, 익스텐션 등을 포함하는 컨테이너 이미지입니다.

Lambda 패키지 유형에 대한 자세한 내용은 Lambda 배포 패키지를 참조하십시오. AWS Lambda 개발자 안내서.

.zip 파일 아카이브 만들기

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

AWS SAM 지정한 아키텍처에 맞게 애플리케이션을 빌드합니다. 아키텍처를 지정하지 않는 경우 AWS SAM x86_64기본적으로 를 사용합니다.

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

--use-container옵션을 사용하는 경우 기본적으로 AWS SAM 아마존 ECR 퍼블릭에서 컨테이너 이미지를 가져옵니다. 예를 들어 DockerHub 다른 리포지토리에서 컨테이너 이미지를 가져오려는 경우 --build-image 옵션을 사용하여 대체 컨테이너 이미지를 제공할 수 있습니다. URI 다음은 DockerHub 리포지토리의 컨테이너 이미지를 사용하여 애플리케이션을 빌드하기 위한 두 가지 예제 명령입니다.

# Build a Node.js 20 application using a container image pulled from DockerHub sam build --use-container --build-image amazon/aws-sam-cli-build-image-nodejs20.x # Build a function resource using the Python 3.12 container image pulled from DockerHub sam build --use-container --build-image Function1=amazon/aws-sam-cli-build-image-python3.12

와 함께 --build-image 사용할 URIs 수 있는 목록을 보려면 지원되는 런타임이 여러 개 DockerHub URIs 들어 이미지 리포지토리 AWS SAM 있는 항목을 참조하십시오.

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

컨테이너 이미지 구축

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

Dockerfile

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

DockerContext

Dockerfile의 위치입니다.

DockerTag

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

DockerBuildArgs

구축에 대한 구축 인수입니다.

중요

더 AWS SAM CLI 인수에 포함하는 정보를 수정하거나 난독화하지 않습니다. DockerBuildArgs 이 섹션을 사용하여 암호나 보안 암호와 같은 민감한 정보를 저장하지 않는 것이 좋습니다.

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

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

Image패키지 유형으로 구성된 샘플 애플리케이션을 다운로드하려면 을 참조하십시오. 튜토리얼: 다음을 사용하여 Hello World 애플리케이션 배포하기 AWS SAM 설치할 패키지 유형을 묻는 메시지가 나타나면 Image을 선택합니다.

참고

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

컨테이너 환경 변수 파일

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

형식

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

모든 리소스에 단일 환경 변수를 제공하려면 다음과 같이 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

우선 순위

  • 특정 리소스에 귀하가 제공하는 환경 변수는 모든 리소스의 단일 환경 변수보다 우선합니다.

  • 명령 행에 제공하는 환경 변수는 한 파일 내 환경 변수보다 우선합니다.

소스 폴더에서 프로젝트를 빌드하여 빌드 시간 단축

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

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

예시

예제 1: .zip 파일 아카이브

다음 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 pulled from DockerHub sam build --use-container --build-image amazon/aws-sam-cli-build-image-nodejs20.x # Build a function resource using the Python 3.12 container image pulled from DockerHub sam build --use-container --build-image Function1=amazon/aws-sam-cli-build-image-python3.12 # Build and run your functions locally sam build && sam local invoke # For more options sam build --help

예제 2: 컨테이너 이미지

다음과 같습니다. 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

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

외부 기능 구축 AWS SAM

기본적으로sam build, 실행하면 AWS SAM 모든 함수 리소스를 빌드합니다. 그 밖에도 다음과 같은 옵션이 있습니다.

  • 외부에서 모든 함수 리소스를 빌드하세요. AWS SAM— 모든 함수 리소스를 수동으로 빌드하거나 다른 도구를 통해 sam build 빌드하는 경우에는 필요하지 않습니다. sam build을 건너뛰고 로컬 테스트 수행 또는 애플리케이션 배포와 같은 프로세스의 다음 단계로 이동할 수 있습니다.

  • 일부 함수 리소스를 외부에서 빌드하세요. AWS SAM— 원하는 경우 AWS SAM 일부 함수 리소스는 빌드하고 다른 함수 리소스는 외부에 빌드하려는 경우 AWS SAM, 다음에서 이를 지정할 수 있습니다. AWS SAM 템플릿.

외부에서 일부 함수 리소스를 빌드하세요. AWS SAM

갖고 싶은건 AWS SAM 사용할 때 함수를 sam build 건너뛰고 다음 기능을 구성하십시오. AWS SAM 템플릿:

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

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

다음은 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 구성된 함수를 건너뛰게 됩니다.

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

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

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

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