AWS SSM으로 장애 자동 복구
프로세스 구성하기

운영 중인 EC2의 웹 서비스(Apache 등)가 모종의 이유로 프로세스만 죽었을 때, 굳이 운영자가 접속해서 systemctl restart를 칠 필요가 있을까요?

‍

ALB가 "어? 얘 아프네(Unhealthy)"라고 감지하면, 즉시 SSM이 출동해서 "재시작 명령어"를 날려주는 구조를 만들어 봅시다.

‍

1. 전체 흐름도

ALB (장애 감지) → CloudWatch (알람 발생) → EventBridge (이벤트 수신) → SSM Automation (재시작 명령 실행) → EC2 (서비스 복구)

‍

2. 사전 준비 (Prerequisites)

시작하기 전, 딱 두 가지만 먼저 확인해 주세요.

EC2 권한 확인: 대상 EC2에 연결된 IAM Role에 AmazonSSMManagedInstanceCore 정책이 반드시 포함되어 있어야 합니다. (이게 없으면 SSM이 명령을 못 내립니다.)

‍

ALB 헬스 체크 최적화 (빠른 감지):

EC2가 포함된 **대상 그룹(Target Group)**의 상태 검사(Health checks) 탭으로 이동합니다.

간격(Interval): 5초 (최소값)

비정상 임계값(Unhealthy threshold): 2

이렇게 설정해야 장애 발생 후 약 10~15초 만에 감지가 가능합니다.

‍

3. 구축 가이드

Step 1. 재시작 '런북' 만들기 (SSM Document)

가장 먼저, "EC2에 들어가서 무슨 명령어를 칠 것인지" 정의하는 문서를 만듭니다.

[AWS Systems Manager] 콘솔 > 좌측 메뉴의 [문서(Documents)] 클릭.

[Create document] > **[Automation]**을 선택합니다.

‍

이름(Name): Restart-Apache-Httpd

콘텐츠(Content): 'Editor' 탭을 누르고 YAML을 선택한 뒤, 아래 코드를 붙여넣습니다. (기존 내용은 다 지우세요)

‍

description: Restart Apache on EC2 schemaVersion: '0.3' parameters: InstanceId: type: String description: The ID of the EC2 instance to restart Apache on. mainSteps: - name: restartApache action: 'aws:runCommand' inputs: DocumentName: AWS-RunShellScript InstanceIds: - '{{ InstanceId }}' Parameters: commands: - sudo systemctl restart httpd - echo "Apache Restarted by AWS EventBridge"

‍

설명: 이 문서는 InstanceId를 입력받아 해당 서버에서 systemctl restart httpd를 실행합니다.

**[Create document]**를 눌러 저장합니다.

Step 2. 감시자 설정 (CloudWatch Alarm)

ALB가 "서버 죽었다!"라고 외칠 조건을 설정합니다.

[CloudWatch] 콘솔 > [경보(Alarms)] > [경보 생성] 클릭.

‍

지표 선택: ApplicationELB > TargetGroup/LoadBalancer > UnHealthyHostCount 지표를 찾아서 선택합니다. (현재 사용 중인 타겟 그룹인지 꼭 확인하세요!)

‍

조건 설정:

통계: 최대값(Maximum)

기간: 1분 (중요)

임계값: 1 보다 크거나 같음 (>= 1)

경보 이름: ALB-Apache-Unhealthy-Alarm 으로 짓고 생성 완료.

Step 3. 권한 위임 (IAM Role)

EventBridge가 "SSM아, 일해라!"라고 시킬 수 있는 권한(Role)이 필요합니다.

‍

[IAM] 콘솔 > [역할(Roles)] > [역할 생성] 클릭.

신뢰할 수 있는 엔터티: 일단 'AWS 서비스' 중 아무거나(예: EC2) 선택하고 넘어갑니다. (나중에 수정할 겁니다.)

권한 정책: AmazonSSMAutomationRole 검색 후 체크하거나, 인라인 정책으로 ssm:StartAutomationExecution 권한을 줍니다.

역할 이름: EventBridge-Invoke-SSM-Role (예시) 입력 후 생성.

신뢰 관계 수정 (중요): 방금 만든 역할을 클릭 > [신뢰 관계] 탭 > **[신뢰 정책 편집]**을 누르고 아래 내용으로 교체합니다. EventBridge와 SSM 모두를 신뢰해야 합니다.

‍

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com", "ssm.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

Step 4. 연결 고리 만들기 (EventBridge Rule)

이제 알람이 울리면 SSM을 실행하도록 연결합니다.

[EventBridge] 콘솔 > [규칙(Rules)] > [규칙 생성] 클릭.

‍

이름: Auto-Restart-Apache-Rule

이벤트 패턴: '이벤트 패턴이 있는 규칙'을 선택하고, CloudWatch Alarm State Change를 선택한 뒤, 앞서 만든 ALB-Apache-Unhealthy-Alarm이 ALARM 상태가 될 때를 잡도록 설정합니다.

‍

대상(Target) 설정: (여기가 핵심입니다!)

대상 서비스: Systems Manager Automation 선택

문서(Document): Step 1에서 만든 Restart-Apache-Httpd 선택

실행 역할(Execution Role): Step 3에서 만든 IAM Role 선택

입력 구성(Input Configure): 이 부분이 중요합니다. **[상수(Constant)]**를 선택하고, 웹 서버의 Instance ID를 직접 입력해 줍니다. (예: {"InstanceId": ["i-0123456789abcdef0"]})

‍

4. 테스트 (Chaos Engineering)

설정이 끝났으니 실제로 장애를 내봅시다.

장애 유발: EC2 터미널에 접속해서 Apache를 강제로 끕니다.

‍

관제: 1~2분 정도 기다리면 CloudWatch 알람 상태가 OK → ALARM으로 바뀌는 것을 볼 수 있습니다.

복구 확인:

SSM 콘솔: [자동화(Automation)] > [실행] 탭에서 방금 작업이 Success로 떴는지 확인합니다.

EC2 터미널: 다시 접속해서 프로세스 상태를 확인합니다.

마치며

이제 여러분의 웹 서버는 24시간 감시를 받으며, 프로세스가 죽더라도 1~2분 안에 스스로 부활하는 능력을 갖추게 되었습니다.

이 구조를 응용하면 디스크 용량이 찼을 때 로그를 지우거나, 메모리가 부족할 때 임시 조치를 취하는 등 다양한 자동화 운영이 가능합니다. 지금 바로 적용해 보세요!

  • 전체 흐름도

  • 사전 준비 (Prerequisites)

  • 구축 가이드

  • 테스트 (Chaos Engineering)

관련 키워드
클라우드
관련 키워드
클라우드
관련 콘텐츠
Tech Guide
클라우드
운영 최적화
AWS
Tech Guide
Tech Guide
클라우드
보안
AWS
Tech Guide
No items found.
No items found.
No items found.
No items found.