

# Infrastructure as Code (IaC) を使用したスケジュールの管理
<a name="manage-schedules-using-infrastructure-as-code-iac"></a>

**重要**  
ハブスタックのデプロイが完了したら、別のテンプレートを使用してスケジュールをデプロイします。

AWS での Instance Scheduler には、AWS CloudFormation を通じてスケジュールを設定および管理するために使用できるカスタムリソース (`ServiceInstanceSchedule`) が用意されています。カスタムリソースは、Amazon DynamoDB の Instance Scheduler 設定テーブルと同じデータに PascalCase キーを使用します (例については以下のテンプレートを参照してください)。スケジュールのフィールドの詳細については、「[スケジュールの定義](schedule-reference.md#schedule-definitions)」を参照してください。期間のフィールドの詳細については、「[期間の定義](period-reference.md#period-definitions)」を参照してください。

カスタムリソースを使用してスケジュールを作成すると、そのスケジュールの名前はデフォルトでカスタムリソースの論理リソース名になります。別の名前を指定するには、カスタムリソースの Name プロパティを使用します。また、このソリューションはデフォルトでプレフィックスとしてスケジュール名にスタック名を追加します。スタック名をプレフィックスとして追加しない場合は、`NoStackPrefix` プロパティを使用します。

Name プロパティと `NoStackPrefix` プロパティを使用する場合は、必ず一意のスケジュール名を選択していることを確認してください。同じ名前のスケジュールが既に存在する場合は、リソースは作成または更新されません。

IaC を使用してスケジュール管理を始めるには、次のサンプルテンプレートをコピーして貼り付け、好きなだけスケジュールをカスタマイズしてください。ファイルを .template ファイル (例: `my-schedules.template`) として保存し、AWS CloudFormation を使用して新しいテンプレートをデプロイします。完成したスケジュールテンプレートの例については、「[サンプルスケジュール](period-reference.md#period-definitions)」を参照してください。

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  ServiceInstanceScheduleServiceTokenARN:
    Type: String
    Description: (Required) service token arn taken from InstanceScheduler outputs
Metadata:
  'AWS::CloudFormation::Designer': {}
Resources:
  SampleSchedule1:
    Type: 'Custom::ServiceInstanceSchedule'
    Properties:
      ServiceToken: !Ref ServiceInstanceScheduleServiceTokenARN #do not edit this line
      NoStackPrefix: 'False'
      Name: my-renamed-sample-schedule
      Description: a full sample template for creating cfn schedules showing all possible values
      Timezone: America/New_York
      Enforced: 'True'
      Hibernate: 'True'
      RetainRunning: 'True'
      StopNewInstances: 'True'
      UseMaintenanceWindow: 'True'
      SsmMaintenanceWindow: 'my_window_name'
      Periods:
      - Description: run from 9-5 on the first 3 days of March
        BeginTime: '9:00'
        EndTime: '17:00'
        InstanceType: 't2.micro'
        MonthDays: '1-3'
        Months: '3'
      - Description: run from 2pm-5pm on the weekends
        BeginTime: '14:00'
        EndTime: '17:00'
        InstanceType: 't2.micro'
        WeekDays: 'Sat-Sun'

  SampleSchedule2:
    Type: 'Custom::ServiceInstanceSchedule'
    Properties:
      ServiceToken: !Ref ServiceInstanceScheduleServiceTokenARN #do not edit this line
      NoStackPrefix: 'True'
      Description: a sample template for creating simple cfn schedules
      Timezone: Europe/Amsterdam
      Periods:
      - Description: stop at 5pm every day
        EndTime: '17:00'
```

テンプレートをデプロイする場合は、AWS での Instance Scheduler のデプロイ用に ServiceTokenARN を指定する必要があります。この ARN は、デプロイされた Instance Scheduler スタックに移動し、**[出力]** を選択して、`ServiceInstanceScheduleServiceToken.` を探すことで CloudFormation 内で確認できます。

**重要**  
DynamoDB コンソールまたは Scheduler CLI を使用して、カスタムリソースを使用して設定されたスケジュールと期間を削除または変更しないでください。そうすると、スタックに保存されたパラメータとテーブル内の値の間に競合が発生します。また、DynamoDB コンソールまたは Scheduler CLI を使用して作成されたスケジュールには、カスタムリソースを使用して設定された期間を使用しないでください。

メインの Instance Scheduler スタックを削除する前に、カスタムリソースを使用して作成されたスケジュールと期間を含むすべての追加スタックを削除する必要があります。カスタムリソーススタックには、メインスタックの DynamoDB テーブルへの依存関係が含まれているためです。

DynamoDB の設定テーブルで、カスタムリソースで設定されたスケジュールと期間は **configured\$1in\$1stack** 属性で識別できます。その属性には、項目の作成に使用されたスタックの Amazon リソースネームが含まれます。