

# Scheduler CLI
<a name="scheduler-cli-4"></a>

AWS での Instance Scheduler ソリューションのコマンドラインインターフェイス (CLI) を使用すると、スケジュールと期間を設定し、特定のスケジュールのコスト削減を見積もることができます。

## 前提条件
<a name="prerequisites"></a>

このソリューションの CLI には、Python 3.8 以降と boto3 の最新バージョンが必要です。

## 認証情報
<a name="credentials"></a>

Scheduler CLI を使用するには、AWS 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 リクエストを処理します。

Scheduler CLI とレスポンスによって行われたリクエストは、`AdminCliRequestHandler-yyyymmdd` ログストリームに記録されます。

**注記**  
profile-name 引数を使用してプロファイルを指定する場合、指定するプロファイルにこれらのアクセス許可が必要です。profile-name 引数の詳細については、「[共通引数](#common-arguments)」を参照してください。

## Scheduler CLI をインストールする
<a name="install-the-scheduler-cli"></a>

1.  Scheduler CLI パッケージ ** *(instance\$1scheduler\$1cli.zip)* ** を[ダウンロード](https://s3.amazonaws.com/solutions-reference/instance-scheduler-on-aws/latest/instance_scheduler_cli.zip)して、ご自分のコンピューターのディレクトリに配置します。
**重要**  
ファイルをご自分のコンピューターのディレクトリに配置せずにそのディレクトリからインストールすると、インストールは失敗します。

1. zip アーカイブをご自分のコンピューターのディレクトリ (instance\$1scheduler\$1cli) に解凍します。

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>

Scheduler CLI は、コマンドラインでマルチパート構造を使用します。次のパートでは、Scheduler CLI の Python スクリプトを指定します。Scheduler CLI には、期間とスケジュールで実行するオペレーションを指定するコマンドがあります。オペレーションの特定の引数は、コマンドラインで任意の順序で指定できます。

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

## 共通引数
<a name="common-arguments"></a>

Scheduler CLI では、すべてのコマンドで使用できる次の引数がサポートされています。


| 引数 | 説明 | 
| --- | --- | 
|   `--stack [replaceable]<stackname>`   |  スケジューラースタックの名前  **重要:** この引数はすべてのコマンドで必須です。  | 
|   `--region [replaceable]<regionname>`   |  スケジューラースタックをデプロイした AWS リージョンの名前  **注記:** デフォルトの設定ファイルと認証情報ファイルがこのソリューションのスタックと同じリージョンにインストールされていない場合は、この引数を使用する必要があります。  | 
|   `--profile-name [replaceable] <profilename>`   |  コマンドの実行に使用するプロファイルの名前。プロファイル名が指定されていない場合は、デフォルトのプロファイルが使用されます。  | 
|   `--query`   |  コマンド出力を制御する JMESPath 式。出力制御の詳細については、*AWS CLI ユーザーガイド*の「[AWS コマンドラインインターフェイスでのコマンド出力の制御](https://docs.aws.amazon.com/cli/latest/userguide/controlling-output.html)」を参照してください。  | 
|   `--help`   |  Scheduler CLI の有効なコマンドと引数を表示します。特定のコマンドとともに使用すると、そのコマンドの有効なサブコマンドと引数が表示されます。  | 
|   `--version`   |  Scheduler 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` のうち少なくとも 1 つが含まれている必要があります。

### 引数
<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^th^ 番目の曜日ごとに指定します。

  必須: いいえ

 `--months`   
+ 期間の月数

  タイプ: 文字列

  制約: 短縮された月名 (jan) または数字 (1) のカンマ区切りリスト。「-」を使用して、範囲を指定します。「/」を使用して、n^th^ 番目の月ごとに指定します。

  必須: いいえ

 `--monthdays`   
+ 期間の日数

  タイプ: 文字列

  制約: 短縮された月名 (jan) または数字 (1) のカンマ区切りリスト。「-」を使用して、範囲を指定します。「/」を使用して、月の n^th^ 日ごとに指定します。

  必須: いいえ

### 例
<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 インスタンススケジュールに追加するか、もしくは実行期間として AWS Systems Manager メンテナンスウィンドウを Amazon EC2 インスタンススケジュールに追加します。

  タイプ: 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>

Instance Scheduler スタックに設定された期間を一覧表示します。

### 引数
<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>

Instance Scheduler スタックに設定されたスケジュールを一覧表示します。

### 引数
<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 コマンド](#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>

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