Infrastructure as Code (IaC) を使用したスケジュールの管理 - AWS での Instance Scheduler

Infrastructure as Code (IaC) を使用したスケジュールの管理

重要

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

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

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

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

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

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_in_stack 属性で識別できます。その属性には、項目の作成に使用されたスタックの Amazon リソースネームが含まれます。