티스토리 뷰
aws 람다를 이용하여 개인 프로젝트를 진행하고 있는데,
개발과 운영의 버전을 따로 가져가려고 alias를 주어야 하는 상황이 생겼다.
별거 아닌 이 작업에서 며칠간 엄청난 삽질을 하여 알아낸 것을 정리하고자 한다.
(사실 회사 프로젝트에선 이미 많은 능력자 분들이 좋은 환경을 구성해 놓았는데,
개인 프로젝트에서 그것을 좀 흉내내려고 했다...)
일단 serverless framework 를 사용하고 있다는 전제하에 글을 작성하겠다.
기본적인 serverless 패키지 상에서는 배포 시 alias를 명시할 수가 없다.
deploy 명령어를 통해 배포를 하게 되면 람다들은 $LATEST 라는 버전으로 배포가 될 것이다.
물론 그렇게 배포 하고나서 aws console 에 직접 접속하여 버전별 alias를 부여 할 수 있지만
새로운 버전이 deploy 될 때 마다 특정 alias의 버전도 수동으로 업데이트 해줘야할 것이다.
따라서 추가로 패키지 설치가 필요하다. 아래 패키지를 다운로드 받자.
npm i serverless-aws-alias
해당 플러그인이 설치되었으면 serverless.yml 하단부에 해당 플러그인을 명시해준다.
plugins:
- serverless-aws-alias
이제 아래와 같이 deploy 시에 alias 옵션을 줄 수 있다. (나는 dev 라고 주었다.)
serverless deploy --alias dev
그러고 나서 aws console 의 람다 화면으로 가서 배포된 람다의 '구분자' 를 확인해보자.
방금 명시한 dev alias 로 배포가 된 것을 확인할 수 있다.
만약 동일한 옵션으로 한번 더 배포하게 되면 dev에는 버전2가 매핑될 것이고,
다른 alias로 배포할 시에, 신규 alias가 버전3 을 가져갈 것이다.
이렇게 되면 cloudwatch 를 활용한 로그 검색 시, 버전별로 확인이 가능해 진다.
여기까진 사실 큰 문제 없이 굉장히 간단하다. 그리고 난 이게 끝인줄 알았다...
이 작업 이후 잘만 실행되던 람다가 api gateway를 통해서 호출하면 에러가 났다.
'functionName' failed to satisfy constraint...
function name이 aws의 규칙과 맞지 않는다는 에러인데 도대체 이게 무슨 개소린가 싶었다.
그리고 난 진짜 function name 을 바꿔보는 등 삽질을 하다가 겨우 문제를 알아냈다.
람다에 alias를 명시하게 되면 api gateway 의 추가적인 설정이 필요했다.
serverless 배포시 state를 어떻게 명시했느냐에 따라 각자의 stage가 api gateway에 생성되었을 것이다.
(yml 파일에 명시했든, deploy에 --stage 명령어로 주었든)
나같은 경우엔 stage도 alias와 동일하게 dev로 주었기 때문에 api gateway에 dev stage가 생성되어있었다.
문제는 dev 라는 스테이지는 자동으로 dev alias의 람다를 호출할 줄 알았더니 그게 아니었던 것이다.
해당 스테이지가 특정 alias 의 람다를 호출할 수 있도록 설정해 주어야 한다.
그렇다.. 스테이지 이름과 동일하게 저게 자동으로 넘어가는줄 알았더니 내가 추가해 줬어야 했다. (진짜 눈물났다)
'functionName' failed to satisfy constraint 에러는 아무리 구글링해도 안나오고... 엉뚱한데서 시간을 다 뺏겼다.
다행히 람다 호출은 정상적으로 잘 됐다.
결론은... 나와 같은 경우를 겪는 사람이 이 글을 발견하길 바란다...
'개발 > Etc' 카테고리의 다른 글
Blocking, Non-blocking, Sync, Async 의 차이 (7) | 2021.10.19 |
---|---|
[애자일] MVP 란? (1) | 2019.09.16 |
Mongoose Query Builder 몽구스 쿼리 빌더 (0) | 2019.09.10 |
[애자일] 트럭(버스) 팩터란? (0) | 2019.04.05 |
- Total
- Today
- Yesterday
- 프로미스
- jest
- CommonJs
- 야누자이
- intellij
- springboot
- 스프링부트
- 인텔리제이
- event loop
- await
- KCD2019
- vue
- 이벤트루프
- 자바스크립트 엔진
- nuxtjs
- es6
- 테스트코드
- vue.js
- nuxt
- 빌더패턴
- 모듈시스템
- javascript engine
- javascript
- promise
- 자바스크립트
- Builder
- 근본
- vuejs
- 근본설
- KCD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |