Lambda가 런타임 버전 업데이트를 관리하는 방식 이해하기
Lambda가 런타임 버전 업데이트를 관리하는 방식 이해하기
Lambda는 각 관리형 런타임을 보안 업데이트, 버그 수정, 새 기능, 성능 개선, 마이너 버전 릴리스 지원으로 최신 상태로 유지해요. 이러한 런타임 업데이트는 런타임 버전(runtime versions) 으로 게시되죠. Lambda는 함수를 이전 런타임 버전에서 새 런타임 버전으로 마이그레이션하는 방식으로 함수에 런타임 업데이트를 적용해요.
기본적으로 관리형 런타임을 사용하는 함수의 경우 Lambda가 런타임 업데이트를 자동으로 적용해요. 자동 런타임 업데이트를 사용하면 Lambda가 런타임 버전 패치라는 운영 부담을 떠맡죠. 대부분의 고객에게 자동 업데이트가 올바른 선택이에요. 이 기본 동작은 런타임 관리 설정 구성으로 변경할 수 있어요.
Lambda는 각 새 런타임 버전을 컨테이너 이미지로도 게시해요. 컨테이너 기반 함수의 런타임 버전을 업데이트하려면 업데이트된 기본 이미지에서 새 컨테이너 이미지를 만들어 함수를 재배포해야 합니다.
각 런타임 버전은 버전 번호와 ARN(Amazon Resource Name)에 연결돼요. 런타임 버전 번호는 프로그래밍 언어가 사용하는 버전 번호와 무관하게 Lambda가 정의한 번호 매기기 체계를 사용해요. 런타임 버전 번호는 항상 순차적이진 않아요. 예를 들어 버전 42 다음에 버전 45가 올 수도 있죠. 런타임 버전 ARN은 각 런타임 버전의 고유 식별자예요. Lambda 콘솔이나 함수 로그의 INIT_START 줄에서 함수의 현재 런타임 버전 ARN을 확인할 수 있어요. 건강에 중요한(health-critical) 애플리케이션에서 런타임 업데이트를 관리하는 방법은 고규정(high-compliance) 애플리케이션을 위한 Lambda 런타임 업데이트 권한 제어를 참고하세요.
런타임 버전을 런타임 식별자와 혼동하면 안 돼요. 각 런타임에는 python3.14나 nodejs24.x 같은 고유한 런타임 식별자가 있어요. 이는 각 주요 프로그래밍 언어 릴리스에 대응하죠. 런타임 버전은 개별 런타임의 패치 버전을 나타냅니다.
참고
같은 런타임 버전 번호의 ARN도 AWS 리전과 CPU 아키텍처에 따라 달라질 수 있어요.
본문
Topics(주제)
- 하위 호환성
- 런타임 업데이트 모드
- 2단계 런타임 버전 출시
- Lambda 런타임 관리 설정 구성
- Lambda 런타임 버전 롤백
- Lambda 런타임 버전 변경 식별
- Lambda 런타임 관리의 공동 책임 모델 이해
- 고규정 애플리케이션을 위한 Lambda 런타임 업데이트 권한 제어
하위 호환성
Lambda는 기존 함수와 하위 호환되는 런타임 업데이트를 제공하려고 노력해요. 하지만 소프트웨어 패치와 마찬가지로 런타임 업데이트가 기존 함수에 부정적인 영향을 줄 수 있는 드문 경우가 있어요. 예를 들어 보안 패치가 이전의 안전하지 않은 동작에 의존하던 기존 함수의 근본적인 문제를 드러낼 수 있죠.
함수를 빌드·배포할 때는 향후 런타임 업데이트와의 잠재적 비호환성을 피하기 위해 의존성을 어떻게 관리할지 이해하는 것이 중요해요. 예를 들어 함수가 패키지 A에 의존하고, A가 다시 패키지 B에 의존한다고 가정해 보세요. 두 패키지 모두 Lambda 런타임에 포함되어 있어요(예: SDK의 일부나 그 의존성, 또는 런타임 시스템 라이브러리의 일부일 수 있죠).
다음 시나리오를 고려해 보세요:
| 배포 | 패치 호환 가능 | 이유 |
|---|---|---|
| + 패키지 A: 런타임에서 사용 + 패키지 B: 런타임에서 사용 |
예 | 패키지 A와 B에 대한 향후 런타임 업데이트는 하위 호환됩니다. |
| + 패키지 A: 배포 패키지에 포함 + 패키지 B: 배포 패키지에 포함 |
예 | 배포가 우선하므로 패키지 A와 B에 대한 향후 런타임 업데이트는 영향을 주지 않아요. |
| + 패키지 A: 배포 패키지에 포함 + 패키지 B: 런타임에서 사용 |
예* | 패키지 B에 대한 향후 런타임 업데이트는 하위 호환됩니다. *A와 B가 밀접하게 결합되어 있으면 호환성 문제가 발생할 수 있어요. 예를 들어 AWS SDK for Python의 boto3와 botocore 패키지는 함께 배포해야 합니다. |
| + 패키지 A: 런타임에서 사용 + 패키지 B: 배포 패키지에 포함 |
아니요 | 패키지 A에 대한 향후 런타임 업데이트는 패키지 B의 업데이트된 버전을 요구할 수 있어요. 하지만 배포된 패키지 B 버전이 우선하며, 업데이트된 패키지 A 버전과 정방향 호환되지 않을 수 있죠. |
향후 런타임 업데이트와의 호환성을 유지하려면 다음 모범 사례를 따르세요:
- 가능하면 모든 의존성을 패키징하세요: AWS SDK와 그 의존성을 포함한 모든 필수 라이브러리를 배포 패키지에 포함하세요. 이렇게 하면 안정적이고 호환되는 구성 요소 집합이 보장됩니다.
- 런타임 제공 SDK는 가급적 아껴 쓰세요: 추가 패키지를 포함할 수 없을 때만(Lambda 콘솔 코드 편집기나 AWS CloudFormation 템플릿의 인라인 코드를 쓸 때 등) 런타임 제공 SDK에 의존하세요.
- 시스템 라이브러리 재정의를 피하세요: 향후 런타임 업데이트와 충돌할 수 있는 커스텀 운영 체제 라이브러리를 배포하지 마세요.
런타임 업데이트 모드
Lambda는 기존 함수와 하위 호환되는 런타임 업데이트를 제공하려고 노력해요. 하지만 소프트웨어 패치와 마찬가지로 런타임 업데이트가 기존 함수에 부정적인 영향을 줄 수 있는 드문 경우가 있어요. 예를 들어 보안 패치가 이전의 안전하지 않은 동작에 의존하던 기존 함수의 근본적인 문제를 드러낼 수 있죠. Lambda 런타임 관리 컨트롤은 드물게 발생하는 런타임 버전 비호환성의 경우 워크로드에 미치는 영향 위험을 줄이는 데 도움을 줘요. 각 함수 버전($LATEST 또는 게시된 버전)에 대해 다음 런타임 업데이트 모드 중 하나를 선택할 수 있어요:
-
Auto(자동, 기본값) – 2단계 런타임 버전 출시를 사용해 가장 최신이고 안전한 런타임 버전으로 자동 업데이트해요. 대부분의 고객에게 이 모드를 권장해서 항상 런타임 업데이트의 혜택을 받기를 바래요.
-
Function update(함수 업데이트) – 함수를 업데이트할 때 가장 최신이고 안전한 런타임 버전으로 업데이트해요. 함수를 업데이트하면 Lambda가 함수의 런타임도 가장 최신이고 안전한 버전으로 업데이트하죠. 이 방식은 런타임 업데이트를 함수 배포와 동기화해서, Lambda가 런타임 업데이트를 적용하는 시점을 제어할 수 있게 해줘요. 이 모드를 사용하면 드문 런타임 업데이트 비호환성을 일찍 감지하고 완화할 수 있어요. 이 모드를 쓸 때는 함수를 정기적으로 업데이트해 런타임을 최신 상태로 유지해야 합니다.
-
Manual(수동) – 런타임 버전을 수동으로 업데이트해요. 함수 구성에서 런타임 버전을 지정하죠. 함수는 이 런타임 버전을 무기한 사용합니다.
새 런타임 버전이 기존 함수와 호환되지 않는 드문 경우에는 이 모드로 함수를 이전 런타임 버전으로 롤백할 수 있어요. Manual 모드를 배포 간 런타임 일관성을 맞추려고 사용하는 것은 권장하지 않아요. 자세한 내용은 Lambda 런타임 버전 롤백을 참고하세요.
함수에 런타임 업데이트를 적용할 책임은 선택한 런타임 업데이트 모드에 따라 달라져요. 자세한 내용은 Lambda 런타임 관리의 공동 책임 모델 이해를 참고하세요.
2단계 런타임 버전 출시
Lambda는 새 런타임 버전을 다음 순서로 도입해요:
-
첫 번째 단계에서 Lambda는 함수를 만들거나 업데이트할 때마다 새 런타임 버전을 적용해요. 함수는 UpdateFunctionCode 또는 UpdateFunctionConfiguration API 작업을 호출할 때 업데이트됩니다.
-
두 번째 단계에서 Lambda는 Auto 런타임 업데이트 모드를 사용하고 아직 새 런타임 버전으로 업데이트되지 않은 함수를 업데이트해요.
출시 과정의 전체 기간은 런타임 업데이트에 포함된 보안 패치의 심각도 등 여러 요인에 따라 달라져요.
함수를 활발히 개발·배포 중이라면 첫 번째 단계에서 새 런타임 버전을 받을 가능성이 높아요. 이렇게 하면 런타임 업데이트가 함수 업데이트와 동기화되죠. 최신 런타임 버전이 애플리케이션에 부정적인 영향을 주는 드문 경우, 이 방식은 신속한 시정 조치를 취할 기회를 줘요. 활발히 개발되지 않는 함수도 두 번째 단계에서 자동 런타임 업데이트의 운영상 이점을 여전히 받아요.
이 방식은 Function update 또는 Manual 모드로 설정된 함수에는 영향을 주지 않아요. Function update 모드를 사용하는 함수는 만들거나 업데이트할 때만 최신 런타임 업데이트를 받아요. Manual 모드를 사용하는 함수는 런타임 업데이트를 받지 않습니다.
Lambda는 AWS 리전 전반에 걸쳐 새 런타임 버전을 점진적이고 순차적으로 게시해요. 함수가 Auto 또는 Function update 모드로 설정되어 있으면, 같은 시각에 다른 리전에 배포되거나 같은 리전의 다른 시각에 배포된 함수가 서로 다른 런타임 버전을 받을 수 있어요. 환경 전반에 걸쳐 보장된 런타임 버전 일관성을 요구하는 고객은 컨테이너 이미지로 Lambda 함수를 배포해야 해요. Manual 모드는 런타임 버전이 함수와 호환되지 않는 드문 경우 런타임 버전 롤백을 가능하게 하는 임시 완화 조치로 설계되었어요.
더 알아보기 (Learn more)
- 런타임 버전 업데이트의 자동·수동·함수 업데이트 모드와 2단계 출시 방식을 이해하고, 런타임 관리 설정·롤백·식별 문서를 이어서 살펴보세요.