본문 바로가기
카테고리 없음

[10/14] 배포란?/서버리스 람다생성/API Gateway를 이용한 Canary배포

by 그래놀라_ 2020. 10. 14.

배포(deploy)

최종 결과물을 운영 서버로 올리는 것 

 

최초 배포는 괜찮지만

리뉴얼이나 업그레이드 할 때는 배포할 때 주의해야한다

연속성이나 가용성을 보장해줘야함

 

 

Rolling 배포

구 버전에서 신 버전으로 점진적으로 업그레이드하는 것

 

주의해야할 것

  • 2번 4번  일시적으로 부하가 분산되지 않고 한 쪽으로 집중되는 문제
    • 부하를 견딜 수 있는가
    • 부하를 못 견디고 죽어버리면 배포 전략 실패하게 된다
  • Rollback(v2  v1)
    • v2에 문제점이 발견돼서 다시 v1으로 돌아가려할 때 다시 인스턴스를 올리는 등 많은 시간이 소요될 수 있음

 

 

Blue/Green

구 버전과 신 버전이 동시에 서비스 됨(주소 또는 포트번호로 구분)

구 버전에서 신 버전으로 일제히 전환

예) 베타 테스터 모집해서 특정 주소에서 테스트

 

Rolling 한계 극복

  • 어느 한 쪽으로 부하가 집중되지 않는다
  • 서비스가 공존하는 단계 v2가 서비스되고 있을 때에 문제가 발생되면 도메인을 v1걸로 전환하면 된다

 

제한 사항

구버전과 신버전 모두 서비스되어야하기 때문에 인스턴스가 많이 필요함 비용 증가

 

 

 

Canary

위험을 빠르게 감지할 수 있는 배포 기법

비율을 서서히 늘려가면서 새로운 버전으로 업데이트 한다

옛날에 광부들이 일산화 탄소에 예민한 카나리아를 데리고 들어갔다 

금융, 공공 서비스들

 

 

API Gateway Canary Release Deployment

 

API Gateway

개발자가 쉽게 API를 만들고, 게시, 유지보수, 모니터링할 수 있도록 하는 서비스

이걸 통해서 RESTful한 거 할 수 있다

Serverless

  • Lambda

  • API Gateway → Canary Deployment

What i'm gonna do is...
1. mathCeil함수와 mathFloor함수를 만든다
2. API 게이트웨이에서 새로운 API 생성
3. mathCeil함수를 부르는 GET method를 생성한다
4. 잘 되는지 테스트 후 deploy
5. Canary 배포를 통해 mathFloor로 바꾸는 작업 

 

 

#1 람다 함수 생성

 

 

#1-1 람다 롤 확인

 

#1-2 람다 함수 코드 작성

console.log('Loading Lambda function');

 

// handler라는 함수를 외부에서 쓸 수 있도록함

exports.handler = async(event, context, callback) => {

    let resultNum = Math.ceil(999.99);

    

    callback(null, 'this is the original function (Math.ceil) = ' + resultNum);

}

 

#1-3 디버그 창에서 확인

mathCeil함수가 하는 일 999.99를 1000으로 올림해주는 일을 한다 

 

 

* 함수 표현 방식

 

 

일반 함수

 

 

 

 

익명 함수

 

 

 

 

 

 

화살표 함수

 

 

 

 

 

#2 람다 함수 하나 더 생성

console.log('Loading Lambda function');

// handler라는 함수를 외부에서 쓸 수 있도록함

exports.handler = async(event, context, callback) => {

    let resultNum = Math.floor(999.99);

    callback(null, 'this is the original function (Math.floor) = ' + resultNum);

}

 

 

 

#3 API Gateway로 이동

#3-1 외부에서 사용자가 호출할 수 있는 주소 생성

 

 

 

mathCeil을 요청했을 때 29초 동안 응답이 없으면 오류라고 판단하고 돌아간다
이 오류는 지금 신경 안 써도 됨
파란 블럭 부분 들어가면
계속 새로고침 해도 람다함수 mathCeil 밖에 없기 때문에 이 결과만 받는다

 

 

 

#4 Canary 생성

 

 

배포한 URL로 들어가면 mathCeil함수와 mathFloor로 각각의 비율(mathCeil90, mathFloor10)로 분배되어 10번의 1번꼴로(대략) 999값이 나온다