테스트용 EC2나 RDS는 퇴근 후에 사용하지 않는 경우가 대부분이다. 비용 절감을 위해 사용하지 않을 때 리소스를 정리해야하지만 퇴근 전에 인스턴스 중지하고 출근해서 다시 켜고하는 건 너무 귀찮고 비효율적이다. Event Bridge
와 System Manager
(이하 SSM)의 Automation Document을 사용하면 EC2 뿐만 아니라 RDS도 특정 시간에 시작하고 중지할 수 있다.
다음과 같은 요구사항이 있는 사람에게 이 글이 도움이 될 것이다.
평일 오전9시에는 켜지고 오후9시가 되면 테스트 RDS가 중지되면 좋겠어요.
밤에만 사용하는 EC2가 있어서 매일 밤 10시에 켜지고 오전 6시에 꺼지게 해주세요.
구현 원리를 간단히 그림으로 표현해봤다.
AWS에서는 미리 정의된 Runbook을 제공하기 때문에 EC2 시작/중지 같이 사용 빈도가 높은 패턴들에 대해서는 사용자가 직접 스크립트를 구성하는 수고를 덜 수 있다. 특정 시간이 되면 이벤트가 발생하고, 이 이벤트가 SSM을 트리거하여 EC2를 시작/중지한다.
EC2, RDS 인스턴스를 시작하거나 중지하기 위해 EventBridge와 SSM을 사용하려면 다음 두 IAM 역할이 필요하다.
EventBridge 실행 역할은 자동으로 생성되므로 여기서는 SSM Automation Document 실행 역할을 만든다.
1. AWS Management Console에 로그인하고, IAM 콘솔로 이동한다.
2. 왼쪽의 탐색 창에서 [정책]을 선택 > [정책 생성] 버튼을 클릭한다.
3. JSON 탭을 선택하고 다음 정책들을 붙여넣는다.
📃 SSM Automation Document 실행 역할에 필요한 IAM 정책
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ssm",
"Effect": "Allow",
"Action": [
"ssm:StartAutomationExecution",
"ssm:DescribeAutomationExecutions",
"ssm:GetAutomationExecution"
],
"Resource": "*"
},
{
"Sid": "ec2",
"Effect": "Allow",
"Action": [
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": "*"
},
{
"Sid": "rds",
"Effect": "Allow",
"Action": [
"rds:StartDBInstance",
"rds:StopDBInstance"
],
"Resource": "*"
}
]
}
ssm:StartAutomationExecution
: 이 정책은 SSM이 자동화 문서를 시작할 수 있게 한다.ssm:DescribeAutomationExecutions
: 이 정책은 SSM이 자동화 실행의 상태를 설명하도록 한다.ssm:GetAutomationExecution
: 이 정책은 SSM이 특정 자동화 실행의 세부 정보를 가져올 수 있게 한다.ec2:StartInstances
and ec2:StopInstances
: 이들 정책은 SSM이 EC2 인스턴스를 시작하거나 중지할 수 있게 한다.rds:StartDBInstance
and rds:StopDBInstance
: 이들 정책은 SSM이 RDS 인스턴스를 시작하거나 중지할 수 있게 한다.4. 구분하기 쉬운 정책 이름을 입력하고 정책 생성을 선택한다.
1. IAM 콘솔로 왼쪽의 탐색 창에서 [역할]을 선택 > [역할 만들기] 버튼을 클릭한다.
2. 신뢰할 수 있는 엔터티 유형에서 AWS 서비스를 선택하고 System Manager를 선택한다.
3. 권한 추가 단계에서 앞서 생성한 정책을 명을 검색한 다음 선택한다. 이때 정책 이름을 검색하고 확인이 안된다면 엔터를 눌러보시길 ..
4. 다음으로 넘어가 역할 생성 완료하면 끝 !
5. 지금 생성한 역할은 이후 규칙을 생성할 때 AutomationAssumeRole
에 입력해야 하므로 역할의 ARN 주소를 복사해 둔다.
여기서는 평일 밤 9시마다 EC2가 종료되도록 구성해보겠다.
1. EventBridge 콘솔에서 규칙 생성을 선택한다.
2. 원하는 규칙 이름(예: stop-ec2-at-9pm
)을 입력하고 규칙 유형을 일정
으로 선택한다.
3. cron식으로 실행 시간을 지정한다. 이 크론 식은 월-금 오후9시에 이벤트가 발생하게 한다. 0 12 ? \* MON-FRI \*
4. 대상 유형을 다음과 같이 설정한다.
System Manager 자동화
AWS-StopEC2Instance
(문서는 생성하려는 규칙에 따라 StartEC2Instance등으로 교체하면 된다.)
5. 규칙을 적용할 EC2 인스턴스ID
를 입력한다.
6. 1.2단계에서 복사해둔 IAM 역할의 ARN을 AutomationAssumeRole
에 입력한다.
7. 이 특정 리소스에 대해 새 역할 생성을 선택하고 규칙 생성을 선택한다.
인스턴스 상태 변경 알람이나 직접 확인해보면 실행 여부를 확인할 수 있다. 실행 내역에 대해 자세히 확인하고 싶으면 SSM 콘솔에서 [변경관리] > [자동화] 메뉴에서 확인이 가능하다.
다수의 인스턴스를 한번에 종료하려면 인스턴스 ID를 하나하나 넣어줘야하는 불편함이 있다. 인스턴수 수가 수십대가 되는 경우라면 EventBridge와 함께 Lambda를 사용하는 게 더 효율적일 것 같다. 편리할수록 종속성이 높고 자유도가 떨어진다는 것을 매번 깨닫게 된다. ㅠㅠ. 다음에는 태그값을 기반으로 인스턴스를 시작/중지할 수 있도록 구성해봐야겠다.
AWS S3 취약점 및 보안 (0) | 2023.09.02 |
---|---|
키페어 없이 AWS CLI를 사용하여 EC2 인스턴스에 SSH로 연결하기 (0) | 2023.06.21 |
EC2 상태 변경 알람 Slack으로 받아보기 (0) | 2023.06.01 |
AWS User Notifications로 AWS EC2 상태 변경 알람 받기 (0) | 2023.05.25 |
특정 IP로만 AWS Console을 사용할 수 있게 설정 (0) | 2023.05.23 |
댓글 영역