

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 스케줄러 CLI
<a name="scheduler-cli-4"></a>

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

## 사전 조건
<a name="prerequisites"></a>

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

## 자격 증명
<a name="credentials"></a>

스케줄러 CLI를 사용하기 위해서는 AWS CLI에 대한 자격 증명이 있어야 합니다. 자세한 내용은 *AWS CLI 사용 설명서*의 [구성 및 자격 증명 파일 설정](https://docs.aws.amazon.com/cli/latest/userguide/cli-config-files.html)을 참조하세요.

다음과 같은 자격 증명이 있어야 합니다.
+  `lambda:InvokeFunction` - 스케줄러 스택에서 InstanceSchedulerMain 함수를 간접 호출하고 명령줄에서 스케줄러 구성 데이터베이스의 일정 및 기간 정보를 업데이트
+  `cloudformation:DescribeStackResource` - 스택에서 AWS Lambda 함수의 물리적 리소스 ID를 검색하여 CLI 요청을 처리

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

**참고**  
프로필 이름 인수를 사용하여 프로필을 지정하는 경우 지정하는 프로필에 이러한 권한이 있어야 합니다. 프로필 이름 인수에 대한 자세한 내용은 [공통 인수](#common-arguments)를 참조하세요.

## 스케줄러 CLI 설치
<a name="install-the-scheduler-cli"></a>

1.  스케줄러 CLI 패키지***(instance\_scheduler\_cli.zip)***를 [다운로드](https://s3.amazonaws.com/solutions-reference/instance-scheduler-on-aws/latest/instance_scheduler_cli.zip)하여 컴퓨터의 디렉터리에 배치합니다.
**중요**  
파일을 자체 디렉터리에 배치하지 않고 해당 디렉터리에서 설치하면 설치에 실패합니다.

1. zip 아카이브의 압축을 자체 디렉터리(instance\_scheduler\_cli)로 풉니다.

1. 압축을 푼 CLI 패키지를 배치한 디렉터리와 동일한 디렉터리에서 Scheduler-cli를 환경에 다음 코드를 사용하여 설치합니다.
**참고**  
Scheduler-CLI에는 Python 3.8 이상과 최신 버전의 pip 및 boto3가 필요합니다. 로컬 시스템에 이러한 모든 항목이 설치되어 있지 않은 경우 Scheduler-CLI를 설치하기 전에 [pip 공식 설명서](https://pip.pypa.io/en/stable/getting-started/)에서 설치 지침을 참조하세요.

   ```
   pip install --no-index --find-links=instance_scheduler_cli instance_scheduler_cli
   ```

1. 다음 코드를 사용하여 설치가 성공했는지 확인합니다.

   ```
   scheduler-cli --help
   ```

**참고**  
원하는 경우 위와 동일한 프로세스를 사용하여 [CLI의 sdist](https://s3.amazonaws.com/solutions-reference/instance-scheduler-on-aws/latest/instance_scheduler_cli-3.0.0.tar.gz)를 다운로드하고 설치할 수 있습니다.

## 명령 구조
<a name="command-structure"></a>

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

```
scheduler-cli <command> <arguments>
```

## 공통 인수
<a name="common-arguments"></a>

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


| 인수 | 설명 | 
| --- | --- | 
|  `--stack [replaceable]<stackname>`  | 스케줄러의 이름입니다.<br /> **중요:** 이 인수는 모든 명령에 필요합니다. | 
|  `--region [replaceable]<regionname>`  | 스케줄러 스택이 배포되는 리전의 이름입니다.<br /> **참고:** 솔루션 스택과 동일한 리전에 기본 구성 및 자격 증명 파일이 설치되지 않은 경우이 인수를 사용해야 합니다. | 
|  `--profile-name [replaceable] <profilename>`  | 명령을 실행하는 데 사용할 프로필의 이름입니다. 프로필 이름이 지정되어 있지 않으면 기본 프로필이 사용됩니다. | 
|  `--query`  | 명령 출력을 제어하는 JMESPath 표현식입니다. 출력 제어에 대한 자세한 내용은 *AWS CLI 사용 설명서*의 [AWS CLI에서 명령 출력 제어](https://docs.aws.amazon.com/cli/latest/userguide/controlling-output.html)를 참조하세요. | 
|  `--help`  | 스케줄러 CLI에 유효한 명령과 인수를 표시합니다. 특정 명령과 함께 사용하면 해당 명령에 유효한 하위 명령과 인수가 표시됩니다. | 
|  `--version`  | 스케줄러 CLI의 버전 번호를 표시합니다. | 

## 가용 명령
<a name="available-commands"></a>
+  [create-period](#create-period) 
+  [create-schedule](#create-schedule) 
+  [delete-period](#delete-period) 
+  [delete-schedule](#delete-schedule) 
+  [describe-periods](#describe-periods) 
+  [describe-schedules](#describe-schedules) 
+  [describe-schedule-usage](#describe-schedule-usage) 
+  [update-period](#update-period) 
+  [update-schedule](#update-schedule) 
+  [help](#help) 

## create-period
<a name="create-period"></a>

### 설명
<a name="create-period-description"></a>

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

### 인수
<a name="create-period-arguments"></a>

 `--name`   
+ 해당 기간의 이름

  유형: 문자열

  필수 항목 여부: 예

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

  유형: 문자열

  필수 항목 여부: 아니요

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

  유형: 문자열

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

  필수 여부: 아니요

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

  유형: 문자열

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

  필수 여부: 아니요

 `--weekdays`   
+ 해당 기간의 요일

  유형: 문자열

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

  필수 여부: 아니요

 `--months`   
+ 해당 기간의 월

  유형: 문자열

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

  필수 여부: 아니요

 `--monthdays`   
+ 기간 중 해당 월의 일

  유형: 문자열

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

  필수 여부: 아니요

### 예제
<a name="create-period-example"></a>

```
$ 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
<a name="create-schedule"></a>

### 설명
<a name="create-schedule-description"></a>

일정을 생성합니다.

### 인수
<a name="create-schedule-arguments"></a>

 `--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임)

### 예제
<a name="create-schedule-example"></a>

```
$ 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
<a name="delete-period"></a>

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

  유형: 문자열

  필수 항목 여부: 예

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

 **예제** 

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

## delete-schedule
<a name="delete-schedule"></a>

### 설명
<a name="delete-schedule-description"></a>

기존 일정을 삭제합니다.

### 인수
<a name="delete-schedule-arguments"></a>

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

  유형: 문자열

  필수 항목 여부: 예

### 예제
<a name="delete-schedule-example"></a>

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

## describe-periods
<a name="describe-periods"></a>

### 설명
<a name="describe-periods-description"></a>

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

### 인수
<a name="describe-periods-arguments"></a>

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

  유형: 문자열

  필수 항목 여부: 아니요

### 예제
<a name="describe-periods-example"></a>

```
$ 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
<a name="describe-schedules"></a>

### 설명
<a name="describe-schedules-description"></a>

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

### 인수
<a name="describe-schedules-arguments"></a>

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

  유형: 문자열

  필수 항목 여부: 아니요

### 예제
<a name="describe-schedules-example"></a>

```
$ 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
<a name="describe-schedule-usage"></a>

### 설명
<a name="describe-schedule-usage-description"></a>

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

### 인수
<a name="describe-schedule-usage-arguments"></a>

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

  유형: 문자열

  필수 항목 여부: 예

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

  유형: 문자열

  필수 항목 여부: 아니요

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

  유형: 문자열

  필수 항목 여부: 아니요

### 예제
<a name="describe-schedule-usage-example"></a>

```
$ 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
<a name="update-period"></a>

### 설명
<a name="update-period-description"></a>

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

### 인수
<a name="update-period-arguments"></a>

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

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

## update-schedule
<a name="update-schedule"></a>

### 설명
<a name="update-schedule-description"></a>

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

### 인수
<a name="update-schedule-arguments"></a>

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

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

## help
<a name="help"></a>

### 설명
<a name="help-description"></a>

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

### 예제
<a name="help-example"></a>

```
$ 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` 인수가 해당 명령에 유효한 하위 명령과 인수를 표시합니다.

### 특정 명령 예시
<a name="help-example-specific-command"></a>

```
$ 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
```