티스토리 뷰
직접 인프라를 구축하고, 개발하면서 고통받았던 사항들 정리한 것이다.
공식 가이드 문서를 다 봤어도 놓칠만한게 꽤 있었을 것 같다.
1. Lambda@Edge는 Nodejs, Python으로만 사용가능하다.
AWS 인프라도 정리해볼 겸, Go 사용법도 익힐 겸 Lambda@Edge를 이용해서 이미지 변환을 해보려고 했다.
이미지 변환 라이브러리를 이용해서 Go 코드를 다짜놨는데 웬걸? Go는 Lambda@Edge에 사용할 수 없었다.
함수를 만들기 전에 Lambda@Egde를 미리 만들어볼걸 그랬다.
2. 아키텍처와 리전의 제한이 있다.
리전은 us-east-1, 아키텍처는 x86_64이 고정이다.
리전 고정은 CloudFront와 동일한 리전에 위치하기 위해서 인 것 같고, 아키텍처는 클라우드 호환성 때문이라고는 하는데 정확한 이유는 모르겠다.
3. Lambda@Edge를 바로 삭제할 수 없다.
먼저, CloudFront에서 연결된 함수를 해제해야한다.
CloudFront > 배포 > 동작 > 편집 맨 아래 > 함수 연결 > 원본 응답에 등록된 Lambda@Edge를 해제
그리고 생성된 Lambda@Edge 복제본(replica)가 모두 삭제되어야 한다.
그러나 복제본은 직접 삭제 할 수 없으니, 자동 삭제 될 때 까지 기다려야한다.
위 문서에서는 복제본은 일반적으로 몇 시간 내에 삭제된다고 하니 삭제안된다고 나처럼 이상한 짓하지말고 그냥 기다렸다가 지우자.
4. Lambda@Edge의 로그 확인하기
조금 어려운 이야기.
로그를 확인하기 위해서 일단 가이드문서에서는 와일드카드로 다열라고 되어있다.
이유는 Lambda@Edge의 동작방식을 어느정도 알게된다면, 알게되는 이야기이다.
Lambda@Edge는 CloudFront와 같이 움직인다.
CloudFront는 요청을 받으면, 최종 사용자와 인접한 컴퓨터(엣지 서버)를 사용하여 사용자가 콘텐츠를 사용하거나 보고자 할 때 빠르게 전송하는 방식으로 동작한다.
그럼 Lambda@Edge도 CloudFront의 엣지서버 쪽에 위치해야한다는 것이다.
그래서 Lambda@Edge는 us-esat-1가 기본 리전이지만, 엣지 서버 쪽에 위치해야하기위해 복제본(Replica)를 띄우는 방식으로 동작한다.
만약 한국(ap-norttheast-2)에서 요청이 발생하면 cloudwatch log 또한 ap-northeast-2에 생성된다.
늘 하던대로 Lambda@Edge가 us-east-1에 있으니까 여기 로그만 열어두면 되겠다 하면, 버지니아 북부의 요청만 로그가 남게 될 것이다.
5. Lambda@Edge의 메인 함수가 변경되어도, 복제본이 즉시 갱신되지 않는다.
별도로 명시해주지 않으면, Lambda@Edge의 메인 함수가 변경되어도 복제본이 즉시 갱신되지 않는다.
때문에 배포 후 메인 함수에 적용이 되고, 복제본이 갱신될 때까지 잠깐 기다려야할 수도 있다.
그리고 메인 함수를 갱신할 때, 코드베이스로 관리하지 않겠다고하면 손이 너무 많이가게 된다.
수동으로 메인 함수를 변경하고, Lambda@Edge의 복제본이 연동된 cloudfront를 재등록하는 걸 반복해야한다.
Lambda@Edge를 serverless로 관리하는 주 이유이다.
serverless framework에서는 플러그인으로 이 부분이 한방에 처리가 가능하다.
6. role에 lambdaedge 신뢰관계를 추가해야한다.
신뢰관계에 Lambda@Edge를 추가하지 않으면, 어차피 생성할때 알려준다.
그 때 알아차릴 수 있을거니까 큰 문제는 아니다.
마치며
진짜 머리박아가면서 배운 팁들이다....
이벤트가 어떻게 넘어오는지 확인하기 위해서 로그 확인을 처리하는 부분이 가장 큰 문제였지만 어떻게 해결이 됐다.
메트릭은 넘어오는데 로그가 안남아서 ???? 한 상황이 계속 발생했다.
이 블로그에서 가장 큰 도움을 받았다.
'개발 > AWS' 카테고리의 다른 글
AWS EC2에 SSL/TLS(HTTPS) 인증서 적용기 (0) | 2024.01.26 |
---|---|
AWS Lambda@Edge로 이미지 사이즈 줄이기(webp 변환) (0) | 2024.01.16 |
Go + serverless framework로 Lambda 관리하기 (0) | 2024.01.12 |
AWS S3와 CloudFront 연동 끝까지 가보기 (2) | 2024.01.05 |
AWS DynamoDB 효율적으로 조회하기 with 글로벌 보조 인덱스(Global Secondary Indexes) (0) | 2023.12.24 |
- Total
- Today
- Yesterday
- AWS EC2
- Elastic cloud
- Log
- cache
- 티스토리챌린지
- 람다
- MySQL
- ChatGPT
- OpenFeign
- springboot
- serverless
- 스프링부트
- AOP
- docker
- elasticsearch
- java
- CloudFront
- OpenAI
- lambda
- JWT
- AWS
- S3
- EKS
- terraform
- Spring
- GIT
- Kotlin
- 후쿠오카
- openAI API
- 오블완
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |