소개
실제 오류로 CloudWatch 경보를 발생시키고 설정 복구 후 사이트와 OK 상태를 확인합니다.
앞선 포트폴리오 실습을 먼저 완료하세요. 새 환경에는 앞 단계의 기능과 별도 리소스가 준비되어 있습니다. 이전 서버, 파일이나 자격 증명을 보관할 필요가 없습니다.
자격 시험과 연결
| 자격 | 시험 과제 | 실습 내용 |
|---|---|---|
| AWS Certified Cloud Practitioner (CLF-C02) | Task 3.8 | 메트릭과 경보로 오류와 복구를 관찰합니다. |
실습 개요

오류 경보 만들기
이 단계에서는 로그는 개별 사건, 메트릭은 수치, 경보는 조건을 계속 평가합니다. 앱은 실패에 Errors=1, 성공에 0을 보냅니다. 알림이나 자동 복구는 설정하지 않습니다. 이 Errors 메트릭은 /website 페이지 요청만 측정합니다. 이미지와 다른 파일은 별도 로그 이벤트를 만듭니다.
프로젝트로 이동합니다.
cd /home/labex/project
식별자를 읽습니다.
source website.env
echo "$INSTANCE_ID"
설정을 읽습니다. Namespace는 계열 분류, Application=portfolio 차원은 이 앱을 선택합니다. 고해상도 메트릭을 10초 Sum으로 평가하고 0보다 크면 ALARM입니다.
cat website-alarm.json
JSON으로 경보를 만듭니다.
aws cloudwatch put-metric-alarm --cli-input-json file://website-alarm.json
상태를 읽습니다.
aws cloudwatch describe-alarms --alarm-names portfolio-errors
처음에는 INSUFFICIENT_DATA일 수 있습니다. TreatMissingData=missing은 데이터 없음을 성공으로 처리하지 않습니다. 경보가 앱을 복구하지는 않습니다.
실제 오류 감지하기
이 단계에서는 잘못된 JSON을 게시하여 실제 오류를 만듭니다.
잘못된 파일을 읽습니다.
cat profile-broken.json
SCP로 프로필을 덮어씁니다.
scp -F ssh_config profile-broken.json ubuntu@"$PUBLIC_IP":/home/ubuntu/portfolio/profile.json
사이트를 새로고침하여 Website unavailable을 확인한 뒤 정확한 문구로 503 로그를 읽습니다.
aws logs filter-log-events --log-group-name "$LOG_GROUP" --filter-pattern '"status=503"'
약 10초 평가 기간을 기다리고 페이지를 새로고침한 뒤 경보를 읽습니다.
aws cloudwatch describe-alarms --alarm-names portfolio-errors
실제 /website status=503과 ALARM을 확인합니다. SSH와 서버가 실행돼도 앱은 실패할 수 있습니다. 수동 상태 변경은 사용하지 않습니다.

사이트 복구하고 회복 확인하기
이 단계에서는 정상 프로필을 게시하여 앱과 모니터링을 각각 확인합니다.
정상 파일을 읽습니다.
cat profile-working.json
SCP로 복원합니다.
scp -F ssh_config profile-working.json ubuntu@"$PUBLIC_IP":/home/ubuntu/portfolio/profile.json
페이지를 새로고침하여 Alex Morgan과 이미지를 확인한 뒤 200 로그를 읽습니다.
aws logs filter-log-events --log-group-name "$LOG_GROUP" --filter-pattern '"status=200"'
새 성공 요청만 있는 평가 기간을 기다리고 새로고침한 뒤 경보를 읽습니다.
aws cloudwatch describe-alarms --alarm-names portfolio-errors
이전 503은 남지만 새로운 /website status=200과 OK가 회복을 보여 줍니다. 데이터 없는 상태로 OK를 대신할 수 없습니다.

실습 모니터링과 사이트 정리하기
이 단계에서는 지정한 실습 리소스만 삭제합니다.
인스턴스를 종료합니다.
aws ec2 terminate-instances --instance-ids "$INSTANCE_ID"
종료를 기다립니다.
aws ec2 wait instance-terminated --instance-ids "$INSTANCE_ID"
portfolio-errors 경보를 삭제합니다.
aws cloudwatch delete-alarms --alarm-names portfolio-errors
실습 로그 그룹을 삭제합니다.
aws logs delete-log-group --log-group-name "$LOG_GROUP"
준비된 버킷, 이미지, 역할, 참조 로그와 네트워크는 유지합니다.
요약
실제 503으로 ALARM을 확인하고 프로필 복구 후 200과 OK를 확인한 뒤 실습 리소스를 정리했습니다.



