AWS Systems Manager를 이용하여 원하는 시간에 EC2 Stop, Start 하기

1. 개요

1.1 개요

AWS에서 Reserved를 이용하거나, Server Resizing을 하는 등 서버의 비용을 절약하는 방법은 다양 합니다.

그러나 제일 좋은 방법은 서버를 사용하지 않을 때 서버를 중지 시키는 방법일 것입니다.

물론 서버 중지를 수동으로 할 수 있지만, 중지 하는 것을 잊어버리는 경우도 있고 매번 중지하는게 번거로울 수 있습니다.

EC2를 자동으로 중지, 시작할 수 있는 방법은 다양하게 있습니다.

Lambda를 이용하거나 AWS CLI, SDK 등을 활용할 수 있습니다.

그러나 위와 같이 코드를 이용하는 방법은 적용하는데까지 Learning curve가 필요 합니다.

우리는 그 중 AWS에서 제공하는 AWS Systems Manager 기능을 이용하여

간단하게 EC2를 중지, 시작하는 방법에 대해 알아 보겠습니다.

이 기능을 사용 하면 사용하고자 하는 시간에만 인스턴스를 실행하여 비용을 절감할 수 있습니다.

개발이나 검증 용도의 서버에 적용을 고려하기 좋습니다.

1.2 동작 방식

  1. Maintenance Windows(유지 관리 기간) 시간에 맞춰 task 실행
  2. task를 수행할 자동화 문서 참조
  3. 자동화 문서에 따른 EC2 Stop, Start 작업 수행

1.3 비용

  • 자동화
    AWS System Manager의 자동화 기능을 사용하면 AWS 리소스 전체에서 일반적인 반복 IT 작업 및 관리 작업을 안전하게 자동화 할 수 있습니다.
    고객은 사용량에 대해서만 지불하며, 단계 수와 기간에 따라 요금이 부과 됩니다.
  • 단계 수
    단계는 자동화 실행 과정에서 리소스별로 수행된 작업으로 정의 됩니다. 각 계정의 프리 티어는 월 100,000개의 단계를 무료로 제공 합니다.
    프리 티어를 초과하면 각 기본 단계에 대해 단계당 0.002 USD의 요금이 부과 됩니다.
  • 단계 기간
    각 aws:executeScript 작업 단계에는 매월 5,000초프리 티어 이후 초당 0.00003 USD의 요금이 부과됩니다. 기간은 스크립트 실행이 시작된
    시간부터 스크립트 종료 시까지 계산되며, 가장 가까운 초로 올림 처리 됩니다.

    다른 자동화 단계 유형에 대해서는 기간 요금이 부과되지 않습니다.

저희가 사용할 AWS Systems Manager Automation의 경우 매월 100,000개의 단계 및 5,000초의 단계 기간을 프리티어로 제공 합니다.

저희는 일 4회의 단계와 일 약 4초 의 단계 기간을 사용하므로 이 작업으로 인한 비용이 발생하지 않습니다.

2. AWS Systems Manager

AWS Systems Manager는 AWS에서 제공하는 서비스로 중앙 집중식 운영 허브 입니다.

AWS, 온프레미스 및 기타 클라우드의 리소스를 엔드 투 엔드로 관리 합니다.

System Manager를 활용 하여 여러 AWS 서비스에서 운영 데이터를 보고 전체 운영 작업을 자동화할 수 있습니다. 또한 관리 노드를 스캔하고 감지된 모든 정책 위반에 대해 보고함으로써 보안 및 규정 준수를 유지하는 데 도움이 됩니다.

즉 인프라를 확인하고, 제어하기 위해 사용하는 AWS 서비스 입니다.

더 자세한 내용은 아래 URL을 참고 부탁 드립니다.

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/what-is-systems-manager.html

3. 전제 조건 및 제한 사항

  • EC2에 SSM Agent 설치 및 실행

4. 구현 실습

4.1 IAM 정책 및 역할 설정

  • AWS Systems Manager를 통해 EC2를 시작하거나 중지하도록 하려면
    ec2:StartInstances 및 ec2:StopInstances 권한이 있는 IAM 역할이 필요 합니다.-IAM 콘솔을 열고 왼쪽 네비게이션 바에서 정책을 선택한 다음 정책 생성을 클릭 합니다.
  • 서비스에서 EC2를 선택 합니다.
    List : DescribeInstanceStatus
    Action : StartInstances, StopInstances
    Resource : * 를 선택 합니다.

⚙ 리소스의 경우 특정 인스턴스의 ARN을 추가하는 것이 보안 모범 사례 입니다. 학습 목적이므로 모든 리소스를 선택 하겠습니다.

  • 정책 이름을 적고 정책 생성을 완료 합니다.
  • IAM 콘솔을 열고 왼쪽 네비게이션 바에서 역할을 선택한 다음, 역할 만들기를 클릭 합니다.
  • 신뢰할 수 있는 엔티티 유형 선택에서 AWS 서비스를 선택 합니다. 사용 사례에서 Systems Manager를 선택합니다.
  • 3번 과정에서 생성한 정책을 선택합니다.
  • 역할 이름을 적고 역할 생성을 완료 합니다.

4.2 유지 관리 기간 만들기

  • Systems Manager로 이동하고 탐색 창에서 유지 관리 기간을 선택 합니다.
  • 유지 관리 기간 생성 클릭 합니다.
  • 이름과 설명을 적습니다. 등록되지 않은 대상 허용이 선택되어 있는지 확인 합니다.

⚙ 대상으로 등록하지 않은 인스턴스에 Systems Manager를 수행하기 위해 선택 합니다. 만약 체크를 해제 한다면 대상을 먼저 등록해야 합니다.

  • 이제 유지 관리 기간 일정을 설정 합니다. 저의 경우 Cron 일정 작성기와 Daily 옵션을 선택 하였습니다. 일정은 원하시는 조건에 따라 다양하게 선택할 수 있습니다.

⚙ 기간 : Maintenance window 에서 허용되는 실행 시간을 지정

작업 개시 중지 : 유지 관리 기간에 task를 중지하는 시간

예를들어 기간을 3시간으로 지정하고, 작업 개시 중지를 1시간으로 지정 한다면 마지막 1시간 동안 실행되지 않습니다. 즉 처음 2시간 동안 실행 되고 마지막 1시간 동안은 실행되지 않습니다.

이러한 설정은 시스템의 안정성을 보장하기 위해 마지막 시간 동안 시스템을 유지하기 위한 추가적인 유연성을 제공 합니다.

  • 작업 시작, 종료 날짜, 일정 시간대를 지정 합니다. (선택 사항)
  • 동일한 방법으로 EC2_auto_start 유지 관리 기간을 생성 합니다. 시각만 09:00 시로 변경 합니다.

이제 유지 관리 기간 등록이 완료 되었습니다.

해당 시간에 작동할 작업을 등록 하겠습니다.

4.3 자동화 작업 등록

  • 대상 유지 관리 기간의 작업 버튼을 선택한 다음 자동화 작업 등록을 선택 합니다.
  • 유지 관리 기간 작업 세부 정보에 이름과 설명을 입력합니다. (선택 사항)

⚙ 참고:  자동화 문서는 한 번에 하나만 등록할 수 있습니다.

  • 문서 버전 에서 런타임 시 기본 버전을 선택합니다 .
  • 작업 우선 순위는  기본적으로 1로 설정됩니다. 동일한 유지 관리 기간에 여러 작업을 등록한 경우 서로 다른 작업을 지정해야 합니다.
  • 유지 관리 기간 대상을 등록하지 않았으므로 등록되지 않은 대상 선택을 선택 합니다. 그 다음 인스턴스 목록에서 적용 대상을 선택 합니다.
  • 입력 매개변수에 대해 다음 매개변수를 지정 합니다. InstanceId : 둘 이상의 리소스를 대상으로 하려면 의사 매개변수 {{RESOURCE_ID}}를 입력합니다. AutomationAssumeRole**:** ec2:StartInstances 또는 ec2:StopInstances 권한이 있는 IAM 역할의 전체 역할 ARN을 입력합니다. 위에서 생성한 Role ARN을 적습니다.
  • 동시에 작업을 실행할 대상의 수 및 오류 임계치 값을 선택 합니다.
  • IAM 서비스 역할 에서 유지 관리 기간 서비스 역할을 선택합니다 .  아래 주어진 정책을 사용하여 역할을 생성할 수 있습니다. 역할이 없을 경우 생성 합니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand",
                "ssm:CancelCommand",
                "ssm:ListCommands",
                "ssm:ListCommandInvocations",
                "ssm:GetCommandInvocation",
                "ssm:GetAutomationExecution",
                "ssm:StartAutomationExecution",
                "ssm:ListTagsForResource",
                "ssm:GetParameters"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "states:DescribeExecution",
                "states:StartExecution"
            ],
            "Resource": [
                "arn:aws:states:*:*:execution:*:*",
                "arn:aws:states:*:*:stateMachine:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:*:*:function:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "resource-groups:ListGroups",
                "resource-groups:ListGroupResources"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "tag:GetResources"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "ssm.amazonaws.com"
                    ]
                }
            }
        }
    ]
  • 자동화 작업 등록을 클릭합니다.

이제 Task Execution Time 이후의 Task 실행 이력과 인스턴스 상태를 확인 합니다.

이제 EC2 중지를 자동화 하는 Maintenance 생성을 완료 하였습니다!

같은 방식으로 EC2 인스턴스를 시작하도록 다른 유지 관리 기간 작업을 구성할 수 있습니다.

5. 마무리

해당 포스트에는 Systems Manager를 활용한 EC2 중지, 기동에 대해 다뤘습니다.

Systems Manager의 변경 관리는 EC2 자동 중지 시작 외에도, S3 Bucket Encryption 자동화, AMI 생성, RDS Stop, Start 등 이미 다양한 자동화 문서를 제공하고 있으며, 원하는 자동화 문서가 없더라도 커스텀하게 문서를 만들어 유지관리 기간에 맞춰 다양한 자동화 작업을 할 수 있습니다.

이 포스팅을 통해 사용시간이 정해져있는 EC2를 자동으로 중지, 시작하여 클라우드 리소스 사용 비용 절감에 도움이 되길 바랍니다.

참조

https://repost.aws/ko/knowledge-center/ssm-ec2-stop-start-maintenance-window

관련 정보

AWS Systems Manager Maintenance Windows

Amazon EC2에 사용되는 작업, 리소스 및 조건 키

EC2 인스턴스가 Systems Manager 콘솔의 관리형 인스턴스 아래에 나타나지 않는 이유는 무엇입니까?

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다