If you run Python 3.10 on AWS Lambda: it's deprecated this Friday (Oct 31). Gotchas moving to 3.12+
AWS Lambda Python 3.10 지원 종료: 10월 31일 이후 Python 3.12 이상으로 옮길 때 확인할 점
AWS Lambda의 Python 3.10 런타임은 2026년 10월 31일 지원 종료 단계에 들어갑니다. 기존 함수는 계속 실행되지만 보안 업데이트와 기술 지원이 끝나며, 2027년부터 생성과 업데이트도 차례로 막힙니다. Python 3.12 이상으로 옮길 때는 Amazon Linux 2023용 네이티브 의존성과 패키지 호환성을 점검해야 합니다.
- 주제
에디터 노트
Python 런타임 변경에서 가장 큰 작업은 버전 문자열 교체가 아니라 AL2에서 AL2023으로 바뀌는 환경에 맞춰 네이티브 의존성을 다시 빌드하고 애플리케이션 호환성을 확인하는 일입니다. 특히 글은 `urllib3` 1.x가 OpenSSL 3에서 실패한다고 단정하지 않고, 오래된 `requests` 고정 버전이 `urllib3` 2.x 사용을 막는 문제와 유지보수 종료를 구분합니다. 댓글의 OpenSSL 관련 주장은 글이 확인한 범위를 넘어섭니다. Pydantic과 `StrEnum` 댓글은 런타임 호환성 점검이 패키지 설치 여부에 그치지 않고 import 및 직렬화 결과까지 포함한다는 사례입니다. Docker 이미지로 해결할 수 있다는 의견에는 패치와 의존성 관리 책임이 남는다는 반박도 붙습니다. 한편 제목의 "this Friday"는 날짜와 맞지 않습니다. 2026년 10월 31일은 토요일이며, 본문에 적힌 AWS 일정의 날짜와 구분해야 합니다.
AI 요약
AWS Lambda의 Python 3.10 런타임은 2026년 10월 31일 deprecated 상태가 됩니다. 기존 함수 호출은 계속 가능하지만 AWS는 보안 및 기타 업데이트와 기술 지원을 중단할 수 있습니다. 이후 생성과 업데이트 제한은 단계적으로 적용됩니다.
적용 일정
10월 31일부터 Lambda 콘솔에서 Python 3.10 함수를 만들거나 업데이트할 수 없습니다. CLI, SAM, CloudFormation은 2027년 7월 29일까지 함수 생성을 지원하고, 기존 함수 업데이트는 2027년 8월 31일까지 가능합니다. 그 뒤에도 함수는 계속 호출할 수 있지만 런타임은 패치 없이 유지됩니다. 인증서 만료 같은 문제로 실행이 영향을 받을 수 있습니다. Lambda에는 연장 지원 요금이 없습니다.
영향을 받는 함수를 찾으려면 리전별로 다음 명령을 실행합니다. --function-version ALL을 빼면 $LATEST만 확인합니다.
aws lambda list-functions --function-version ALL --query "Functions[?Runtime=='python3.10'].[FunctionName,Version]" --output text
AWS Health Dashboard의 Scheduled changes나 Trusted Advisor의 deprecated runtimes 검사에서도 확인할 수 있습니다.
Python 3.12 이상으로 이전할 때
Python 3.12부터 Lambda 런타임은 Amazon Linux 2(AL2) 대신 Amazon Linux 2023(AL2023)을 사용합니다. 따라서 기존 AL2 환경에서 빌드한 네이티브 의존성과 Lambda layer를 그대로 재사용하지 말고 새 운영체제 환경에 맞춰 다시 빌드해야 합니다. Python 3.12에서는 distutils가 제거됐고, 3.13에서는 cgi, crypt, telnetlib 등 오래된 표준 라이브러리 모듈이 사라졌습니다.
의존성 버전도 확인해야 합니다. 글은 requests 2.30 이전 버전이 urllib3 2.x를 막기 때문에 오래된 고정 버전을 쓰면 유지보수가 끝난 urllib3 1.26.x에 남을 수 있다고 설명합니다. requests 2.31 이상으로 올리기 전에는 urllib3 v2 마이그레이션 안내를 확인하라고 권합니다. 다만 urllib3 1.x가 OpenSSL 3에서 직접 실패한다는 AWS나 urllib3 자료는 확인하지 못했다고 덧붙입니다.
글은 지원 기간이 2029년 6월 30일까지인 Python 3.14로 옮기는 방안을 제시합니다. SAM이나 CloudFormation에서는 런타임 식별자를 python3.14로 바꾸고, Terraform에서는 runtime = "python3.14"로 설정합니다. 컨테이너 이미지 함수는 새 기반 이미지를 사용해야 합니다. AWS 권고에 따라 먼저 테스트하고 버전과 별칭을 이용해 롤백 경로를 마련합니다. Python 3.11은 AL2 기반이며 2027년 6월 30일 지원 종료 예정이라 짧은 중간 단계입니다.
Reddit 반응
- @ResidentPomegranate6 — AL2023의 OpenSSL 3에서
urllib31.x를 쓰면 오래된requests고정 버전이 문제를 일으킵니다. 런타임을 바꾸기 전에requests를 2.31 이상으로 올리거나urllib32.x로 올리세요. - @timmywick — 좋은 지적입니다. 버전 충돌이 분명하게 드러나기보다 SSL 오류로 보여 놓치기 쉽습니다. Python 3.10을 유지한 채
requests와urllib3를 먼저 별도 배포하면 어떤 변경이 문제를 일으켰는지 구분하기도 쉽습니다. - @lasithajay — Pydantic v1을 쓰고 있다면 조심하세요. Lambda에서 가장 큰 골칫거리였습니다. Python 업그레이드 자체는 괜찮았지만 Pydantic 호환성 때문에 부작용이 계속 생겼습니다.
- @timmywick — Pydantic v2로 옮기면
pydantic-core가 컴파일 패키지라 배포할 Python 버전과 아키텍처에 맞춰 layer나 zip을 빌드해야 합니다. 그렇지 않으면 import에 실패합니다. 지금 v2로 완전히 옮기기 어렵다면 v2에 포함된pydantic.v1shim으로 시간을 벌 수 있습니다. - @Senior_Ad9680 — 애플리케이션을 AWS의 최신 Python 버전으로 올릴 수 없다면 Docker 이미지로 배포하면 기본적으로 문제가 해결됩니다.
- @acdha — 그러면 나중에 더 많은 문제가 생깁니다. 지난주에만 중요한 보안 업데이트가 두 건 있었는데 의존성을 패치하지 않으면 받을 수 없습니다.
- @jamesinc — 저희에게 가장 큰 문제는 Python 3.11의
StrEnum도입과str, Enum을 상속한 클래스의 직렬화 동작 변화였습니다. - @timmywick — 오류가 나지는 않고 f-string, 로그, 쿼리 매개변수에
active대신Status.ACTIVE가 표시되는 식으로 문제가 생깁니다. 3.11에서str, Enum조합의format()동작이str()에 맞춰 바뀌었습니다.StrEnum으로 바꾸거나 필요한 곳에서.value를 명시하면 됩니다. - @TMiguelT — "짧은 중간 단계"라는 표현이 무슨 뜻인가요? 의미를 알아보기 어렵습니다.
- @nicholashairs — 진짜 질문이라고 보고 답하면 단기 해결책이라는 뜻입니다. 표현이 조금 어색하지만 가끔 접한 표현이기는 합니다.