1. 소개
- 기능: 이 솔루션은 대량 트래픽 발생 시 웹사이트로 수신되는 사용자 요청을 버퍼링 할 수 있는 기능을 제공
- 작성자: AWS
- 라이선스: Apache license 2.0
- AWS 솛루션?
✓ AWS 서비스, 코드 및 구성을 조합하여 바로 배포할 수 있는 솔루션 (https://aws.amazon.com/ko/solutions/)
✓ ‘콘텐츠 전송 및 엣지 서비스’ 분야에 소개된 Virtual Waiting Romm on AWS 솔루션
2. Deployment
- 자세한 내용은 아래 가이드를 참조하기 바라며, 아래에 설치 및 테스트 내용을 간략하게 기술하였음
https://docs.aws.amazon.com/solutions/latest/virtual-waiting-room-on-aws/automated-deployment.html
- Prerequisites
✓ If there are no existing APIs defined in this Region, install the aws-virtual-waiting-room-api-gateway-cw-logs-role.template.
- Launch the getting-started stack
✓ Install the aws-virtual-waiting-room-getting-started.template AWS CloudFormation template.
CloudFomation template 설치 시에 입력하는 stack name는 24문자 이내로 설정해야 함. 초과 시 SNS queue 생성 도중에 queue명이 80자리를 초과하여 에러가 발생됨. (아래 설치결과 A 참조)
총 3개의 stack (CoreModule, AuthorizerModule, SampleModule)이 설치됨
- 설치 결과
✓ SampleModule stack 설치 후 stack의 Outputs (위 설치결과 B 참조)의 ControlPanelURL과 WaitingRoomURL 페이지를 이용하여 테스트 하였음
3. Test the waiting room
A. Generate AWS keys to call the IAM secured APIs
- Create an IAM user and change a group (aws-virtual-waiting-room-CoreMod-ProtectedApiGroup-*)
✓ Waiting Room Private REST API(API Gateway)를 실행할 수 있는 권한을 부여
B. Control Panel UI
- ControlPanel 접속, 위에서 생성한 IAM User의 Access key와 Secret access key 입력
C. Waiting Room UI
- Waiting 단계
✓ 접속된 Waiting room 페이지에서 Waiting Room Public Rest API(API Gateway)의 리소스 assign_queue_num을 호출하고 Request ID를 리턴 받음
▷ https://d4w5*******.cloudfront.net/assign_queue_num?event_id=Sample
✓ 본인 순번을 얻기 위해서 Waiting Room Public REST API의 리소스 queue_num을 호출 함
▷ https://d4w5*******.cloudfront.net/queue_num?event_id=Sample&request_id=f2ef8fc4-d3cd-4367-a92e-a9e177c59683
✓ Serving Position과 Waiting Room size 정보를 얻기 위해 반복적으로 Waiting Room Public REST API의 리소스 waiting_num과 serving_num를 호출 함
▷ https://d4w5*******.cloudfront.net/waiting_num?event_id=Sample
▷ https://d4w5*******.cloudfront.net/serving_num?event_id=Sample
- Waiting 상태 변경 단계
✓ ‘Control Panel UI’ 페이지의 ‘Increment Serving Counter’ 항목을 1로 설정 후 반영하면 Serving Counter가 증가됨
✓ ‘Waiting Room UI’ 페이지에서 본인 순번이 서빙 순번과 같거나 작은 상태가 되면 waiting_num과 serving_num API 호출을 중단하고 페이지 내의 버튼을 ‘Waiting for line to advance’에서 ‘Check out now’로 변경 및 활성화되며, 클릭 시 Token 발급됨
- Token 발급 단계
✓ Waiting Room Public REST API(API Gateway)의 리소스 generate_token를 호출하여 토큰을 발급 받음
▷ https://d4w5*******.cloudfront.net/generate_token
✓ 발급된 토큰은 JWT(JSON Web Tokens) 형식이며, https://jwt.io/ 사이트에서 디코딩 가능
✓ ‘Control Panel UI’에서 Active token수와 Expired token 수를 조회할 수 있으며, DynamoD에 토큰은 저장됨
- 비즈니스 API 호출 단계
✓ ‘Waiting Room UI’ 페이지에서 ‘Purchase now; 버튼을 클릭하면 Access 토큰을 Request header에 추가하여 비즈니스 API를 호출
▷ https://r1j8e****.execute-api.ap-northeast-2.amazonaws.com/store/checkout
✓ 토큰 없이 해당 API를 호출하면 인증 에러가 발생됨
✓ 비즈니스 API (Lambda) snippet
from chalice import Chalice, CustomAuthorizer, CORSConfig, Response
app = Chalice(app_name='core-api-authorizers-sample')
WAITING_ROOM_AUTH = CustomAuthorizer('WaitingRoomAuthorizer',
header='Authorization',
authorizer_uri='PLACEHOLDER')
CORS_CONFIG = CORSConfig(allow_origin='*',
allow_headers=['*'],
max_age=600,
expose_headers=['*'],
allow_credentials=True)
RESPONSE_HEADERS = {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
}
@app.route('/checkout',
methods=['GET'],
authorizer=WAITING_ROOM_AUTH,
cors=CORS_CONFIG)
def checkout():
"""
This function represents a /checkout API endpoint.
"""
return Response(status_code=200,
body={"result": "Success"},
headers=RESPONSE_HEADERS)
4. Sequence diagram
- Enter Waiting Room (/assign_queue_num)
- Get Entrance Result (/queue_num)
- Get Serving Position (/serving_num)
- Get Entrance Token (/generate_token)
- Use API Gateway Authorizer (/generate_token)
5. Architecture
- 상세 설명
https://aws.amazon.com/ko/solutions/implementations/aws-virtual-waiting-room/
6. 타사 솔루션
- Cloudflare Waiting Room | Cloudflare
- 넷퍼널 (https://netfunnel.io/)
7. 참고 사이트
- Implementation Guide
https://docs.aws.amazon.com/solutions/latest/virtual-waiting-room-on-aws/welcome.html
- Github
https://github.com/aws-solutions/virtual-waiting-room-on-aws
- Virtual Waiting Room on AWS Developer Guide
https://github.com/aws-solutions/virtual-waiting-room-on-aws/blob/main/docs/developer-guide.md
'AWS > Solutions' 카테고리의 다른 글
Virtual Waiting Room on AWS - Inlet strategy (0) | 2022.08.21 |
---|
댓글