스케줄러 CLI - AWS 인스턴스 스케줄러

스케줄러 CLI

AWS 인스턴스 스케줄러 명령줄 인터페이스(CLI)를 사용하면 일정 및 기간을 구성하고 지정된 일정에 대한 비용 절감을 추정할 수 있습니다.

사전 조건

이 솔루션의 CLI에는 Python 3.8 이상과 최신 버전의 boto3가 필요합니다.

보안 인증 정보

스케줄러 CLI를 사용하기 위해서는 AWS CLI에 대한 자격 증명이 있어야 합니다. 자세한 내용은 AWS CLI 사용 설명서구성 및 자격 증명 파일 설정을 참조하세요.

다음과 같은 자격 증명이 있어야 합니다.

  • lambda:InvokeFunction - 스케줄러 스택에서 InstanceSchedulerMain 함수를 간접 호출하고 명령줄에서 스케줄러 구성 데이터베이스의 일정 및 기간 정보를 업데이트

  • cloudformation:DescribeStackResource - 스택에서 AWS Lambda 함수의 물리적 리소스 ID를 검색하여 CLI 요청을 처리

스케줄러 CLI 및 응답의 요청은 AdminCliRequestHandler-yyyymmdd 로그 스트림에 로깅됩니다.

참고

프로필 이름 인수를 사용하여 프로필을 지정하는 경우 지정하는 프로필에 이러한 권한이 있어야 합니다. 프로필 이름 인수에 대한 자세한 내용은 공통 인수를 참조하세요.

스케줄러 CLI 설치

  1. 스케줄러 CLI 패키지(instance_scheduler_cli.zip)다운로드하여 컴퓨터의 디렉터리에 배치합니다.

    중요

    파일을 자체 디렉터리에 배치하지 않고 해당 디렉터리에서 설치하면 설치에 실패합니다.

  2. zip 아카이브의 압축을 자체 디렉터리(instance_scheduler_cli)로 풉니다.

  3. 압축을 푼 CLI 패키지를 배치한 디렉터리와 동일한 디렉터리에서 Scheduler-cli를 환경에 다음 코드를 사용하여 설치합니다.

    참고

    Scheduler-CLI에는 Python 3.8 이상과 최신 버전의 pip 및 boto3가 필요합니다. 로컬 시스템에 이러한 모든 항목이 설치되어 있지 않은 경우 Scheduler-CLI를 설치하기 전에 pip 공식 설명서에서 설치 지침을 참조하세요.

    pip install --no-index --find-links=instance_scheduler_cli instance_scheduler_cli
  4. 다음 코드를 사용하여 설치가 성공했는지 확인합니다.

    scheduler-cli --help
참고

원하는 경우 위와 동일한 프로세스를 사용하여 CLI의 sdist를 다운로드하고 설치할 수 있습니다.

명령 구조

스케줄러 CLI는 명령줄에서 멀티파트 구조를 사용합니다. 다음 부분에서는 스케줄러 CLI python 스크립트를 지정합니다. 스케줄러 CLI에는 기간 및 일정에 대해 수행할 작업을 지정하는 명령이 있습니다. 작업의 특정 인수는 명령줄에 원하는 순서로 지정할 수 있습니다.

scheduler-cli <command> <arguments>

공통 인수

스케줄러 CLI는 모든 명령이 사용할 수 있는 다음과 같은 인수를 지원합니다.

인수 설명

--stack [replaceable]<stackname>

스케줄러의 이름입니다.

중요: 이 인수는 모든 명령에 필요합니다.

--region [replaceable]<regionname>

스케줄러 스택이 배포되는 리전의 이름입니다.

참고: 솔루션 스택과 동일한 리전에 기본 구성 및 자격 증명 파일이 설치되지 않은 경우이 인수를 사용해야 합니다.

--profile-name [replaceable] <profilename>

명령을 실행하는 데 사용할 프로필의 이름입니다. 프로필 이름이 지정되어 있지 않으면 기본 프로필이 사용됩니다.

--query

명령 출력을 제어하는 JMESPath 표현식입니다. 출력 제어에 대한 자세한 내용은 AWS CLI 사용 설명서AWS CLI에서 명령 출력 제어를 참조하세요.

--help

스케줄러 CLI에 유효한 명령과 인수를 표시합니다. 특정 명령과 함께 사용하면 해당 명령에 유효한 하위 명령과 인수가 표시됩니다.

--version

스케줄러 CLI의 버전 번호를 표시합니다.

가용 명령

create-period

설명

기간을 생성합니다. 기간에는 begintime, endtime, weekdays, months 또는 monthdays 항목 중 하나 이상이 포함되어야 합니다.

인수

--name
  • 해당 기간의 이름

    유형: 문자열

    필수 항목 여부: 예

--description
  • 규칙에 대한 설명입니다.

    유형: 문자열

    필수 여부: 아니요

--begintime
  • 실행 기간이 시작되는 시간입니다. begintimeendtime을 지정하지 않으면 실행 기간은 00:00~23:59으로 설정됩니다.

    유형: 문자열

    제약 조건: H:MM 또는 HH:MM 형식

    필수 여부: 아니요

--endtime
  • 실행 기간이 중지되는 시간입니다. begintimeendtime을 지정하지 않으면 실행 기간은 00:00~23:59으로 설정됩니다.

    유형: 문자열

    제약 조건: H:MM 또는 HH:MM 형식

    필수 여부: 아니요

--weekdays
  • 해당 기간의 요일

    유형: 문자열

    제약 조건: 축약된 일 이름(mon) 또는 숫자(0)의 쉼표로 구분된 목록 형식 -을 사용하여 범위를 지정합니다. /를 사용하여 해당 주 중 n번째 요일마다로 지정합니다.

    필수 여부: 아니요

--months
  • 해당 기간의 월

    유형: 문자열

    제약 조건: 축약된 월 이름(jan) 또는 숫자(1)의 쉼표로 구분된 목록 형식 -을 사용하여 범위를 지정합니다. /를 사용하여 n번째 월마다로 지정합니다.

    필수 여부: 아니요

--monthdays
  • 기간 중 해당 월의 일

    유형: 문자열

    제약 조건: 축약된 월 이름(jan) 또는 숫자(1)의 쉼표로 구분된 목록 형식 -을 사용하여 범위를 지정합니다. /를 사용하여 해당 월의 n번째 일마다로 지정합니다.

    필수 여부: 아니요

예제

$ scheduler-cli create-period --name "weekdays" --begintime 09:00 --endtime 18:00 --weekdays mon-fri --stack Scheduler
{
   "Period": {
      "Name": "weekdays",
      "Endtime": "18:00",
      "Type": "period",
      "Begintime": "09:00",
      "Weekdays": [
         "mon-fri"
      ]
   }
    }

create-schedule

설명

일정을 생성합니다.

인수

--name
  • 일정의 이름입니다.

    유형: 문자열

    필수 항목 여부: 예

--description
  • 일정에 대한 설명입니다.

    유형: 문자열

    필수 여부: 아니요

--enforced
  • 인스턴스에 대해 예약된 상태를 적용합니다.

    필수 여부: 아니요

--use-metrics
  • Amazon CloudWatch의 지표를 수집합니다.

    필수 여부: 아니요

--periods
  • 일정의 실행 기간 목록입니다. 여러 기간을 지정하는 경우 기간 중 하나가 true인 것으로 평가되면 솔루션이 인스턴스를 시작합니다.

    유형: 문자열

    제약 조건: 쉼표로 구분된 기간 목록 형식 <period-name>@[replaceable]<instance type>을 사용하여 기간의 인스턴스 유형을 지정합니다. 예를 들어 weekdays@t2.large입니다.

    필수 항목 여부: 예

--retain-running
  • 기간이 시작되기 전에 인스턴스가 수동으로 시작된 경우 실행 기간이 끝날 때 솔루션에 의해 인스턴스가 중지되는 것을 방지합니다.

    필수 여부: 아니요

--ssm-maintenance-window
  • AWS Systems Manager 유지 관리 기간을 Amazon EC2 인스턴스 일정에 실행 기간으로 추가합니다.

    유형: 문자열

    필수 여부: 아니요

--do-not-stop-new-instances
  • 실행 기간 외에 실행 중인 경우 인스턴스에 처음으로 태그를 지정할 때는 인스턴스를 중지하지 마십시오.

    필수 여부: 아니요

--timezone
  • 일정에서 사용할 시간대입니다.

    유형: 문자열 배열

    필수 여부: 아니요(이 인수를 사용하지 않으면 기본 솔루션 스택의 기본 시간대가 사용됨)

--use-maintenance-window
  • Amazon RDS 인스턴스 일정의 실행 기간으로 Amazon RDS 유지 관리 기간을 추가하거나 Amazon EC2 인스턴스 일정의 실행 기간으로 AWS Systems Manager 유지 관리 기간을 추가합니다.

    유형: true/false

    필수 여부: 아니요(기본값은 true임)

예제

$ scheduler-cli create-schedule --name LondonOfficeHours --periods weekdays,weekends --timezone Europe/London --stack Scheduler
{
   "Schedule": {
      "Enforced": false,
      "Name": "LondonOfficeHours",
      "StopNewInstances": true,
      "Periods": [
         "weekends",
         "weekdays"
      ],
      "Timezone": "Europe/London",
      "Type": "schedule"
   }
}

delete-period

--name
  • 해당 기간의 이름입니다.

    유형: 문자열

    필수 항목 여부: 예

중요

이 기간이 기존 일정에 사용되는 경우 삭제하기 전에 해당 일정에서 해당 기간을 제거해야 합니다.

예제

$ scheduler-cli delete-period --name weekdays --stack Scheduler
{
   "Period": "weekdays"
}

delete-schedule

설명

기존 일정을 삭제합니다.

인수

--name
  • 해당 일정의 이름입니다.

    유형: 문자열

    필수 항목 여부: 예

예제

$ scheduler-cli delete-schedule --name LondonOfficeHours --stack Scheduler
{
   "Schedule": "LondonOfficeHours"
}

describe-periods

설명

인스턴스 스케줄러 스택에 대해 구성된 기간을 나열합니다.

인수

--name
  • 설명할 특정 기간의 이름입니다.

    유형: 문자열

    필수 여부: 아니요

예제

$ scheduler-cli describe-periods --stack Scheduler
{
   "Periods": [
      {
         "Name": "first-monday-in-quarter",
         "Months": [
            "jan/3"
         ],
         "Type": "period",
         "Weekdays": [
            "mon#1"
         ],
         "Description": "Every first Monday of each quarter"
      },
      {
         "Description": "Office hours",
         "Weekdays": [
            "mon-fri"
         ],
         "Begintime": "09:00",
         "Endtime": "17:00",
         "Type": "period",
         "Name": "office-hours"
      },

      {
         "Name": "weekdays",
         "Endtime": "18:00",
         "Type": "period",
         "Weekdays": [
            "mon-fri"
         ],
         "Begintime": "09:00"
      },
      {
         "Name": "weekends",
         "Type": "period",
         "Weekdays": [
            "sat-sun"
         ],
         "Description": "Days in weekend"
      }
   ]
}

describe-schedules

설명

인스턴스 스케줄러 스택에 대해 구성된 일정을 나열합니다.

인수

--name
  • 설명할 특정 일정의 이름입니다.

    유형: 문자열

    필수 여부: 아니요

예제

$ scheduler-cli describe-schedules --stack Scheduler

{
   "Schedules": [
      {
         "OverrideStatus": "running",
         "Type": "schedule",
         "Name": "Running",
         "UseMetrics": false
      },
      {
         "Timezone": "UTC",
         "Type": "schedule",
         "Periods": [
            "working-days@t2.micro",
            "weekends@t2.nano"
         ],
         "Name": "scale-up-down"
      },
      {
         "Timezone": "US/Pacific",
         "Type": "schedule",
         "Periods": [
            "office-hours"
         ],
         "Name": "seattle-office-hours"
      },
      {
         "OverrideStatus": "stopped",
         "Type": "schedule",
         "Name": "stopped",
         "UseMetrics": true
      }
   ]
}

describe-schedule-usage

설명

일정 내에서 실행되는 모든 기간을 나열하고 인스턴스의 청구 시간을 계산합니다. 이 명령을 사용하여 일정을 시뮬레이션해 잠재적 절감액과 일정을 생성하거나 업데이트한 후의 실행 기간을 계산합니다.

인수

--name
  • 해당 일정의 이름입니다.

    유형: 문자열

    필수 항목 여부: 예

--startdate
  • 계산에 사용되는 기간의 시작 날짜입니다. 기본 날짜는 현재 날짜입니다.

    유형: 문자열

    필수 여부: 아니요

--enddate
  • 계산에 사용되는 기간의 종료 날짜입니다. 기본 날짜는 현재 날짜입니다.

    유형: 문자열

    필수 여부: 아니요

예제

$ scheduler-cli describe-schedule-usage --stack InstanceScheduler --name seattle-office-hours
{
   "Usage": {
      "2017-12-04": {
         "BillingHours": 8,
         "RunningPeriods": {
            "Office-hours": {
               "Begin": "12/04/17 09:00:00",
               "End": "12/04/17 17:00:00",
               "BillingHours": 8,
               "BillingSeconds": 28800
            }
         },
         "BillingSeconds": 28800
      }
   },
   "Schedule": "seattle-office-hours"

update-period

설명

기존 프로필을 업데이트합니다.

인수

update-period 명령은 create-period 명령과 동일한 인수를 지원합니다. 인수에 대한 자세한 내용은 기간 생성 명령을 참조하세요.

중요

인수를 지정하지 않으면 해당 인수가 기간에서 제거됩니다.

update-schedule

설명

기존 일정을 업데이트합니다.

인수

update-schedule 명령은 create-schedule 명령과 동일한 인수를 지원합니다. 인수에 대한 자세한 내용은 create-schedule 명령을 참조하세요.

중요

인수를 지정하지 않으면 해당 인수가 일정에서 제거됩니다.

도움

설명

스케줄러 CLI에 대한 유효한 명령과 인수 목록을 표시합니다.

예제

$ scheduler-cli --help
usage: scheduler-cli [-h] [--version]
                     {create-period,create-schedule,delete-period,delete-schedule,describe-periods,describe-schedule-usage,describe-schedules,update-period,update-schedule}
                     ...

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit

subcommands:
  Valid subcommands

  {create-period,create-schedule,delete-period,delete-schedule,describe-periods,describe-schedule-usage,describe-schedules,update-period,update-schedule}
                        Commands help
    create-period       Creates a period
    create-schedule     Creates a schedule
    delete-period       Deletes a period
    delete-schedule     Deletes a schedule
    describe-periods    Describes configured periods
    describe-schedule-usage
                        Calculates periods and billing hours in which
                        instances are running
    describe-schedules  Described configured schedules
    update-period       Updates a period
    update-schedule     Updates a schedule

특정 명령과 함께 사용하면 --help 인수가 해당 명령에 유효한 하위 명령과 인수를 표시합니다.

특정 명령 예시

$ scheduler-cli describe-schedules --help
usage: scheduler-cli describe-schedules [-h] [--name NAME] [--query QUERY]
                                        [--region REGION] --stack STACK

optional arguments:
  -h, --help         show this help message and exit
  --name NAME        Name of the schedule
  --query QUERY      JMESPath query to transform or filter the result
  --region REGION    Region in which the Instance Scheduler stack is
                        deployed
  --stack STACK, -s STACK
                     Name of the Instance Scheduler stack