⏰ 작업 예약
- 충분히 예상 가능한 부하를 사전에 예약하기 위해 작업 예약 기능을 추가하였다.
- 대학교 포털 사이트의 경우 6개월에 한 번씩 수강신청이 진행되기 때문에 해당 시기에 부하가 예상된다.
- 따라서 일정한 시점에 ECS를 업데이트하여 부하에 대비할 수 있도록 구성하였다.
- 기존 아키텍처에서는 WEB과 WAS의 ECS 클러스터 내에 각각 2개의 컨테이너가 존재한다. 수강신청 기간에는 각각의 클러스터 내 컨테이너 개수를 5개로 변경하여 높은 접속률이 발생하여도 수강신청에 무리가 가지 않도록 구성하였다.
🐑 AWS Lambda
- AWS 람다는 서버리스 컴퓨팅 서비스로, 애플리케이션을 실행하기 위한 별도의 서버 셋업 없이 곧바로 코드를 실행해주는 서비스이다.
- AWS 람다에서 ECS 서비스 업데이트를 통해 클러스터 내 작업 개수를 증가시킬 수 있도록 코드를 작성하였다.
import boto3
import json
def lambda_handler(event, context):
springClusterName = event['springCluster']
springServiceName = event['springService']
nginxClusterName = event['nginxCluster']
nginxServiceName = event['nginxService']
client = boto3.client('ecs')
response1 = client.update_service(
cluster=springClusterName,
service=springServiceName,
desiredCount = 5)
response2 = client.update_service(
cluster=nginxClusterName,
service=nginxServiceName,
desiredCount = 5)
response = response1 + response2
print(response)
🌉 EventBridge
- EventBridge는 EDA(Event Driven Architecture)를 구성하는 데 도움을 주는 AWS의 서버리스 서비스이다. AWS 서비스 뿐만 아니라 SaaS 서비스, 개인 애플리케이션에서 보내는 이벤트/데이터를 받아 원하는 SNS나 Lambda와 같은 타겟으로 보내주는 역할을 한다.
- 해당 프로젝트에서는 EventBridge를 사용해 Lambda에 트리거를 걸어 설정한 시간에 Lambda 코드가 실행되어 ECS가 업데이트 되도록 구성하였다.
- 6개월에 한 번씩 UTC 00:00 (한국 시간 09:00)에 트리거 발생
cron(0 0 20 2/6 ? *)

