RDSを定期的に停止させる。

停止いうてもRDSは一時停止しかできんし、手動起動した後に停止忘れても困るから毎晩動かす。

ルールとスケジュールの違い

どっちも同じようなことができる。よー似てる。どう使い分けるねん?

違いを説明されている方がおられた。作者さんありがとう。

「1対多」と「1対1」の違いがあるとはいうけど呼び出すAPIのことかな。

ペイロードに対象を複数指定はできたはず。

ec2やrds1つずつに指定して作ってくほうが運用的には楽やから、自分としてはスケジュール使う。

「このデータベースだけ停止時間遅くして」とかになったら苦しいしな。

cron式の設定

crontabっぽい書き方する。曜日に「*」やなくてなぜか「?」ってあるのが気持ち悪いなぁ。

しかもutc指定やから、朝7時はこう書く。

aws

「月曜から金曜日」は「1-5」やなくて「MON-FRI」ってやるらしい。

スケジュールの画面に「次の10個のトリガー日」が入ってたら、ちゃんと指定できてる。

1
2
3
4
5
6
Fri,1 Aug 2025 22:00:00(UTC+09:00)
Sat,2 Aug 2025 22:00:00(UTC+09:00)
Sun,3 Aug 2025 22:00:00(UTC+09:00)
Mon,4 Aug 2025 22:00:00(UTC+09:00)
Tue,5 Aug 2025 22:00:00(UTC+09:00)
:(中略)

utc指定苦手。いっつもここで確認しながら時間入れてる。作者さんありがとう。

ターゲットの設定

RDSの対象を指定。APIにStopDBInstanceってある箇所をStartDBInstanceってしたら起動するもんも作れる。

あ、ロールは先に作っとかなアカンで。

aws

eventbridgeにつけるロール

ロール作ってポリシーと信頼関係も入れとく。

aws

ロールにつけるポリシーの内容。さっきのAPI指定と似たような感じで、rds:StopDBInstanceってAction指定したら起動するのも作れる。

policy-rds-stop - IAMポリシー
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "rds:StopDBInstance" ⭐️stop以外にstartももちろんあるで
            ],
            "Resource": "*"
        }
    ]
}

信頼関係の内容。

信頼関係
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

aws

ec2も似たような指定でできる

RDSの起動と停止ってやったけど、ロールとaction指定の記述変えてAPI指定したらec2も自動起動・停止ができる。

数が多くないときでOS停止やったら、タスクスケジューラかcronをec2の中で設定してるけど、起動はeventbridge使う。

例えば「月〜金曜日の8:30-17:30だけ動かす」みたいなことに使える。

API指定は例えばec2を起動するならこのへんで選ぶ。停止やったら検索のテキストボックスにstopとか入れたらええ。

aws

ペイロード指定はホスト名やなくインスタンスIDを指定。読みにくいからホスト名指定したかったけど、方法わからんかった。

1
2
3
4
    "InstanceIds": [
        "i-xxxxxxxxxx",
        "i-xxxxxxxxxx"
    ]

ポリシーのアクション指定はこんな感じ。

1
2
3
    "Action": [
        "ec2:StartInstances"
    ]