Redshift Serverlessの使いすぎを防ぐべく、使用制限を使って利用料の監視をしました。
1日あたり$2以上使った場合はSNSトピックに通知するという設定をして、動作確認をしてみました。
使用制限の設定
マネジメントコンソールで設定する場合、Amazon Redshift サーバーレス→ワークグループの設定→ワークグループ名→制限→使用制限を管理→Redshift 処理ユニット (RPU) の最大数→制限を追加から設定します。
設定画面で入力するのは以下4点です。
- 頻度:どのスパンで利用料を計算するか指定します。[毎日/ 毎週 / 毎月]から選択します。
- 使用制限 (時間):RPU hourの閾値を入力します。計算方法は後ほど記載します。
- アクション:閾値を超えた場合のアクションを指定します。[アラート / システムテーブルへのログ / ユーザークエリを無効にする]のいずれかから選択します。
- SNSトピック:アクションで[アラート / ユーザークエリを無効にする]のどちらかを選択した場合、通知先を指定します。
設定を保存するとこのように制限IDが発行され、裏ではCloudWatchアラームが作成されていました。
閾値の計算方法
前提条件
- 今回検証に利用するRedshift ServerlessのベースRPU容量は128
- Redshift Serverlessの東京リージョンの利用料は$0.494(RPU hour)
- $2以上使ったらアラートを飛ばしたい
60秒以内のクエリ1回あたりの料金
- Serverlessの1秒あたりの料金: 0.494(RPU hour) / 60 / 60 * 128 = $0.01756444
- クエリは60秒未満は切り上げのため、1回あたり60秒とする。
- 0.01756444 * 60 = $1.05386667
金額から閾値(使用制限 (時間))を計算する
x (RPU hour) * 0.494 (USD/RPU hour) = 2 (USD)
x = 4.048584(RPU hour)
ただし、使用制限 (時間)には整数しか指定できないので、4と設定します。
通知が来るか確認する
Redshift Serverlessでselect 1
を2回実行してみます。
select 1
はシンプルなクエリで60秒以内に実行できるので1回あたり約$1です。2回実行すれば通知が来るはずです。
1回目を実行して5分ほど待ったらCloudWatchアラームのグラフがこのようになっていました。
1回目のクエリから5分ほど間をあけて2回目実行したところ、UsageLimitAvailableが0になり、無事SNSトピックのサブスクリプションに含まれるメールアドレスに通知が来ました!
おまけ
クエリを実行した時間帯のリソースのモニタリングがどうなっているかも確認しました。