Category Archives: AWS

AWS Certified Solutions Architect – Associate 자격 취득

꾸준히 AWS관련 업무를 맡아왔다. 업무로 다뤄 본 영역은 잘 알지만 다른 영역들은 전혀 모르는 부분들이 많았다. 매뉴얼을 읽을 때마다 전체를 조망하는데 어려움을 느꼈고 한번쯤은 몰입해 살펴봐야겠다고 생각해왔다.

2020년 11월 쯤 되니 한 해가 가는 것에 대한 조바심이 들었다. 가시적인, 스스로를 위한 성과가 필요하다고 생각했다. 그래서 미뤄뒀던 AWS SAA자격 취득을 준비했다.

학습자료

우선 예전 할인 때 사놓은 Udemy의 관련강의를 들었다. 다만 PPT를 읽는 수준에 그쳤기 때문에 만족도는 생각보다 크지 않았다. 대신 AWS SAA-C02 Study Guide라는 Github리포를 프린트해서 자주 읽었다. 이 요약본보다 더 깊은 공부가 필요한 경우는 AWS 공식 블로그와 매뉴얼, 예전에 받아놓은 AWS 관련 EBook을 함께 읽었다.

시험

2021년 1월 2일에 시험을 봤다. 사실 2020년을 마무리하면서 보려고 했는데 정리가 좀 덜되어서 연초로 옮겨 본 것이었다. 주로 영어자료를 참고했기 때문에 시험은 영어로 쳤다.

시험은 비대면으로 진행했다. 내 방에서 진행하는 비대면 시험은 처음이어서 이런 저런 절차를 처리하는데 시간이 걸렸다. 우선 책상의 모든 물건을 치워야 했다. 덕분에 새해맞이 책상정리를 하게 됐다. 또 감독관과 영어로 채팅을 하는 것은 예상하지 못해서 좀 당황했다. 신원확인은 여권을 카메라에 보는 방식으로 진행했고 책상위의 “모든” 물건은 바닥으로 옮겼다. 방이 좀 지저분했는데 노트북을 들고 방의 모든 구석구석을 보여줘야 해서 부끄러웠다. 또 예상치 못한 잡음을 방지하기 위해 창문을 닫았다. 긴장 때문에 시험 전부터 식은 땀이 났다.

시험문제는 어려웠다. 실은 공부가 많이 모자란 탓 이었다. 푸는 도중에 ‘떨어질 수도 있겠다’ 생각을 두어번 했다. 역시나 점수는 그다지 만족스럽지 않았다.

결과

793/720 으로 합격했다. 크게 더 떨어지는 부분은 없이 전체적으로 못본 것..으로 나왔다.

회고

영어가 어려웠다기 보다는 시나리오 위주의 문제를 풀기에 스터디 가이드를 외우는 것으로는 부족했다고 생각한다. 대신 AWS공식블로그의 사례연구가 큰 도움이 되었다. 비슷하지만 조금 다른 특성들에 대해서는 차이점에 대해 정확하게 아는 것이 중요하고 이게 문제로는 어떻게 나올지 상상해보는 것이 좋겠다는 생각이 들었다.

사용하지 못한 기술들이 있기 때문에 다시 공부하지 않으면 잊혀지기 쉬울 듯 하다. 다음 단계의 시험을 조만간 준비해야 공부가 수월할 것 같다.

ECS – API애플리케이션 – S3 웹리소스 고정아이피 구성

ECS로 구성된 애플리케이션의 웹 리소스의 고정아이피 구성이 필요했다. 가끔 유용하게 활용할 수 있는 사례라 구성도를 따로 그려봤다.

문제정의

  • 애플리케이션 서버는 ECS – Fargate – ALB 환경으로 구축
  • S3에 웹 리소스가 배포됨.
  • 애플리케이션 서버와 웹리소스에 고정아이피 주소 필요
  • 백엔드와의 연결은 HTTP만 사용해도 됨.

해결

  • Network Load Balancer에 고정아이피를 설정
  • NLB는 포트라우팅만 지원하므로 Nginx의 virtual server 설정으로 애플리케이션과 웹리소스 라우팅
  • Task Definition상 Nginx와 애플리케이션 서버를 하나에 둠
  • Nginx는 리버스프록시(localhost)로 애플리케이션 연결, S3와의 연결도 리모트 리버스프록시 사용.
  • S3는 Bucket Policy를 이용해 VPC고정으로 연결

구성도

참고

AWS ALB Target Group의 Draining 이 너무 길다면

최근 ECS를 도입하면서 Rolling Deploy 를 적용했다. 이전에는 EC2인스턴스마다 방문하면서 배포를 했다면 이제는 새로운 Fargate기반 태스크가 생성되면서 기존 태스크는 없애는 방식으로 배포된다.

테스트를 진행하다보니 ALB Target Group에 등록된 아이템이 Draining에 걸리는 시간이 긴 것이 눈에 들어왔다. 기본값으로 이 값은 300초가 주어지기 때문에 트래픽이 많지 않거나 커넥션을 오래 유지할 필요가 없다면 이 시간만큼 Fargate인스턴스를 더 사용하는 셈이다.

타겟그룹의 Draining에 걸리는 시간은 “Deregistration delay”항목에서 수정할 수 있다.

참고: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#deregistration-delay

AWS MySQL Aurora 최대 접속수 수정방법

오랜만에 Aurora MySQL의 최대 접속수를 다시 지정했다. 개발용도의 데이터베이스는 사용량은 작지만 여러 프로젝트들이 connection pool 을 생성하니 기본 정의값보다 올려서 사용하는 경우가 종종있다. max_connections를 다시 지정한 파라미터 그룹으로 교체하면 된다. 이건 TIL이라 할 것도 없다.

하지만 글로 남기는건 10분이면 될 일을 1시간이나 헤맸기 때문.

  1. 클러스터 파라미터그룹과 인스턴스 파라미터 그룹 양쪽에 max_connections가 있다.
  2. 파라미터 수정 후 apply immediately로는 동작하지 않아서 reboot 후 적용되었다.

변경된 수치는 다음쿼리로 확인가능하다.

mysql> select @@max_connections;
+-------------------+
| @@max_connections |
+-------------------+
|               300 |
+-------------------+
1 row in set (0.00 sec)

AWS NAT 인스턴스의 가성비 확인

AWS의 Private Subnet에 있는 인스턴스가 외부와 통신하려면 NAT를 활용해야한다. 그렇다면 NAT인스턴스를 만들어 사용할지, NAT 게이트웨이(Gateway, 이하 GW)를 사용할지 결정해야 한다.

AWS VPC 와 서브넷

VPC의 NAT Gateway 가격은 서울리전에서 $0.059 이다. 1달이 월 720시간이라면 Multiple AZ를 고려해 2개를 설치하면 월 $84.96, 약 10만원의 추가부담이 생긴다.

NAT Instance로 구성한다면 EC2 1년 선결제 없는 경우의 예약 인스턴스 사용시 c5.large, m5.large, t3.large 정도의 가격이다.

NAT GW는 기본 5Gbps의 대역폭을 지원하고 45Gbps까지 확장가능하다. 또 관리 소요가 줄어들기 때문에 AWS에서는 GW를 활용할 것을 권고하고 있다. 하지만 이런 수치는 트래픽에 따라 달라질 것이라 우리 회사의 경우 가격 부담없이 사용할 수 있을지 확인해보고 싶었다. 특히 t3.nano를 적용했을 때의 성능이 활용할만한지 궁금했다. AWS홈페이지에 나와있듯 t3.nano의 네트워크 대역폭은 최대 5Gbps 이다.

참고:
AWS, NAT 인스턴스 및 NAT 게이트웨이 비교
AWS, Amazon EC2 인스턴스 유형

적용방법

먼저 Public 서브넷의 호스트를 Private으로 옮긴 후 t3.nano 로 만든 NAT인스턴스를 각 AZ의 Public Subnet에 설치했다. 인스턴스의 AMI는 AWS 매뉴얼(참고: AWS, NAT인스턴스)에 설명된 대로 AWS에서 제공하는 AMI를 사용했다.

NAT 인스턴스 전송속도

아래 수치들은 백엔드끼리 연결된 타사와의 트래픽이다(서비스 트래픽은 로드밸런서에 연결되어있다). 제휴사와의 트래픽 중 HTTPS 단일 호스트에 200 OK 로 제한한 결과다.
결론부터 말하자면 현재 우리 트래픽으로는 t3.nano NAT인스턴스 사용시에도 큰 차이가 나지 않았다. 특히 T3계열 네트워크 속도가 “최대5Gbps” 이고 경험상 때때로 네트워크가 지연되는 경우도 자주 봤지만(소위 튕기는 현상), 이번에는 편차면에서도 크게 차이가 없음을 확인할 수 있었다.

참고)

  • Group: Before / After – 적용 전후
  • Count : 요청 및 응답수 (50만건 전후)
  • AVG: 평균 (ms 단위)
  • Min: 최소값(ms 단위)
  • Max: 최대값(ms 단위)
  • STDDEV: 표준편차(ms 단위)

NAT 인스턴스 리소스 사용률

AWS의 T계열은 CPU사용률을 고려해야한다. 하지만 현재로써는 설치된 NAT인스턴스의 CPU사용률이 높지 않아 만약 더 저렴한 인스턴스 타입이 나온다면 전환하는 것도 가능할 것으로 보인다.

 

마지막으로 비용은 t3.nano, 표준 1년 선결제 예약인스턴스, GP 8GB EBS 를 사용해 인스턴스 대당 월 $3.5가량, 2대에 $7로 NAT GW의 $84.96에 비해 크게 비용을 아껴 구성할 수 있었다.

트래픽의 크기에 따라 다르겠으나 t3.nano 로 현재 트래픽에 대응되는 것을 확인했다. 비용면에서도 훨씬 저렴하기 때문에 소규모 스타트업이라면 적용해 보는 것을 추천한다.