기본 개념
기본 개념
AWS Durable Execution SDK는 지속(durable) 함수를 만들기 위한 기반으로, 진행 상황을 체크포인트로 저장하고, 재시도를 처리하고, 실행 흐름을 관리하는 데 필요한 기본 요소(primitive)를 제공합니다. SDK는 JavaScript/TypeScript, Python, Java에서 사용할 수 있습니다. API 레퍼런스, 퀵스타트 튜토리얼, 언어별 가이드를 포함한 완전한 SDK 문서는 AWS Durable Execution SDK Developer Guide를 참고하세요.
본문
지속 실행(Durable execution)
지속 실행은 Lambda 지속 함수의 완전한 수명주기를 나타내며, 체크포인트 및 재생(replay) 메커니즘을 사용해 비즈니스 로직 진행을 추적하고, 실행을 중단하고, 실패에서 복구합니다. 함수가 중단이나 중단 사태 후 재개될 때 이전에 완료된 체크포인트가 재생되고 함수는 실행을 계속합니다.
수명주기에는 실행을 완료하기 위해 Lambda 함수의 여러 호출이 포함될 수 있으며, 특히 중단이나 실패 복구 후에 그러합니다. 이 접근 방식은 중단에도 불구하고 함수가 신뢰할 수 있는 진행을 유지하면서 (최대 1년까지) 장기간 실행되게 합니다.
Lambda는 함수가 실행되는 동안 모든 지속 작업(단계, 대기, 기타 작업)의 실행 로그를 보관합니다. 함수가 일시 중지해야 하거나 중단을 만나면 Lambda는 이 체크포인트 로그를 저장하고 실행을 중지합니다. 재개할 때가 되면 Lambda는 함수를 처음부터 다시 호출하고 체크포인트 로그를 재생하며, 완료된 작업에는 저장된 값을 대체합니다. 즉 코드는 다시 실행되지만 이전에 완료된 단계는 다시 실행되지 않습니다. 대신 저장된 결과가 사용됩니다.
이 재생 메커니즘은 지속 함수를 이해하는 데 기본적입니다. 재생 중 코드는 결정적(deterministic)이어야 합니다. 즉 같은 입력이 주어지면 같은 결과를 생성해야 합니다. 단계 밖에서 부작용이 있는 작업(예: 난수 생성, 현재 시간 가져오기)은 재생 중 다른 값을 생성해 비결정적 동작을 일으킬 수 있으므로 피하세요.
DurableContext
DurableContext는 지속 함수가 받는 컨텍스트 객체입니다. 체크포인트를 만들고 실행 흐름을 관리하는 단계(step), 대기(wait) 같은 지속 작업용 메서드를 제공합니다.
지속 함수는 기본 Lambda 컨텍스트 대신 DurableContext를 받습니다.
import {
DurableContext,
withDurableExecution,
} from "@aws/durable-execution-sdk-js";
export const handler = withDurableExecution(
async (event: any, context: DurableContext) => {
const result = await context.step(async () => {
return "step completed";
});
return result;
},
);
from aws_durable_execution_sdk_python import (
DurableContext,
durable_execution,
durable_step,
)
@durable_step
def my_step(step_context, data):
# Your business logic
return result
@durable_execution
def handler(event, context: DurableContext):
result = context.step(my_step(event["data"]))
return result
DurableContext를 통해 함수는 진행을 체크포인트로 저장하고 작업을 조정하는 지속 작업에 접근할 수 있습니다.
- 단계(Steps): 내장 재시도와 자동 체크포인트로 비즈니스 로직을 실행합니다. 각 단계는 결과를 저장하므로 중단 후 함수는 마지막 완료 단계에서 재개됩니다.
- 대기(Waits): 함수가 실행을 멈추고 계속할 때까지 비용 청구를 중지하는 계획된 일시 정지입니다. 시간 기간, 외부 콜백, 또는 조건 폴링에 사용하세요.
- Invoke: 다른 Lambda 함수를 호출하고 결과를 체크포인트로 저장합니다. 호출된 함수는 표준 또는 지속 함수일 수 있습니다. 크로스 계정 호출은 지원되지 않습니다.
사용 가능한 모든 지속 작업의 전체 언어 레퍼런스는 AWS Durable Execution SDK Developer Guide의 'SDK Reference'를 참고하세요.
지속 함수 구성
지속 함수에는 실행 동작과 데이터 보존을 제어하는 특정 구성 설정이 있습니다. 이 설정은 표준 Lambda 함수 구성과는 별개이며 전체 지속 실행 수명주기에 적용됩니다.
DurableConfig 객체가 지속 함수의 구성을 정의합니다.
{
"ExecutionTimeout": Integer,
"RetentionPeriodInDays": Integer
}
실행 타임아웃(Execution timeout)
실행 타임아웃은 지속 실행이 시작부터 완료까지 실행될 수 있는 시간을 제어합니다. 이는 단일 함수 호출이 실행될 수 있는 시간을 제어하는 Lambda 함수 타임아웃과 다릅니다.
지속 실행은 체크포인트, 대기, 재생을 진행하면서 여러 Lambda 함수 호출에 걸칠 수 있습니다. 실행 타임아웃은 개별 함수 호출이 아니라 지속 실행의 총 경과 시간에 적용됩니다.
- Lambda 함수 타임아웃(최대 15분)은 함수의 각 개별 호출을 제한합니다.
- 지속 실행 타임아웃(최대 1년)은 실행이 시작부터 완료, 실패 또는 타임아웃될 때까지의 총 시간을 제한합니다. 이 기간 동안 함수는 단계, 대기 처리, 실패 복구를 진행하면서 여러 번 호출될 수 있습니다.
예를 들어 지속 실행 타임아웃을 24시간, Lambda 함수 타임아웃을 5분으로 설정했다면:
- 각 함수 호출은 5분 안에 완료되어야 합니다.
- 전체 지속 실행은 최대 24시간까지 실행될 수 있습니다.
- 함수는 그 24시간 동안 여러 번 호출될 수 있습니다.
- 대기 작업은 Lambda 함수 타임아웃에 계산되지 않지만 실행 타임아웃에는 계산됩니다.
지속 함수를 만들 때 Lambda 콘솔, AWS CLI, AWS SAM으로 실행 타임아웃을 구성할 수 있습니다. Lambda 콘솔에서 함수를 선택한 뒤 Configuration, Durable execution을 선택하세요. Execution timeout 값을 초 단위로 설정하세요(기본값: 86400초 / 24시간, 최소: 60초, 최대: 31536000초 / 1년).
실행 타임아웃과 Lambda 함수 타임아웃은 다른 설정입니다. Lambda 함수 타임아웃은 각 개별 호출이 실행될 수 있는 시간을 제어합니다(최대 15분). 실행 타임아웃은 전체 지속 실행의 총 경과 시간을 제어합니다(최대 1년).
보존 기간(Retention period)
보존 기간은 지속 실행이 완료된 후 Lambda가 실행 기록과 체크포인트 데이터를 보존하는 시간을 제어합니다. 이 데이터에는 단계 결과, 실행 상태, 완전한 체크포인트 로그가 포함됩니다.
보존 기간이 만료되면 Lambda는 실행 기록과 체크포인트 데이터를 삭제합니다. 더 이상 실행 세부 정보를 검색하거나 실행을 재생할 수 없습니다. 보존 기간은 실행이 종료 상태(SUCCEEDED, FAILED, STOPPED, TIMED_OUT)에 도달할 때 시작됩니다.
지속 함수를 만들 때 Lambda 콘솔, AWS CLI, AWS SAM으로 보존 기간을 구성할 수 있습니다. Lambda 콘솔에서 함수를 선택한 뒤 Configuration, Durable execution을 선택하세요. Retention period 값을 일 단위로 설정하세요(기본값: 14일, 최소: 1일, 최대: 90일).
규정 준수 요구 사항, 디버깅 요구, 비용 고려 사항에 따라 보존 기간을 선택하세요. 보존 기간이 길수록 디버깅과 감사 시간이 더 많아지지만 저장 비용이 늘어납니다.
함께 보기(See also)
- AWS Durable Execution SDK Developer Guide – 완전한 SDK 레퍼런스, 퀵스타트 튜토리얼, 테스트 프레임워크, 언어별 가이드.
- 지속 함수 또는 Step Functions – 각 접근 방식이 언제 가장 효과적인지 이해하려면 지속 함수와 Step Functions를 비교하세요.