[新機能] Amazon Redshift SpectrumやConcurrency Scalingに使用上限をつけて、通知や利用停止できる『Usage limit details』を試してみました

2020.04.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部の石川です。クラスタバージョン1.0.14677から Amazon Redshift SpectrumやConcurrency Scalingに使用上限をつけて、通知や利用停止ができる『Usage limit details』がリリースされましたので、早速試してみました。

Usage limit details とは

Amazon Redshift SpectrumとConcurrency Scalingに対する監視・通知、制御する機能です。期間(Time Period)と使用上限(Usage limit)を設定して、しきい値に達するとSNS通知、システムテーブルへのロギング、CloudWatch Alarm、機能の停止などを設定できます。

Amazon Redshift Spectrumはスキャンしたデータサイズ(TB)、Concurrency Scalingはスケーリングクラスタで実行したクエリ時間(分)に応じて追加の料金が生じます。これらの機能に対して、Usage limitを設定することで利用状況を把握し、ご予算の範囲で安心してこれらの機能を利用できるようになります。

Usage limit detailsの設定

クラスタを選択して、[Actions ▲]のメニューから[Configure usage limit]を選択します。以下のUsage limit画面の[Usage limit details]ボタンを押して、Configure usage limit画面にて設定します。

Time period

Time periodは、Daily(毎日)、Weekly(毎週)、Monthly(毎月)のいずれか指定します。

  • Daily
  • Weekly
  • Monthly

期間の途中でUsage limitを作成すると、Usage limitはその時点から期間の終わりまで測定されます。なお、UTCを使用して期間の開始と終了を決定します。

Usage limit

Redshift Spectrumは、スキャンされるデータの総量(1TB単位)でしきい値を指定します。

Concurrency Scalingは、Concurrency Scalingによって使用される合計時間のしきい値を1分単位で指定します。

Action

Usage limitには複数のActionを設定できます。設定できるActionは以下のとおりです。

  • Log to system table
  • しきい値に達するとシステムテーブル(STL_USAGE_CONTROL)にログ出力します。過去のUsage limitを評価したり、将来のUsage limitを決定したりするときに役立ちます。
  • Alert
  • 利用可能および消費されたUsage limitをCloudWatchメトリクスに出力して、しきい値に達するとCloudWatchアラームがこれらのメトリクスで自動的に作成されます
  • しきい値に達すると指定したSNSトピックをサブスクライブも可能であり、SNSトピックと連携することでメール通知、SQS、Lambda関数など柔軟にシステム連携できます
  • Disable feature
  • しきい値に達すると機能を停止します。Usage limit達して機能を停止することで、Redshift SpectrumやConcurrency Scalingをご予算の範囲での利用が可能になります

Concurrency Scalingの使用上限を試してみる

すぐにスケーリングするように、Queueサイズは「2」に設定してクラスタを用意して、同時12クエリを実行しました。Usage limit は、以下の設定で全てActionを試してみました。

Usage limit 設定

  • Alert
  • Time period:Daily
  • Usage limit (hh:mm):00 5
  • Action:Log to system table
  • Log to system table
  • Time period:Daily
  • Usage limit (hh:mm):00 10
  • Action:Alert
  • SNS configuration:cs-usage-limit-notification
  • Disable feature
  • Time period:Daily
  • Usage limit (hh:mm):00 15
  • Action:Disable feature
  • SNS configuration:cs-usage-limit-notification

Alertの結果

スケーリングクラスタでクエリが実行してしきい値の5分に達すると「Alert」が実行されます。SNSによってメールが送信されました。

また、CloudWatch Alarmに記録されています。

どうやら、システムテーブル(STL_USAGE_CONTROL)にもログが出力されました。usage_limit_id3e05a049-2a82-4c65-be2d-d78e92ebc99bはAlertの設定で出力された結果を表すと考えられます。

# select * from stl_usage_control order by eventtime desc;
eventtime | query | xid | pid | usage_limit_id | feature_type
----------------------------+--------+----------+-------+------------------------------------------+--------------------------------
:
:
2020-04-26 07:36:11.384532 | 720201 | 47014116 | 24562 | 3e05a049-2a82-4c65-be2d-d78e92ebc99b | CONCURRENCY_SCALING
2020-04-26 07:36:09.481781 | 720198 | 47014109 | 24559 | 3e05a049-2a82-4c65-be2d-d78e92ebc99b | CONCURRENCY_SCALING
2020-04-26 07:36:09.476725 | 720197 | 47014109 | 24559 | 3e05a049-2a82-4c65-be2d-d78e92ebc99b | CONCURRENCY_SCALING
(2774 rows)

Log to system tableの結果

スケーリングクラスタでクエリが実行してしきい値の10分に達すると「Log to system table」が実行されます。システムテーブル(STL_USAGE_CONTROL)にログが出力されました。usage_limit_id1715d517-da71-462f-9873-7786eaf077e5はLog to system tableの設定で出力された結果を表すと考えられます。

select * from stl_usage_control order by eventtime desc limit 100;
eventtime | query | xid | pid | usage_limit_id | feature_type
----------------------------+--------+----------+-------+------------------------------------------+--------------------------------
2020-04-26 07:50:24.518867 | 722585 | 47015583 | 23070 | 1715d517-da71-462f-9873-7786eaf077e5 | CONCURRENCY_SCALING
2020-04-26 07:50:24.516427 | 722584 | 47015583 | 23070 | 1715d517-da71-462f-9873-7786eaf077e5 | CONCURRENCY_SCALING
2020-04-26 07:50:24.30894 | 722583 | 47015580 | 24557 | 1715d517-da71-462f-9873-7786eaf077e5 | CONCURRENCY_SCALING
:
:
(2774 rows)

Disable featureの結果

スケーリングクラスタでクエリが実行してしきい値の15分に達すると「Disable feature」が実行されます。SNSによってメールが送信されました。

CloudWatch Alertにも通知されています。

スケーリングクラスタが停止されたため、システムテーブル(STL_USAGE_CONTROL)にシステムテーブルへログ出力も止まりました。

下記のメトリクスWorkload Concurrencyを見ると、15.47分後にConcurrency scaling activityとConcurrency scaling miniutesガクンと下がり、きっちりと機能が停止されたことが確認できます。

Concurrency Scalingのおすすめ設定!

Concurrency Scalingは、クラスタ毎に1日1時間分のConcurrency Scalingの無料のクレジットが提供され、さらに最大30時間の無料のConcurrency Scalingクレジットを累積できます。

Concurrency Scalingをほぼ無料のクレジットの範囲で運用するには、以下の設定してください。30時間ではなく29時間59分に設定している理由は、検知や停止に要する時間を考慮して1分に短く設定しています。正確には実行しているクエリなどの要件に依存しますので条件に応じて調整してください。

  • Time period:Monthly
  • Usage limit (hh:mm):29 59
  • Action:Disable feature

なお、上記の設定で無料のクレジットが利用できるのは、常にクラスタを使い続けている環境が前提となります。

Redshift SpectrumのDisable feature設定の注意点

Concurrency ScalingののDisable featureは、機能が停止しても従来通りメインクラスタで実行される様になるだけでクエリが止まることはありませんが、Redshift SpectrumのDisable feature設定は外部テーブルの参照ができなくなりますのでご注意ください。

最後に

Redshift SpectrumやConcurrency Scalingの利用には、別途利用費が発生します。本日ご紹介した『Usage limit details』を用いることで、追加料金を把握して、思いも寄らない料金が発生することがないようにコストをコントロールできるようになります。Concurrency Scalingは、1日1時間分の無料クレジット、30時間クレジットが累積するので、多くの皆さんにご利用を勧めておりました。今後はお客様のご予算の範囲でご利用いただくことが可能になりました。『Usage limit details』によって使用上限を設定して、これまで以上にRedshift SpectrumやConcurrency Scalingを安心してご利用いただければ幸いです。

合わせて読みたい