AWS Lambda에 state가 생긴 이유?

Nick Park·2021년 12월 3일
1

이 글을 쓰는 이유?

AWS Lambda의 '상태'에 관한 기능이 2021년 12월 6일에 완전 배포가 끝난다.

이 기능이 무엇이고 왜 필요한 지 알아보기 위해서 여러 자료를 가져다가 번역하고 읽기 쉽게 만들었다.

AWS Lambda가 뭔데?

AWS Lambda는 서버리스 컴퓨팅 서비스로 서버에 대한 운영 및 관리를 하지 않고 코드만 작성하면 자동으로 실행해준다. 직접 콘솔 코드 에디터에서 코드를 작성하거나 코드와 관련 종속성 파일을 .zip으로 말아 업로드하거나 컨테이너 이미지를 올리면 실행할 수 있다. 또한 스케일을 고려할 필요없이 자동적으로 코드 실행 요청에 응답할 수 있다.

기존에는 어떤 문제가 있었어?

람다 함수는 종종 AWS IAM이나 Amazon VPC 네트워크 인터페이스처럼 AWS의 다른 서비스로부터 리소스가 필요하다. 함수를 생성하거나 수정할 때 람다는 필요한 리소스를 프로비저닝해서 함수가 실행될 수 있도록 한다. 대부분의 경우에는 이 과정이 매우 빠르고 함수는 즉시 불리거나 변경된다. 하지만 때때로 오래 걸리는 경우도 있었다. 하지만 그 내부에서 어떤 과정이 있는 지 확인할 수 없었다.

2년 전에 AWS 기사에 따르면 AWS 람다를 위한 향상된 VPC 네트워킹에 활용한다고 했다. 이 때 Pending 단계에서는 약 60~90초 동안 필요한 ENI 리소스를 구성하게 된다. 이 상태에서 어떠한 람다 함수 콜도 실패하게 된다. 결과적으로 당시에는 부분적으로 적용됐지만 이제 모든 람다에 이 상태 라이프 사이클이 적용된다.

그래서 state의 역할은 뭔데?

리소스가 만들어지거나 수정될 때 함수의 현재 "상태"와 더 좋은 통신을 위해서 AWS Lambda가 몇몇의 람다 API actions에 의해 돌려주는 함수 정보 중 몇 가지 추가되는 속성이다. 이 변화는 함수가 불려지거나 코드가 어떻게 실행되는 지 방법에 영향을 주는 변화는 아니다.

어떤 점이 더 나아졌어?

state가 모든 함수에 추가되서 생기는 변화는 없다. 함수가 생성되고 수정되고 운영되는 것은 같다. 그러나 이 변화는 최근에 생성되거나 변경된 함수를 바로 부르거나 수정하려고 시도하는 특정한 워크 플로우에 영향을 미친다. 방금 생성되거나 변경된 함수에 API 콜을 하기 전에 Active 상태를 먼저 확인하고 LastUpdateStatus가 Successful 상태가 된다.

결국 함수 상태를 이용해서 람다 함수가 필요한 리소스가 어떻게 생성되고 있는 지 조금 더 명확히 알 수 있다. 조금 더 자세하게 각 단계가 어떤 지 살펴보자.

  • 람다 함수를 생성할 때 만들어지는 라이프 사이클 상태

Pending

Pending은 함수가 만들어질 때 겪는 첫 번째 단계다. Pending 단계에서 람다는 외부 리소스를 구성하고 생성한다. 함수는 Active 단계가 되기 전까지 어떠한 부름이나 다른 API 콜이 있더라도 실패한다.

Active

Active는 함수가 초기에 생성되는 동안 리소스의 프로비저닝과 구성이 완료된 이후의 상태이다. 함수는 Active 상태에서 불린다.

Failed

구성이나 외부 리소스를 프로비저닝하는 단계에서 에러가 발생했다는 의미이다.

Inactive

함수가 Inactive 상태에 있다는 의미는 긴 시간동안 idle 상태에 있어서 람다 서비스를 위해 외부 리소스를 다시 구성해야 한다. Inactive 상태에 있는 함수를 부를 때 리소스가 다시 만들어지기 까지 pending 상태를 유지한다. 만약 리소스가 제대로 만들어지지 않으면 다시 Inactive 상태로 돌아간다.

LastUpdateStatus

메인 함수 상태 라이프사이클의 자식 라이프사이클을 의미한다. 이 상태는 업데이트 동안만 관련이 있고 함수가 겪는 일련의 변화에 초점을 맞춘다. 이것과 관련 있는 상태는 세 가지가 있다.

  • 함수를 업데이트할 때 발생하는 라이프 사이클 상태
  • 참고로 함수는 Active나 Inactive 상태에서만 업데이트가 가능하다. Inactive 상태에서 업데이트 된 함수는 업데이트가 성공적으로 진행된 후에 Active 상태로 변경된다.

InProgress

이미 존재하는 함수가 현재 업데이트가 진행 중임을 의미한다. 함수가 InProgress 상태에 있는 동안 함수를 부르면 이전 함수의 코드와 구성을 기반으로 한다.

Successful

업데이트가 완료됐음을 의미한다. 함수가 업데이트가 완료되면 이후의 업데이트가 발생하기 전까지 이 상태를 유지한다.

Failed

함수 업데이트가 실패했을 때 볼 수 있다. 변경된 사항은 다시 롤백되고 함수의 이전 코드와 구성 환경을 이용할 수 있게 되고 Active 상태로 남게 된다.

참고 자료

  1. https://aws.amazon.com/blogs/compute/coming-soon-expansion-of-aws-lambda-states-to-all-functions/
  2. https://aws.amazon.com/lambda/
  3. https://aws.amazon.com/blogs/compute/tracking-the-state-of-lambda-functions/
profile
IT 지식을 과학 저널리즘의 관점으로 쉽고 명쾌하게

0개의 댓글