본문 바로가기

Cloud-computing/AWS

[AWS]Instance Scheduler on AWS

https://docs.aws.amazon.com/ko_kr/solutions/latest/instance-scheduler-on-aws/architecture-overview.html
  • 인스턴스(EC2, RDS)의 시작 및 중지 일정을 구성

 

CloudFormation 배포

Cloudformation template from AWS
https://s3.amazonaws.com/solutions-reference/aws-instance-scheduler/latest/instance-scheduler.template

CloudFormation 생성 Link

 

  • Region(s)
    • 인스턴스가 예약된 지역, 공백이라면 현재 지역으로 설정
  • Frequency
    • 스케줄러를 실행할 빈도
  • Cross-account roles
    • 교차 계정 액세스 역할에 대한 ANR의 쉼표로 구분된 목록입니다. 인스턴스를 시작하고 중지하려면 스케줄러가 선택한 모든 계정에서 이러한 역할을 생성해야 합니다.
  • Memory size
    • Lambda 메모리 사이즈

스택 세부 정보 지정

3단계 - 스택 옵션 구성

  • default or 필요한 설정 추가

4단계 - 검토

  • AWS CloudFormation에서 IAM 리소스를 생성할 수 있음을 승인합니다.

생성된 리소스 확인

DynamoDB

스케줄 정의

DynamoDB - ConfigTable

definition 참고 - schedule, period
https://docs.aws.amazon.com/ko_kr/solutions/latest/instance-scheduler-on-aws/components.html#schedules

  • begintime만 지정하는 경우 수동으로 인스턴스를 종료
    • begintime을 09:00, weekdays 설정하는 경우 11:59분에 인스턴스 중지
  • override_status
    • running: 스케줄대로 시작은 가능하지만, 수동으로 종료해야함(그전까지는 중지안함)
    • stopped: 스케줄대로 중지는 가능하지만, 수동으로 시작해야함(그전까지는 시작안함)
  • retain_running
    • 기간이 시작되기 전에 인스턴스가 수동으로 시작된 경우 솔루션이 실행 기간 종료 시 인스턴스를 중지하지 않도록 할지 여부를 선택합니다.

기간(period) 정의

{
  "type": {
    "S": "period"
  },
  "name": {
    "S": "jeff-start"
  },
  "begintime": {
    "S": "00:00"
  },
  "description": {
    "S": "ec or rds instance start"
  },
  "endtime": {
    "S": "03:00"
  },
  "weekdays": {
    "SS": [
      "0-4"
    ]
  }
}

  • weekdays
    • 0: 월요일

스케줄(scheduler) 정의

  • jeff-running
{
  "type": {
    "S": "schedule"
  },
  "name": {
    "S": "jeff-running"
  },
  "description": {
    "S": "Instances running"
  },
  "periods": {
    "SS": [
      "jeff-start"
    ]
  },
  "timezone": {
    "S": "Asia/Seoul"
  },
  "use_metrics": {
    "BOOL": false
  }
}

동작 확인

instanace가 stop/running 상태로 변경되고 태그에 state: stopped or started 가 달리는 것을 확인할 수 있다.

Cloudwatch log에서 설정한 시간 마다 실행되는 메시지를 확인할 수 있다.

{
    "action": "scheduler:run",
    "configuration": {
        "tag_name": "Schedule",
        "default_timezone": "Asia/Seoul",
        "trace": true,
        "use_metrics": false,
        "schedule_clusters": false,
        "create_rds_snapshot": false,
        "schedule_lambda_account": true,
        "started_tags": "state=started",
        "stopped_tags": "state=stoped",
        "regions": [
            "ap-northeast-2"
        ],
        "scheduled_services": [
            "ec2"
        ],
        "schedules": {
            "jeff-running": {
                "name": "jeff-running",
                "timezone": "Asia/Seoul",
                "stop_new_instances": true,
                "use_metrics": false,
                "enforced": false,
                "hibernate": false,
                "use_maintenance_window": false,
                "schedule_dt": "2022-12-02T00:30:12.717647+09:00",
                "periods": [
                    "jeff-start"
                ]
            },
## 중략
    },
    "dispatch_time": "2022-12-01 15:30:14.320155"
}

참고

Instance Scheduler on AWS
https://docs.aws.amazon.com/ko_kr/solutions/latest/instance-scheduler-on-aws/welcome.html