CloudFormation を使用して、事前に定義された時間にインスタンスを停止および開始するにはどうすればよいですか?

最終更新日: 2021 年 9 月 23 日

事前に設定した時間にインスタンスを停止および起動することで、Amazon Elastic Compute Cloud (Amazon EC2) の使用量を削減したいと考えています。

簡単な説明

AWS Instance Scheduler と自動化した AWS CloudFormation テンプレートを使用して、スケジュールに基づいたインスタンスを停止および開始できます。詳細については、「自動デプロイ」を参照してください。

重要: 暗号化された Amazon Elastic Block Store (Amazon EBS) を使用する EC2 インスタンスで Instance Scheduler を使用している場合、インスタンスは起動できません。インスタンスを起動するには、EBS ボリュームを暗号化または復号するためのキーポリシーを含むキーユーザーロールを、Instance Scheduler に付与する必要があります。キーユーザーロールがこのキーを使用できるよう、AWS Key Management Service (AWS KMS) キーにキーポリシーを追加する必要があります。

解決方法

開始する前に、Instance Scheduler コマンドラインインターフェイス (CLI) をを設定します。

Instance Scheduler テンプレートを使用して、CloudFormation スタックを作成する

スタックは、AWS Lambda関数、Amazon DynamoDBテーブル、Amazon EventBridgeルール、およびAmazon CloudWatchカスタムメトリクスをデプロイします。

1.    AWS マネジメントコンソールを開きます。

2.    Instance Scheduler テンプレートで CloudFormation を開きます。あるいは、ステップ 1 に進みます。[Launch the instance scheduler stack] (インスタンススケジューラスタックの起動) ページに移動し、[Launch Solution] (ソリューションの起動) を選択します。

注: テンプレートは、デフォルトでバージニア北部リージョンで起動されます。

3.    ナビゲーションバーで、テンプレートを使用して、スタックを起動する AWS リージョンを選択してから、[Next] (次へ) を選択します。

4.    [Stack name] に、「Ec2instanceScheduler」と入力します。

5.    [Frequency] で、スケジューラを実行する頻度を、分単位で選択します。例: 5 分

注: 頻度は、EventBridge が Instance Scheduler の Lambda 関数を再度トリガーするまでに経過する分数です。多数のインスタンスがある場合は、スロットリングを回避するためにできるだけ高い頻度を使用してください。ニーズに対して頻度が十分な高さでない場合は、後で [Frequency] (頻度) のプロパティを調整できます。

6.    [Enable CloudWatch Logs] で [Yes] を選択します。

7.    [Started tags] で、「state=started」と入力します。

8.    [Stopped tags] で、「state=stopped」と入力します。

9.    [次へ] を選択します。

10.    [Options] (オプション) のページで、[Next] (次へ) を選択します。

11.    設定を確認し、「I acknowledge that AWS CloudFormation might create IAM resources」を選択します。

12.    [Create] (作成) を選択します。

期間を作成する

以下の例は、次の条件でインスタンスを作成する方法を示しています。

  • 月曜日から金曜日の午前 9 時に起動し、午後 5 時に停止する
  • 土曜日の午前 9 時に起動し、正午に停止する

この例では、2 つの期間を作成する必要があります。独自のシナリオでは、適切な数の期間を作成します。

1.    Instance Scheduler CLI に接続してから、次のコマンドを実行します。

$ scheduler-cli create-period --stack Ec2instanceScheduler --region us-west-2 --name mon-fri-9-5 --begintime 9:00 --endtime 16:59 --weekdays mon-fri
$ scheduler-cli create-period --stack Ec2instanceScheduler --region us-west-2 --name sat-9-12 --begintime 9:00 --endtime 11:59 --weekdays sat

注: us-west-2 をお客様自身のリージョンに置き換えます。期間を作成するには、DynamoDB コンソールまたはカスタムリソースを使用することもできます。期間の詳細については、開始時刻と停止時刻を参照してください。

2.    DynamoDB コンソールを開きます。

3.    [Tables] をクリックしてから、設定テーブルを選択します。

注: Instance Scheduler テンプレートは、ステートと設定の 2 つの DynamoDB テーブルを自動的に作成します。ステートテーブルは、テンプレートによって停止および開始されたインスタンスのステートを格納します。設定テーブルでは、お客様の要件に合った期間とスケジュールを指定します。

4.    [Items] (項目) ビューを選択し、設定テーブルに mon-fri-9-5sat-9-12 の期間が表示されていることを確認します。

スケジュールを作成する

1.    2 つの期間を組み合わせたスケジュールを作成するには、Instance Scheduler CLI に接続し、次のコマンドを実行します。

$ scheduler-cli create-schedule --stack Ec2instanceScheduler --name m-f9-5-sat9-12 --region us-west-2 --periods mon-fri-9-5,sat-9-12 --timezone America/New_York

2.    DynamoDB コンソールを開きます。

3.    [Tables] をクリックしてから、設定テーブルを選択します。

4.    [Items] (項目) ビューを選択し、m-f9-5-sat9-12 のスケジュールが設定テーブルに表示されていることを確認します。

スケジュールをタグ付けおよびテストする

Instance Scheduler で CloudFormation スタックを使用する場合は、Instance Scheduler の TagName パラメータを定義する必要があります。このパラメータのデフォルト値は Schedule です。スタックで TagName パラメータを使用して、Schedule の値を調べることができます。

Instance Scheduler は、インスタンスのタグをモニタリングします。インスタンスタグキーが定義されたスケジューラタグと一致する場合、Instance Scheduler は、インスタンスタグ値に設定されているスケジュールを適用します。例えば、タグのキーが [Schedule] (スケジュール) に設定され、値が m-f9-5-sat9-12 に設定されているとします。この例では、インスタンスは月曜日から金曜日の午前 9 時に起動し、午後 5 時に停止します。また、インスタンスは土曜日の午前 9 時に起動し、正午に停止します。

注: タグのキーと値では大文字と小文字が区別されます。Instance Scheduler は、実行中のインスタンスが実行期間外に手動で起動された場合、そのインスタンスを停止しません。また、Instance Scheduler は、実行期間中にインスタンスが手動で停止された場合、スケジュールが強制されない限り、インスタンスを起動しません。詳細については、Schedule definitions を参照してください。

定義済みスケジュールの使用

カスタムスケジュールのほかに、設定テーブルの定義済みスケジュールを使用することもできます。例えば、running という名前の定義済みスケジュールをテストする方法は次のとおりです。

1.    Amazon EC2 コンソールを開きます。

2.    タグ付けする停止したインスタンスを選択します。

3.    [Tags] (タグ) ビューを選択し、[Manage Tags] (タグを管理) を選択します。

4.    [Add tag] (タグを追加) を選択します。

5.    [Key] に「Schedule」と入力します。

6.    [Value] に「running」と入力します。

7.    [Save] (保存) を選択します。

8.    Amazon EC2 コンソールを更新して、Lambda 関数がトリガーされるのを待ちます。

注意: Lambda 関数がトリガーされ、エラーなしで実行されると、テスト中のスケジュールに応じて、Instance Staterunning と表示されます。CloudWatch コンソールでは、 Lambda メトリクスの呼び出しやエラーをチェックできます。

9.    DynamoDB コンソールを開きます。

10.    [Tables] をクリックして、ステートテーブルを選択します。

11.    [Items] ビューを選択し、タグ付けされたインスタンスが起動することを確認します。

注: ステートデータはステートテーブルに保存されます。

重要: 追加費用は、使用している Lambda 関数の頻度と継続時間に基づいて課金されます。また、作成した DynamoDB テーブルもしくは EventBridge ルールについても追加費用が課金されます。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?