AWS

AWS Lambda와 API Gateway로 Canary Release 하기

cwchoiit 2024. 3. 3. 16:08
728x90
반응형
SMALL
728x90
SMALL

 

Canary Release

Canary Release는 배포 전략 중 하나이다. 이 배포 전략은 새롭게 배포되는 버전의 리스크를 줄이는 방법인데 기존 버전과 새로운 버전이 있을 때 기존 버전에서 바로 새로운 버전을 출시하는게 아니라 기존 버전과 새로운 버전 두 개 모두를 프로덕션 환경으로 올리지만 가중치를 두어 사용자들이 겪는 새로운 버전에 대한 오류나 문제점에 대한 비율을 줄이는 방식이다. 예를 들어, 기존 버전이 있고 새로운 버전이 새로 출시될 때 기존 버전에 가중치를 60% 새로운 버전의 가중치를 40%로 할당해서 사용자들이 접속할 때 가중치에 따라 60%는 기존 버전을 그대로 사용하게 하고 40%는 새로운 버전을 사용하게 하므로써 새 버전에 대한 문제를 40%로 낮추는 방법이다. 이렇게 최초에 40%로 가중치를 두다가 점점 안정화가 되면 그 가중치를 점점 높여 새 버전이 안정적이게 자리잡을 수 있게 배포하는 방법이라고 생각하면 된다.

 

다음 그림이 이 내용을 완벽하게 설명한다.

 

이렇듯 대부분의 유저를 기존에 버전으로 접속하게 하고 5% 정도의 유저만 새로운 버전을 경험하게 하면서 새 버전이 가질 수 있는 문제점이나 예상하지 못한 문제를 줄이는 방법이라고 생각하면 된다. 이 방법을 AWS Lambda와 API Gateway도 사용할 수 있다. 바로 사용해보자.

 

Lambda 버전 생성하기

우선 다음은 가장 기본 형태의 람다 함수 코드이다. 소스 코드가 중요한 게 아니고 버전에 따른 가중치를 두는것을 중점으로 봐보자.

이러한 형태의 결과를 뱉는 람다 함수가 있고 이에 대한 버전을 만들어보자. 

버전을 만들기 위해 우측 상단 Actions > Publish new version 클릭

 

Version description을 다음과 같이 old로 작성해보자.

 

Publish 버튼을 클릭하면 버전이 만들어지고 다음과 같이 Versions 탭을 클릭해보면 새로 생긴 버전이 보인다.

 

이 상태에서 소스 코드를 다음과 같이 변경해보자. 리턴하는 문자열을 "New Version !!!" 이라고 작성했다. 이 상태에서 Deploy 버튼을 클릭한다.

 

이제 다시 버전을 만들어보자. 이번엔 new 라는 Description을 지어주자.

 

그럼 버전 리스트에 두 개의 버전이 보인다.

 

이렇게 만들고 별칭을 생성하자. Actions > Create alias 클릭

 

설정 부분은 다음과 같다.

- Name: production

- Description: prod via canary

- Version: 1

- Weighted alias

     - Additonal version: 2 / 40%

 

이렇게 설정하면 버전 1에 대한 가중치가 60%, 2에 대한 가중치가 40%로 이 람다 함수가 실행된다는 의미다. 이렇게 만든 alias를 API Gateway에 등록하면 퍼센티지에 맞게 유저가 실행하는 람다 함수가 정해진다.

 

API Gateway에서 원하는 리소스 내 메서드를 만든다. 메서드를 만들 때 다음과 같이 새로 만든 별칭을 넣어줘야 한다.

Lambda function을 선택 후 생성된 람다함수를 클릭한다음 그 뒤에 ":<alias-name>"를 입력해준다.

이렇게 리소스와 메서드를 만들었으면 이제 배포를 하면 된다. 우측 상단 Deploy API 버튼 클릭 

 

설정 부분은 다음과 같다.

- Stage: New stage

- Stage name: v1

 

Stage를 만들면 다음과 같이 해당 스테이지로 접속할 수 있는 URL을 알려준다. 이 URL에 아까 만든 리소스대로 접속해보자.

 

 

그럼 다음과 같이 각 가중치에 맞게 해당 버전을 응답으로 돌려준다. 60% / 40% 이니까 두번에 한번 정도 낮은 가중치의 버전이 노출됐다.

 

 

결론

이렇게 Canary Release를 Lambda와 API Gateway를 이용해서 수행할 수 있었다.

728x90
반응형
LIST

'AWS' 카테고리의 다른 글

AWS Lambda와 Step functions  (0) 2024.03.04
AWS Lambda와 Layers  (0) 2024.03.04
AWS Lambda를 API Gateway에 등록하기  (0) 2024.03.03
AWS Lambda  (0) 2024.03.03
AWS KMS를 사용해서 암호화 - 복호화하기  (0) 2024.02.26