durable functions 지원 런타임

durable functions 지원 런타임 (Supported runtimes for durable functions)

durable functions는 선택된 관리형 런타임과 추가 런타임 버전 유연성을 위한 OCI 컨테이너 이미지에서 사용할 수 있습니다. 콘솔에서 직접 또는 인프라를 코드로 사용해 프로그래밍 방식으로 Node.js, Python, Java, C# (.NET)용 durable functions를 만들 수 있습니다.

출처: AWS Lambda 개발자 안내서

본문

Lambda 관리형 런타임

다음 관리형 런타임은 Lambda 콘솔 또는 AWS CLI에서 --durable-config '{"ExecutionTimeout": 3600, "RetentionPeriodInDays": 7}' 파라미터와 함께 함수를 만들 때 durable functions를 지원합니다. Lambda 런타임에 대한 전체 정보는 Lambda 런타임을 참조하세요.

언어 런타임
Node.js nodejs22.x
Node.js nodejs24.x
Python python3.13
Python python3.14
Java java17
Java java21
Java java25
C# (.NET) dotnet8
C# (.NET) dotnet10

참고

Lambda Node.js 및 Python 런타임은 테스트와 개발을 위해 durable execution SDK를 포함합니다. 그러나 프로덕션에서는 배포 패키지에 SDK를 포함할 것을 권장합니다. 이렇게 하면 버전 일관성이 보장되고 함수 동작에 영향을 줄 수 있는 잠재적 런타임 업데이트를 피할 수 있습니다. Java와 C# (.NET)은 컴파일 언어이므로 Lambda Java 및 .NET 런타임은 durable execution SDK를 포함하지 않으므로 배포 패키지에 포함해야 합니다.

Node.js

Node.js 프로젝트에 SDK를 설치합니다:

npm install @aws/durable-execution-sdk-js

SDK는 JavaScript와 TypeScript를 지원합니다. TypeScript 프로젝트의 경우 SDK에 타입 정의가 포함됩니다.

Python

Python 프로젝트에 SDK를 설치합니다:

pip install aws-durable-execution-sdk-python

Python SDK는 동기 메서드를 사용하며 async/await가 필요하지 않습니다.

Java

pom.xml에 종속성을 추가합니다:

<dependency>
    <groupId>software.amazon.lambda.durable</groupId>
    <artifactId>aws-durable-execution-sdk-java</artifactId>
    <version>VERSION</version>
</dependency>

Java 프로젝트에 SDK를 설치합니다:

mvn install

Java SDK는 각 메서드의 동기 및 비동기 버전을 모두 제공합니다.

C# (.NET)

.NET 프로젝트에 SDK를 추가합니다:

dotnet add package Amazon.Lambda.DurableExecution

.NET SDK는 IDurableContext를 통해 durable 작업을 노출합니다. 핸들러는 durable execution 서비스 봉투를 받고 DurableFunction.WrapAsync에 위임합니다. 모든 작업 본문은 CancellationToken을 사용합니다.

컨테이너 이미지

durable functions를 컨테이너 이미지와 함께 사용해 추가 런타임 버전이나 사용자 지정 런타임 구성을 지원할 수 있습니다. 컨테이너 이미지를 사용하면 관리형 런타임으로 사용할 수 없는 런타임 버전을 사용하거나 런타임 환경을 사용자 지정할 수 있습니다.

컨테이너 이미지를 사용해 durable function을 만들려면:

  1. Lambda 기본 이미지를 기반으로 Dockerfile 생성
  2. 컨테이너에 durable execution SDK 설치
  3. 컨테이너 이미지를 Amazon Elastic Container Registry로 빌드 및 푸시
  4. durable execution을 활성화한 채 컨테이너 이미지에서 Lambda 함수 생성

컨테이너 예시

Dockerfile 생성:

Python — Python 3.11용 Dockerfile 생성:

FROM public.ecr.aws/lambda/python:3.11

# Copy requirements file
COPY requirements.txt ${LAMBDA_TASK_ROOT}/

# Install dependencies including durable SDK
RUN pip install -r requirements.txt

# Copy function code
COPY lambda_function.py ${LAMBDA_TASK_ROOT}/

# Set the handler
CMD [ "lambda_function.handler" ]

requirements.txt 파일 생성:

aws-durable-execution-sdk-python

Java — Java 25용 Dockerfile 생성:

FROM --platform=linux/amd64 public.ecr.aws/lambda/java:25

# Install Maven
RUN dnf install -y maven

WORKDIR /var/task

# Copy Maven configuration and source code
COPY pom.xml .
COPY src ./src

# Build
RUN mvn clean package -DskipTests

# Move JAR to lib directory
RUN mv target/*.jar lib/

# Set the handler
CMD ["src.path.to.lambdaFunction::handler"]

이미지 빌드 및 푸시:

# Build the image
docker build -t my-durable-function .

# Tag for ECR
docker tag my-durable-function:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-durable-function:latest

# Push to ECR
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-durable-function:latest

durable execution을 활성화한 채 함수 생성:

aws lambda create-function \
  --function-name myDurableFunction \
  --package-type Image \
  --code ImageUri=123456789012.dkr.ecr.us-east-1.amazonaws.com/my-durable-function:latest \
  --role arn:aws:iam::123456789012:role/lambda-execution-role \
  --durable-config '{"ExecutionTimeout": 3600, "RetentionPeriodInDays": 7}'

Lambda와 컨테이너 이미지를 함께 사용하는 방법에 대한 자세한 내용은 Lambda 개발자 안내서의 Lambda 컨테이너 이미지 생성을 참조하세요.

런타임 고려 사항

  • SDK 버전 관리 — 종속성을 완전히 제어하고 가능한 버전 불일치 문제를 피하려면 기본적으로 Lambda 런타임에 포함된 버전이라도 함수의 모든 종속성을 배포 패키지에 추가할 것을 권장합니다. 여기에는 durable execution SDK가 포함됩니다. 종속성 파일에서 durable execution SDK를 주요 버전(major version)으로 잠그세요. 새 주요 버전은 진행 중인 실행의 실패를 초래할 수 있는 변경을 도입할 수 있습니다. 프로덕션 durable functions에는 $LATEST 대신 번호가 매겨진 버전이나 별칭을 사용해 SDK 버전 변경이 진행 중인 실행에 영향을 주지 않도록 하세요.
  • 런타임 업데이트 — AWS는 관리형 런타임을 업데이트해 보안 패치와 버그 수정을 포함합니다. 이러한 업데이트에는 새 SDK 버전이 포함될 수 있습니다. 예기치 않은 동작을 피하려면 SDK를 배포 패키지에 포함하고 프로덕션에 배포하기 전에 철저히 테스트하세요.
  • 컨테이너 이미지 크기 — 컨테이너 이미지의 최대 압축 해제 크기는 10GB입니다. durable execution SDK는 이미지에 아주 작은 크기를 추가합니다. 다단계 빌드(multi-stage build)를 사용하고 불필요한 종속성을 제거해 컨테이너를 최적화하세요.
  • 콜드 스타트 성능 — 컨테이너 이미지는 관리형 런타임보다 콜드 스타트 시간이 더 길 수 있습니다. durable execution SDK는 콜드 스타트 성능에 최소한의 영향을 줍니다. 콜드 스타트 대기 시간이 애플리케이션에 중요한 경우 프로비저닝된 동시성(provisioned concurrency)을 사용하세요.

더 알아보기 (Learn more)

  • Lambda durable functions
  • Lambda 런타임
  • Lambda 컨테이너 이미지