Lambda 런타임 업데이트 - AWS Lambda

Lambda 런타임 업데이트

Lambda는 보안 업데이트, 버그 수정, 새로운 기능, 성능 개선 사항 및 마이너 버전 릴리스에 대한 지원을 통해 각 관리형 런타임을 최신 상태로 유지합니다. 이러한 런타임 업데이트는 런타임 버전으로 게시됩니다. Lambda는 이전 런타임 버전에서 새 런타임 버전으로 함수를 마이그레이션하여 함수에 런타임 업데이트를 적용합니다.

관리형 런타임을 사용하는 함수의 경우 Lambda는 기본적으로 런타임 업데이트를 자동으로 적용합니다. 자동 런타임 업데이트를 통해, Lambda는 런타임 버전에 패치를 적용하는 데 따른 운영 부담을 덜어줍니다. 대부분의 고객은 자동 업데이트를 선택하는 것이 좋습니다. 자세한 설명은 런타임 관리 제어 섹션을 참조하세요.

또한 Lambda는 각각의 새 런타임 버전을 컨테이너 이미지로 게시합니다. 컨테이너 기반 함수의 런타임 버전을 업데이트하려면 업데이트된 기본 이미지에서 새 컨테이너 이미지를 생성하고 함수를 재배포해야 합니다.

각 런타임 버전은 버전 번호 및 ARN(Amazon 리소스 이름)과 연결됩니다. 런타임 버전 번호는 프로그래밍 언어에서 사용하는 버전 번호에 관계없이 Lambda가 정의하는 번호 지정 스키마를 사용합니다. 런타임 버전 ARN은 각 런타임 버전의 고유 식별자입니다.

함수 로그의 INIT_START 줄과 Lambda 콘솔에서 함수의 현재 런타임 버전 ARN을 확인할 수 있습니다.

런타임 버전을 런타임 식별자와 혼동해서는 안 됩니다. 각 런타임에는 python3.9 또는 nodejs18.x와 같은 고유한 런타임 식별자가 있습니다. 이 식별자는 각각의 메이저 프로그래밍 언어 릴리스에 해당합니다. 런타임 버전은 개별 런타임의 패치 버전을 설명합니다.

참고

동일한 런타임 버전 번호의 ARN은 AWS 리전 및 CPU 아키텍처마다 다를 수 있습니다.

런타임 관리 제어

Lambda는 기존 함수와 호환되는 런타임 업데이트를 제공하기 위해 노력합니다. 하지만 소프트웨어 패치와 마찬가지로, 드물지만 런타임 업데이트가 기존 함수에 부정적인 영향을 미칠 수 있는 경우도 있습니다. 예를 들어 보안 패치는 이전의 안전하지 않은 동작에 의존하는 기존 함수의 근본적인 문제를 노출시킬 수 있습니다. Lambda 런타임 관리 제어는 드물게 런타임 버전 비호환성이 발생하는 경우 워크로드에 영향을 미칠 위험을 줄이는 데 도움이 됩니다. 각 함수 버전($LATEST 또는 게시된 버전)에 대해 다음 런타임 업데이트 모드 중 하나를 선택할 수 있습니다.

  • 자동(기본값) - 2단계 런타임 버전 롤아웃을 사용하여 가장 최신의 안전한 런타임 버전으로 자동 업데이트합니다. 런타임 업데이트의 이점을 항상 누릴 수 있도록 대부분의 고객에게 이 모드를 권장합니다.

  • 함수 업데이트 - 함수를 업데이트하면 최신의 안전한 런타임 버전으로 업데이트합니다. 함수를 업데이트하면 Lambda는 함수의 런타임 버전을 최신의 안전한 런타임 버전으로 업데이트합니다. 이 방식은 런타임 업데이트를 함수 배포와 동기화하여 Lambda가 런타임 업데이트를 적용하는 시점을 사용자가 제어할 수 있도록 합니다. 이 모드를 사용하면 드물게 발생하는 런타임 업데이트 비호환성을 조기에 감지하여 해결할 수 있습니다. 이 모드를 사용하는 경우 런타임을 최신 상태로 유지하려면 함수를 정기적으로 업데이트해야 합니다.

  • 수동 — 런타임 버전을 수동으로 업데이트합니다. 사용자가 함수 구성에서 런타임 버전을 지정합니다. 이 런타임 버전이 함수에 무기한으로 사용됩니다. 드문 경우지만 새 런타임 버전이 기존 함수와 호환되지 않는 경우 이 모드를 사용하여 함수를 이전 런타임 버전으로 롤백할 수 있습니다. 배포 전반에서 런타임 일관성을 유지하는 데 수동 모드를 사용하지 않는 것이 좋습니다. 자세한 설명은 런타임 버전 롤백 섹션을 참조하세요.

함수에 런타임 업데이트를 적용할 책임의 여부는 선택한 런타임 업데이트 모드에 따라 달라집니다. 자세한 설명은 공동 책임 모델 섹션을 참조하세요.

2단계 런타임 버전 롤아웃

Lambda는 다음 순서로 새 런타임 버전을 도입합니다.

  1. 첫 번째 단계에서 Lambda는 사용자가 함수를 생성하거나 업데이트할 때마다 새 런타임 버전을 적용합니다. UpdateFunctionCode또는 UpdateFunctionConfigurationAPI 작업을 호출하면 함수가 업데이트됩니다.

  2. 두 번째 단계에서 Lambda는 자동 런타임 업데이트 모드를 사용하고 아직 새 런타임 버전으로 업데이트되지 않은 모든 함수를 업데이트합니다.

롤아웃 프로세스의 전체 기간은 런타임 업데이트에 포함된 보안 패치의 심각도를 비롯한 여러 요인에 따라 달라집니다.

함수를 적극적으로 개발 및 배포하는 경우 첫 번째 단계에서 새 런타임 버전을 선택할 가능성이 높습니다. 이렇게 하면 런타임 업데이트가 함수 업데이트와 동기화됩니다. 드물지만 최신 런타임 버전이 애플리케이션에 부정적인 영향을 미치는 경우, 이 방법을 사용하면 즉각적인 시정 조치를 취할 수 있습니다. 현재 개발 중이 아닌 함수는 여전히 두 번째 단계에서 자동 런타임 업데이트라는 운영상의 이점을 누릴 수 있습니다.

이 방법은 함수 업데이트 모드 또는 수동 모드로 설정된 함수에는 영향을 미치지 않습니다. 함수 업데이트 모드를 사용하는 함수의 경우 생성하거나 업데이트할 때만 최신 런타임 업데이트가 적용됩니다. 수동 모드를 사용하는 함수의 경우 런타임 업데이트가 적용되지 않습니다.

Lambda는 여러 AWS 리전에 새로운 런타임 버전을 점진적, 순차적으로 게시합니다. 함수가 자동 또는 함수 업데이트 모드로 설정된 경우 여러 리전에 동시에 배포되거나 동일한 리전에서 서로 다른 시간에 배포된 함수에 서로 다른 런타임 버전이 적용될 수 있습니다. 여러 환경에서 런타임 버전 일관성을 보장해야 하는 고객은 컨테이너 이미지를 사용하여 Lambda 함수를 배포해야 합니다. 수동 모드는 드물게 런타임 버전이 함수와 호환이 안 되는 경우에 런타임 롤백을 지원하기 위한 임시 문제 해결 조치로 설계되었습니다.

런타임 버전 롤백

드물지만 새 런타임 버전이 기존 함수와 호환되지 않는 경우 해당 런타임 버전을 이전 버전으로 롤백할 수 있습니다. 이렇게 하면 애플리케이션이 계속 작동하고 중단을 최소화하여 최신 런타임 버전으로 돌아가기 전에 비호환성을 해결할 시간을 확보할 수 있습니다.

Lambda는 특정 런타임 버전을 사용할 수 있는 기간에 대한 시간 제한을 두지 않습니다. 하지만 최신 보안 패치, 성능 개선 사항 및 기능을 활용하려면 가능한 한 빨리 최신 런타임 버전으로 업데이트하는 것이 좋습니다. Lambda는 드물지만 런타임 업데이트 호환성 문제가 발생하는 경우를 대비하여 일시적인 문제 해결 수단으로만 이전 런타임 버전으로 롤백하는 옵션을 제공합니다. 이전 런타임 버전을 장기간 사용하는 함수는 결국 성능이 저하되거나 인증서 만료와 같은 문제가 발생하여 제대로 작동하지 않을 수 있습니다.

런타임 버전을 롤백하는 방법은 다음과 같습니다.

자세한 내용은 AWS 컴퓨팅 블로그에서 Introducing AWS Lambda runtime management controls(런타임 관리 제어 소개)를 참조하세요.

수동 런타임 업데이트 모드를 사용하여 런타임 버전 롤백

자동 런타임 버전 업데이트 모드를 사용하거나 $LATEST 런타임 버전을 사용하는 경우 수동 모드를 사용하여 런타임 버전을 롤백할 수 있습니다. 롤백하려는 함수 버전에 대해 런타임 버전 업데이트 모드를 수동으로 변경하고 이전 런타임 버전의 ARN을 지정합니다. 이전 런타임 버전의 ARN 찾는 방법에 대한 자세한 내용은 런타임 버전 변경 확인 섹션을 참조하세요.

참고

함수의 $LATEST 버전이 수동 모드를 사용하도록 구성된 경우 함수가 사용하는 CPU 아키텍처 또는 런타임 버전을 변경할 수 없습니다. 이러한 변경 작업을 수행하려면 자동 또는 함수 업데이트 모드로 변경해야 합니다.

게시된 함수 버전을 사용하여 런타임 버전 롤백

게시된 함수 버전은 생성한 시점의 $LATEST 함수 코드 및 구성을 보여주는 변경 불가능한 스냅샷입니다. 자동 모드에서는 Lambda가 런타임 버전 롤아웃의 2단계에서 게시된 함수 버전의 런타임 버전을 자동으로 업데이트합니다. 함수 업데이트 모드에서는 Lambda가 게시된 함수 버전의 런타임 버전을 업데이트하지 않습니다.

따라서 함수 업데이트 모드를 사용하여 게시된 함수 버전은 함수 코드, 구성 및 런타임 버전의 정적 스냅샷을 생성합니다. 함수 버전과 함께 함수 업데이트 모드를 사용하면 런타임 업데이트를 배포와 동기화할 수 있습니다. 트래픽을 이전에 게시된 함수 버전으로 리디렉션하여 코드, 구성 및 런타임 버전의 롤백을 조정할 수도 있습니다. 이 접근 방식을 지속적 통합 및 지속적 전달(CI/CD)에 통합하여 런타임 업데이트가 호환되지 않는 드문 경우에 완전 자동 롤백을 실행할 수 있습니다. 이 방법을 사용할 때는 정기적으로 함수를 업데이트하고 새 함수 버전을 게시하여 최신 런타임 업데이트를 적용해야 합니다. 자세한 설명은 공동 책임 모델 섹션을 참조하세요.

런타임 버전 변경 확인

런타임 버전 번호와 ARN은 INIT_START 로그 라인에 기록되며, Lambda는 새 실행 환경을 생성할 때마다 Lambda가 CloudWatch Logs로 내보냅니다. 실행 환경은 모든 함수 호출에 대해 동일한 런타임 버전을 사용하므로 Lambda는 init 단계를 실행할 때만 INIT_START 로그 라인을 내보냅니다. Lambda는 각 함수 호출에 대해 이 로그 줄을 내보내지 않습니다. Lambda는 로그 라인을 CloudWatch Logs로 내보내지만 콘솔에는 표시되지 않습니다.

예 INIT_START 로그 줄의 예
INIT_START Runtime Version: python:3.9.v14    Runtime Version ARN: arn:aws:lambda:eu-south-1::runtime:7b620fc2e66107a1046b140b9d320295811af3ad5d4c6a011fad1fa65127e9e6I

로그를 직접 처리하는 대신 Amazon CloudWatch Contributor Insights를 사용하여 런타임 버전 간 전환을 식별할 수 있습니다. 다음 규칙은 각 INIT_START 로그 줄에서 개별 런타임 버전의 수를 계산합니다. 이 규칙을 사용하려면 예제 로그 그룹 이름 /aws/lambda/*를 함수 또는 함수 그룹에 적합한 접두사로 바꿉니다.

{ "Schema": { "Name": "CloudWatchLogRule", "Version": 1 }, "AggregateOn": "Count", "Contribution": { "Filters": [ { "Match": "eventType", "In": [ "INIT_START" ] } ], "Keys": [ "runtimeVersion", "runtimeVersionArn" ] }, "LogFormat": "CLF", "LogGroupNames": [ "/aws/lambda/*" ], "Fields": { "1": "eventType", "4": "runtimeVersion", "8": "runtimeVersionArn" } }

다음 CloudWatch Contributor Insights 보고서는 이전 규칙에 의해 캡처된 런타임 버전 전환의 예를 보여줍니다. 주황색 선은 이전 런타임 버전(python:3.9.v12)의 실행 환경 초기화를 나타내며, 파란색 선은 새 런타임 버전(python:3.9.v14)의 실행 환경 초기화를 나타냅니다.

특정 런타임 버전에서 다른 런타임 버전으로의 전환을 보여주는 그래프입니다.

런타임 관리 설정 구성

Lambda 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 런타임 관리 설정을 구성할 수 있습니다.

참고

함수 버전마다 런타임 관리 설정을 별도로 구성할 수 있습니다.

Lambda가 런타임 버전을 업데이트하는 방법을 구성하려면(콘솔)
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 함수의 이름을 선택합니다.

  3. Code(코드) 탭의 Runtime settings(런타임 설정)에서 Edit runtime management configuration(런타임 관리 구성 편집)을 선택합니다.

  4. Runtime management configuration(런타임 관리 구성)에서 다음 중 하나를 선택합니다.

    • 함수가 자동으로 최신 런타임 버전으로 업데이트되도록 하려면 Auto(자동)를 선택합니다.

    • 사용자가 함수를 변경할 때 함수가 최신 런타임 버전으로 업데이트되도록 하려면 Function update(함수 업데이트)를 선택합니다.

    • 런타임 버전 ARN을 변경할 때만 함수가 최신 런타임 버전으로 업데이트되도록 하려면 Manual(수동)을 선택합니다.

      참고

      런타임 버전 ARN은 Runtime management configuration(런타임 관리 구성)에서 확인할 수 있습니다. 함수 로그의 INIT_START 줄에서도 ARN을 확인할 수 있습니다.

  5. 저장을 선택합니다.

Lambda가 런타임 버전을 업데이트하는 방법을 구성하려면(AWS CLI)

함수에 대한 런타임 관리를 구성하려면 런타임 업데이트 모드와 함께 put-runtime-management-config AWS CLI 명령을 사용하면 됩니다. Manual 모드를 사용할 때는 런타임 버전 ARN도 제공해야 합니다.

aws lambda put-runtime-management-config --function-name arn:aws:lambda:eu-west-1:069549076217:function:myfunction --update-runtime-on Manual --runtime-version-arn arn:aws:lambda:eu-west-1::runtime:8eeff65f6809a3ce81507fe733fe09b835899b99481ba22fd75b5a7338290ec1

다음과 유사한 출력 화면이 표시되어야 합니다.

{ "UpdateRuntimeOn": "Manual", "FunctionArn": "arn:aws:lambda:eu-west-1:069549076217:function:myfunction", "RuntimeVersionArn": "arn:aws:lambda:eu-west-1::runtime:8eeff65f6809a3ce81507fe733fe09b835899b99481ba22fd75b5a7338290ec1" }

공동 책임 모델

Lambda는 지원되는 모든 관리형 런타임과 컨테이너 이미지에 대한 보안 업데이트를 큐레이팅하고 게시하는 역할을 담당합니다. 최신 런타임 버전을 사용하도록 기존 함수를 업데이트할 책임의 여부는 사용하는 런타임 업데이트 모드에 따라 달라집니다.

Lambda는 자동 런타임 업데이트 모드를 사용하도록 구성된 모든 함수에 런타임 업데이트를 적용하는 역할을 담당합니다.

함수 업데이트 런타임 업데이트 모드로 구성된 함수의 경우 사용자가 함수를 정기적으로 업데이트해야 합니다. Lambda는 사용자가 해당 업데이트를 수행할 때 런타임 업데이트를 적용하는 역할을 담당합니다. 사용자가 함수를 업데이트하지 않으면 Lambda는 런타임을 업데이트하지 않습니다. 사용자가 함수를 정기적으로 업데이트하지 않을 경우 보안 업데이트를 계속 받을 수 있도록 자동 런타임 업데이트로 구성하는 것이 좋습니다.

수동 런타임 업데이트 모드를 사용하도록 구성된 함수의 경우, 최신 런타임 버전을 사용하도록 사용자가 함수를 업데이트해야 합니다. 런타임 업데이트가 호환되지 않는 드문 경우를 대비하여 런타임 버전을 롤백하는 용도로만 이 모드를 사용하는 것이 좋습니다. 또한 함수가 패치되지 않는 시간을 최소화하려면 최대한 빨리 자동 모드로 변경하는 것이 좋습니다.

컨테이너 이미지를 사용하여 함수를 배포하는 경우 Lambda는 업데이트된 기본 이미지를 게시하는 역할을 담당합니다. 이 경우 사용자는 최신 기본 이미지에서 함수의 컨테이너 이미지를 다시 빌드하고 컨테이너 이미지를 재배포해야 합니다.

이 내용은 다음 표에 요약되어 있습니다.

Deployment mode(배포 모드) Lambda의 책임 고객의 책임
관리형 런타임, 자동 모드

최신 패치가 포함된 새 런타임 버전을 게시합니다.

기존 함수에 런타임 패치를 적용합니다.

드물게 런타임 업데이트 호환성 문제가 발생하는 경우 이전 런타임 버전으로 롤백합니다.
관리형 런타임, 함수 업데이트 모드 최신 패치가 포함된 새 런타임 버전을 게시합니다.

함수를 정기적으로 업데이트하여 최신 런타임 버전을 적용합니다.

함수를 정기적으로 업데이트하지 않을 경우 함수를 자동 모드로 전환합니다.

드물게 런타임 업데이트 호환성 문제가 발생하는 경우 이전 런타임 버전으로 롤백합니다.

관리형 런타임, 수동 모드 최신 패치가 포함된 새 런타임 버전을 게시합니다.

런타임 업데이트 호환성 문제가 발생하는 드문 경우에 임시 런타임 롤백을 수행하는 데에만 이 모드를 사용합니다.

함수를 자동 또는 함수 업데이트 모드로 전환하고 최대한 빨리 최신 런타임 버전으로 전환하합니다.

컨테이너 이미지 최신 패치가 포함된 새 컨테이너 이미지를 게시합니다. 최신 컨테이너 기본 이미지를 사용하여 정기적으로 함수를 재배포함으로써 최신 패치를 적용합니다.

AWS의 공동 책임에 대한 자세한 내용은 AWS 클라우드 보안 사이트에서 공동 책임 모델을 참조하세요.

규정 준수 요구 사항이 높은 애플리케이션

Lambda 고객은 패치 요구 사항을 충족하기 위해 일반적으로 자동 런타임 업데이트를 사용합니다. 애플리케이션에 엄격한 패치 업데이트 요구 사항이 적용되는 경우 이전 런타임 버전의 사용을 제한해야 할 수 있습니다. AWS Identity and Access Management(IAM) 을 사용하여 AWS 계정 내 사용자의 API 작업 액세스를 거부함으로써 Lambda의 런타임 관리 제어를 제한할 수 있습니다. PutRuntimeManagementConfig 이 작업은 함수의 런타임 업데이트 모드를 선택하는 데 사용됩니다. 이 작업에 대한 액세스를 거부하면 모든 함수가 기본적으로 자동 모드로 설정됩니다. 서비스 제어 정책(SCP)을 사용하여 조직 전체에 이 제한을 적용할 수 있습니다. 함수를 이전 런타임 버전으로 롤백해야 하는 경우, 정책 예외를 기준으로 허용할 수 있습니다. case-by-case