LoginSignup
0
0

EventBridge Schedulerを使用して毎日定時にECSを起動・停止する

Posted at

はじめに

AWSコスト削減のために、使用していない時間帯はECSを停止したい。
毎回手動で起動したり停止したりするのは面倒なので、EventBridge Schedulerを使用して毎日定時にコンテナを起動/停止する。

EventBridge Scheduler について

EventBridge Rulesとの主な違い:
Amazon EventBridge スケジューラの紹介

1. IAMロール作成

スケジュール実行用のIAMロールを作成する。

AWSマネジメントコンソール > IAM > ロール > ロールの作成

信頼ポリシーは以下の通り
Principalにはscheduler.amazonaws.comを指定する

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

今回は許可ポリシーを新しく作成する。
ポリシードキュメントは以下。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"ecs:UpdateService"
			],
			"Resource": "*"
		}
	]
}

許可されるアクションにはecs:UpdateServiceを指定する。
起動も停止もこのアクションで実行可能。

2. ECS起動用のスケジュール作成

AWSマネジメントコンソール > EventBridge > スケジュール > スケジュールの作成

ステップ1

  • スケジュール名を入力
  • スケジュールパターンで「定期的なスケジュール」を選択
  • スケジュールの種類を「cron ベースのスケジュール」にする
  • 平日毎日9時に起動したいので、cron式には以下のように設定する
00 9 ? * 2-6 *

その他の項目はデフォルで次へ

ステップ2

  • ターゲットAPI:すべてのAPI
  • 検索ボックスでECSを検索し、AmazonECS > UpdateService を選択。
  • APIに渡すJSONオブジェクトに以下を記述。
{ 
    "Service": "<ECSサービス名>", 
    "Cluster": "<ECSクラスター名>",
    "DesiredCount": 1
}

DesiredCountがECSサービスの必要タスク数なので、起動したいタスク数を指定することでECSを起動することができる。

ステップ3

  • スケジュールを有効化: オン
  • スケジュール完了後のアクション:NONE
  • 実行ロール: 作成したIAMロールを指定

その他の項目はデフォルで次へ。
確認と保存で問題なければスケジュールを保存。

これで指定した時間になったらDesiredCountで指定した数のコンテナが起動する。

3. ECS停止用のスケジュール作成

起動用のスケジュールと同じ手順で作成し、cron式とDesiredCountのみ変更する

cron式

00 19 ? * 2-6 *

入力に渡すJSONオブジェクトを記述する。

{ 
    "Service": "<ECSサービス名>", 
    "Cluster": "<ECSクラスター名>",
    "DesiredCount": 0
}

上記の設定で、平日毎日19時に必要タスク数を0にすることでECSを停止することができる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0