Always-Try(정보보안 및 일상)

AWS DNA - 1주차 Peak Load Control with Serverless - 1/3 본문

AWS

AWS DNA - 1주차 Peak Load Control with Serverless - 1/3

Always-Try 2021. 9. 13. 22:44
본 포스팅은 AWS KOREA에서 제공해는 교육인 AWS DNA에서 진행한 Hands On Labs 를 요약한 내용입니다. 단, 서비스 소개에 대한 내용은 AWS 공식 docs를 참고해서 별도로 작성했습니다.
처음 사용해보는 서비스들도 많아서 하나의 Hands On Labs 세션 당 총 3편으로 나눠서 포스팅 할 예정입니다.

 

AWS DNA 첫번째 세션이 시작됐다. 첫 번째 Hands On Labs의 주제는 Peak Load Control with Serverless 이며 간략히 요약하면 다음과 같은 환경을 구성하는 것이 목표라고 할 수 있다.

  • 실습 목표: 라이선스 또는 외부연동 등의 여러 요소로 인해 갑작스러운 트래픽 증가를 처리하기 어려운 Legacy 애플리케이션에 사이트에 도착하는 순서대로 번호표를 발급하고 사용자를 대기하도록 한 다음 순서대로 입장시킬 수 있는 환경을 구성한다.

대기 페이지 예시
프로세스
목표 아키텍처

본 포스팅에서는 소스 코드들에 대한 설명보다는 어떤 종류의 AWS 서비스를 이용해서 이러한 아키텍처를 구성할 수 있는지에 대한 서비스 소개 및 아키텍처 중심으로 설명을 진행한다. 실제로 이번 세션을 들으면서 처음 듣는 서비스들도 많았는데, AWS 서비스들을 효율적으로 활용하기 위한 아주 큰 도움이 될 것으로 생각된다.

 

2.  실습

먼저 확장 불가능한 레거시 시스템을 구성한다. 레거시 시스템 구성은 AWS DNA 팀에서 제공해준 코드를 통해 구성하는데 Cloud9을 통해 해당 코드를 배포한다.

 

1) Cloud9으로 레거시 환경을 구성

 

 

 

2) Peak Load Control을 위해 ALB와 사용자 사이에 CloudFront와 Lambda@Edge가 위치하고 이를 이용하여 사용자의 요청을 중간에 제어

  • CloudFront
    • 서비스 개요
      • Amazon CloudFront는 .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 빠르게 배포하는 웹 서비스
      • 엣지 로케이션이라고 하는 전 세계 데이터 센터 네트워크를 통해 사용자가 콘텐츠를 요청하면 가장 짧은 지연 시간(시간 지연)을 제공하는 엣지 로케이션으로 요청이 라우팅되므로 콘텐츠가 빠르게 제공됨
    • 보안 고려 사항
      • 전송 중 데이터 암호화
        • 전송 중 데이터를 암호화하려면 최종 사용자가 HTTPS를 사용하여 파일을 요청하도록 Amazon CloudFront를 구성합니다. 이렇게 하면 CloudFront가 최종 사용자와 통신할 때 연결이 암호화 됨
        • 또한 CloudFront가 오리진의 파일을 받을 때 HTTPS를 사용하도록 구성할 수 있습니다. 이렇게 하면 CloudFront가 오리진과 통신할 때 연결이 암호화 됨
      • 콘텐츠에 대한 액세스 제한
        • 서명된 URL 또는 쿠키 사용
        • Amazon S3 버킷의 콘텐츠에 대한 액세스 제한
        • Application Load Balancer가 제공하는 콘텐츠에 대한 액세스 제한
        • AWS WAF 웹 ACL 사용
        • 지리적 제한 사용
      • 로깅
    • 실습 시 활용 방안
      • 사용자의 요청을 용도별로 제어하기 위해 CloudFront로 받아서 총 3개로 나눠서 전달한다. 
        • waiting/static/* 컨텐츠는 s3, waiting/api/* 는 API Gateway로 나머지 컨텐츠는 Legacy의 ALB로 처리
          이 중 ALB로 처리된 요청은 Lambda@Edge 함수로 연결한다.

 

  • Lambda@edge
    • 서비스 개요
      •  CloudFront의 기능 중 하나로서 애플리케이션의 사용자에게 더 가까운 위치에서 코드를 실행하여 성능을 개선하고 지연 시간을 단축
      • 서비스 이름에 Lambda@Edge 라는 것은 따로 없고, Lambda에서 생성한 함수의 트리거에 CloudFront를 연결하고 해당 트리거의 배포 방법에 Lambda를 선택해서 사용
      •  
    • 보안 고려 사항
    • 실습 시 활용 방안
      • CloudFront의 맨 마지막 캡처에서 Origin request와 response가 나뉘어져 있는 것과 같이 Lambda@edge함수도 2개로 나눠서 구성한다.
        • Origin에서 CloudFront로 응답할 때 호출되는 함수
        • CloudFront에서 Origin으로 응답할 때 호출되는 함수
          • 이 함수(reponse)는 브라우저에서 전달된 쿠키에 tokenId가 없으면 새로 발급하여 DynamoDB에 저장하고 사용량이 많은 경우 Origin으로의 요청을 제어하는 역할을 수행한다.
          • 또한 발급된 tokenId를 브라우저가 유지할 수 있도록 Response 헤더에 쿠키값을 설정해주는 역할을 수행한다.

 

이후 과정은 다음 포스팅에서 계속해서 진행한다.

2021.09.13 - [AWS] - AWS DNA - 1주차 Peak Load Control with Serverless - 2/3

Comments