오토 스케일링 웹 서비스 배포 (Kiro CLI)
AWS General ImmersionDay 워크샵 - 심화 모듈 > 고급 모듈 - 웹 애플리케이션 > 컴퓨팅 – Amazon EC2 > 오토 스케일링 웹 서비스 배포
ℹ️ Network - Amazon VPC 실습에서 생성한 네트워크 인프라를 사용하여 부하에 따라 자동으로 확장/축소할 수 있고 고가용성을 보장하는 웹 서비스를 배포합니다. 이전 챕터에서 생성한 웹 서버 AMI와 VPC-Lab 네트워크 인프라를 사용합니다.
⚠️ 이 가이드는 Kiro CLI를 사용하여 진행합니다. VPC 생성과 웹 서버 인스턴스 시작 실습이 사전에 완료되어 있어야 합니다.
1단계: ALB용 보안 그룹 생성
Application Load Balancer에 사용할 보안 그룹을 생성합니다.
VPC-Lab에 보안 그룹을 생성해줘. 이름은 "web-ALB-SG", 설명은 "ALB Security Group"으로 하고, 인바운드 규칙으로 HTTP(80번 포트)를 Anywhere(0.0.0.0/0)에서 허용해줘.
2단계: 대상 그룹(Target Group) 생성
ALB가 트래픽을 전달할 대상 그룹을 생성합니다. 아직 등록할 인스턴스는 없습니다.
VPC-Lab에 대상 그룹을 생성해줘. 이름은 "Web-TG", 타겟 타입은 instance, 프로토콜은 HTTP, 포트는 80으로 해줘. 인스턴스는 아직 등록하지 마.
3단계: Application Load Balancer 생성
퍼블릭 서브넷에 ALB를 생성하고 대상 그룹을 연결합니다.
ℹ️ 장애 허용성과 고가용성을 위해 여러 Availability Zones에 걸쳐 리소스를 배포하는 것이 모범 사례입니다.
VPC-Lab에 Application Load Balancer를 생성해줘. 이름은 "Web-ALB", internet-facing으로 설정하고, 퍼블릭 서브넷 1a와 1c 두 곳에 배치해줘. 보안 그룹은 방금 만든 "web-ALB-SG"를 사용하고, 리스너는 HTTP:80으로 대상 그룹 "Web-TG"에 포워딩해줘.
4단계: Auto Scaling 인스턴스용 보안 그룹 생성
Launch Template을 통해 생성되는 인스턴스가 사용할 보안 그룹을 생성합니다. ALB에서 들어오는 HTTP 트래픽만 허용합니다.
VPC-Lab에 보안 그룹을 하나 더 생성해줘. 이름은 "ASG-Web-Inst-SG", 설명은 "HTTP Allow"로 하고, 인바운드 규칙으로 HTTP(80번 포트)의 소스를 "web-ALB-SG" 보안 그룹으로 설정해줘. ALB를 통해서만 트래픽이 들어오도록.
5단계: Launch Template 생성
Auto Scaling Group에서 사용할 Launch Template을 생성합니다. 이전 실습에서 만든 Custom AMI(Web Server v1)를 사용합니다.
EC2 Launch Template을 생성해줘. 이름은 "Web", 설명은 "Immersion Day Web Instances Template - Web only"로 해줘. AMI는 이전에 만든 "Web Server v1"을 사용하고, 인스턴스 타입은 t2.micro, 키 페어 없이 진행. 보안 그룹은 "ASG-Web-Inst-SG"를 사용해줘. 인스턴스 태그로 Name=Web Instance를 추가하고 Instances와 Volumes 모두에 적용해줘. IAM 인스턴스 프로파일은 SSMInstanceProfile로 설정해줘.
ℹ️ SSMInstanceProfile IAM role이 없다면 Kiro에게 다음과 같이 요청하세요:
SSM용 IAM role을 만들어줘. 이름은 SSMInstanceProfile로 하고, AmazonSSMManagedInstanceCore 정책을 연결해줘. EC2가 assume할 수 있도록 trust policy도 설정해줘.
6단계: Auto Scaling Group 생성
Launch Template을 사용하여 Auto Scaling Group을 생성합니다. 프라이빗 서브넷에 인스턴스를 배치하고 ALB와 연결합니다.
Auto Scaling Group을 생성해줘. 이름은 "Web-ASG", Launch Template은 방금 만든 "Web"을 사용해줘. VPC-Lab의 프라이빗 서브넷 1a와 1c에 배치하고, 기존 ALB 대상 그룹 "Web-TG"에 연결해줘. 그룹 크기는 Desired 2, Min 2, Max 4로 설정하고, Target Tracking Scaling Policy로 평균 CPU 사용률 목표값 30%로 설정해줘. CloudWatch 그룹 메트릭 수집도 활성화해줘. 인스턴스 태그로 Name=ASG-Web-Instance를 추가해줘.
| 설정 | 값 |
|---|---|
| Auto Scaling Group 이름 | Web-ASG |
| Launch Template | Web |
| VPC | VPC-Lab |
| 서브넷 | 프라이빗 서브넷 1a, 1c |
| 대상 그룹 | Web-TG |
| Desired Capacity | 2 |
| Minimum Capacity | 2 |
| Maximum Capacity | 4 |
| Scaling Policy | Target Tracking - 평균 CPU 30% |
7단계: 리소스 생성 확인
모든 리소스가 올바르게 생성되었는지 확인합니다.
Auto Scaling Group "Web-ASG"의 상태를 확인해줘. 인스턴스가 2개 실행 중인지, ALB "Web-ALB"가 active 상태인지, 대상 그룹 "Web-TG"에 인스턴스가 healthy로 등록되었는지 확인해줘.
현재까지 구성된 아키텍처
이제 고가용성을 갖추고 부하에 따라 자동으로 확장되는 웹 서비스를 구축했습니다! 지금까지 생성한 서비스의 구성은 다음과 같습니다.
축하합니다! Application Load Balancer, Security groups, Launch Template, Auto Scaling Group을 사용하여 확장 가능하고 고가용성을 갖춘 웹 서비스를 성공적으로 배포했습니다.
💡 한 번에 요청하기: 위 단계를 하나의 프롬프트로 한 번에 요청할 수도 있습니다.
us-east-1 리전 VPC-Lab에 오토 스케일링 웹 서비스를 배포해줘. 먼저 ALB용 보안 그룹 "web-ALB-SG"(HTTP 80 Anywhere 허용)와 대상 그룹 "Web-TG"(instance, HTTP:80)를 만들고, ALB "Web-ALB"를 퍼블릭 서브넷 1a/1c에 internet-facing으로 생성해서 Web-TG에 포워딩해줘. 그 다음 ASG 인스턴스용 보안 그룹 "ASG-Web-Inst-SG"(HTTP 80, 소스는 web-ALB-SG)를 만들고, Launch Template "Web"을 생성해줘(AMI: Web Server v1, t2.micro, 키 페어 없음, 보안 그룹: ASG-Web-Inst-SG, 태그: Name=Web Instance, IAM 프로파일: SSMInstanceProfile). 마지막으로 Auto Scaling Group "Web-ASG"를 만들어줘(Launch Template: Web, 프라이빗 서브넷 1a/1c, 대상 그룹: Web-TG, Desired 2/Min 2/Max 4, Target Tracking CPU 30%, CloudWatch 메트릭 활성화, 태그: Name=ASG-Web-Instance). 완료되면 전체 상태를 확인해줘.