소프트웨어 배포에서 "지금 실행 중인 게 정확히 무엇인지"를 알 수 있는 능력은 생각보다 중요하다. EC2 서버라면 SSH로 접속해서 패키지 버전을 확인할 수 있다. Lambda 함수라면? 코드를 올릴 때마다 $LATEST가 바뀌고, "3주 전에 배포한 버전"이 무엇이었는지 추적하기 어렵다. 버전(Version)과 별칭(Alias) 시스템은 이 문제를 해결하기 위해 설계됐다. 동시에 레이어(Layer)는 "공통 라이브러리를 매번 함수 ZIP에 포함시켜야 하는가"라는 중복 문제를 해결한다.
이 세 가지를 합치면 Lambda에서도 GitOps와 유사한 워크플로우가 가능해진다 — 코드 변경이 버전으로 불변 기록되고, 별칭이 트래픽을 점진적으로 새 버전으로 이전하며, CodeDeploy가 이 과정을 자동화한다.
$LATEST는 항상 수정 가능한 현재 작업 버전이다. 코드를 업로드하거나 환경 변수를 바꾸거나 메모리를 조정하면 $LATEST가 바뀐다. ARN은 arn:aws:lambda:region:account:function:my-func이다 — 버전 suffix가 없다. 개발과 테스트에 사용하고, 프로덕션 트래픽을 직접 받게 하면 안 된다.
**버전(Version)**은 publish-version을 호출하는 순간 $LATEST의 스냅샷이 찍혀 불변(immutable) 객체가 된다