LoginSignup
2
2

EKS Managed Node Group を EventBridge で毎日「起動/削除」する

Last updated at Posted at 2023-07-19

はじめに

EKS の検証で数台の Node を起動しているが、業務時間外は使わないので停止をしたい。毎回手動で起動/削除するのが面倒なので、なんとか自動化できないか調査したところ、EventBridgeで実現できそうなので検証した。

概要

アーキテクチャは以下の通り

  • 起動、停止用の EventBridge を作成する
  • トリガーは cron とし、決められた日時に EKS API を実行する
  • EKS API の UpdateNodegroupConfig で、EKS Managed Node Group の Desired Capacity (希望する台数)をアップデートする

作成手順

作成手順は下記の通り

  • EventBridge 用の IAM Role を作成する
  • EC2起動用の EventBridge Scheduler を作成する
  • EC2削除用の EventBridge Scheduler を作成する

EventBridge 用の IAM Role を作成する

信頼ポリシー

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

インラインポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "eks:UpdateNodegroupConfig",
            "Resource": "*"
        }
    ]
}

※ ここではインラインポリシーを使用しているが、IAM ポリシーでも可能
※ Resource 句は Node Group を指定するとより厳格になる

起動用の EventBridge Scheduler を作成する

主要な設定のみ記載

スケジュール(cron)
月曜日から金曜日の 9:00 に EC2 を起動させる場合

0 9 ? * 2-6 *

ターゲット
Amazon EKS の 「UpdateNodegroupConfig」 を選択
最小0台、最大4台、希望する台数4台の場合、入力値は下記の通り
なお「クラスタ名」と「ノードグループ名」は自身の環境に合わせて設定する

{
  "ClusterName": "クラスタ名",
  "NodegroupName": "ノードグループ名",
  "ScalingConfig": {
    "MinSize": 0,
    "MaxSize": 4,
    "DesiredSize": 4
  }
}

参考:UpdateNodegroupConfig

アクセス許可
事前に作成した EventBridge 用の IAM Role を指定する

その他のパラメータ
任意の値を指定する

削除用の EventBridge Scheduler を作成する

主要な設定のみ記載

スケジュール(cron)
月曜日から金曜日の 19:00 に EC2 を削除させる場合

0 19 ? * 2-6 *

ターゲット
Amazon EKS の 「UpdateNodegroupConfig」 を選択
最小0台、最大4台、希望する台数0台の場合、入力値は下記の通り
なお「クラスタ名」と「ノードグループ名」は自身の環境に合わせて設定する

{
  "ClusterName": "クラスタ名",
  "NodegroupName": "ノードグループ名",
  "ScalingConfig": {
    "MinSize": 0,
    "MaxSize": 4,
    "DesiredSize": 0
  }
}

参考:UpdateNodegroupConfig

アクセス許可
事前に作成した EventBridge 用の IAM Role を指定する

その他のパラメータ
任意の値を指定する

動作確認

ノードグループのページにある「更新履歴」から Config のアップデート履歴、内容が確認できる

下記の例では1時間おきに起動/削除を繰り返している
スクリーンショット 2023-07-19 16.51.05.png

苦労した点

EventBridge のターゲットで指定する入力値の JSON のサンプルがなく、フォーマットが分からなかった。一旦 boto3 の例とデフォルトの例を元にアッパーキャメルで書いたところうまく行った。(その他のケースは未検証)

CloudFormation Template

あとで書く

2
2
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
2
2