[アップデート] AWS Trusted Advisor で Amazon RDS に関するチェック項目が 37 件も追加されたので、何が追加されたのか整理してみた

2023.11.17

いわさです。

AWS Trusted Advisor は AWS アカウント上のリソースなどの構成情報を自動でチェックし、改善点や推奨事項をアドバイスしてくれるサービスです。

このサービスはチェック項目が決まっていまして、定期的にチェック項目がアップデートされています。
数ヶ月前にも Lambda のベストプラクティスに関連したチェックが追加されていました。

今朝のアップデートで、こちらに Amazon RDS に関する項目が追加されました。

アップデート前から Amazon RDS に関するチェック項目は既にいくつか存在していたのですが、今回新たに 37 件のチェック項目が追加されています。

本記事ではさらに掘り下げて追加された項目を調べてまとめてみましたので紹介します。

追加された 37 件のチェック項目

Trusted Advisor のレコメンデーションは現時点では 6 つのカテゴリに分けられています。
なお、Trusted Advisor 全てのチェックを利用するためには AWS Support の有償プランの中でビジネスプラン以上をご利用頂くことが前提となります。

ちなみにクラスメソッドメンバーズのお客様は、無料で Trusted Advisor の機能を全てお使いいただけます。

公式ドキュメントの変更点と、実際のマネジメントコンソールの日本語表記、タイトルからまとめてみましたので紹介します。
37 件と量が多いのでカテゴリ別にまとめました。

今回は以下のカテゴリで項目が追加されています。

  • パフォーマンス 17 件
  • セキュリティ 3 件
  • 耐障害性 13 件
  • 運用上の優秀性 4 件

コスト最適化およびサービス制限については追加されていません。
ただし、RDS に関連した既存のチェック項目がありますので参考までにこちらも紹介します。

コスト最適化:追加なし

コスト最適化カテゴリでは、未使用のリソースの抽出など節約可能な金額のレコメンデーションを受けることが可能です。 こちらのカテゴリは今回のタイミングでの追加はありませんでした。

参考までに、Amazon RDS に関連するこのカテゴリのチェック項目としては以下のようなものが存在しています。

  • Amazon RDS アイドル DB インスタンス
  • Amazon Relational Database Service (RDS) リザーブドインスタンスの最適化

パフォーマンス:17 件

パフォーマンスのカテゴリでは、アプリケーションのスピードと応答性を向上させるためのレコメンデーションを受けることが可能です。
意外にもパフォーマンスカテゴリでは、これまで RDS に関するチェックがありませんでした。

以下は全て追加された項目です。

チェック項目 説明
Amazon RDS DB クラスターは最大 64 TiB のボリュームのみをサポートします DB クラスターは最大 64 TiB のボリュームをサポートします。最新のエンジンバージョンは、最大 128 TiB のボリュームをサポートします。最大 128 TiB のボリュームをサポートするために、DB クラスターのエンジンバージョンを最新バージョンにアップグレードすることをお勧めします。
Amazon RDS マグネティックボリュームが使用中です DB インスタンスはマグネティックストレージを使用しています。マグネティックストレージは、ほとんどの DB インスタンスで推奨されていません。別のストレージタイプを選択してください: 汎用 (SSD) またはプロビジョンド IOPS。
Amazon RDS リソースのメジャーバージョン更新が必要です DB エンジンの現在のメジャーバージョンのデータベースはサポートされなくなります。新しい機能と拡張が含まれる最新メジャーバージョンにアップグレードすることをお勧めします。
Amazon RDS リソースインスタンスクラスの更新が必要です データベースは前世代の DB インスタンスクラスを実行しています。前世代の DB インスタンスクラスを、コスト、パフォーマンス、またはその両方がより優れている DB インスタンスクラスに置き換えました。新しい世代の DB インスタンスクラスを使用して DB インスタンスを実行することをお勧めします。
RDS Huge Page カスタムを有効にしてください ラージページによりデータベースのスケーラビリティが向上しますが、DB インスタンスはラージページを使用していません。DB インスタンスの DB パラメータグループで use_large_pages パラメータの値を [ONLY] に設定することをお勧めします。
RDS InnoDB 変更バッファリング 変更のバッファリングにより、MySQL DB インスタンスは、セカンダリインデックスを維持するために必要ないくつかの書き込みを延期できます。この機能は、ディスクの動作速度が遅い環境で有用でした。バッファリング設定を変更することで、DB のパフォーマンスをわずかに改善することができましたが、クラッシュからの回復に遅れが生じ、アップグレード中に長時間にわたってシャットダウンされることになっていました。innodb_change_buffering パラメータの値を [NONE] に設定することをお勧めします。
RDS インデックスのみのスキャンを有効にしてください クエリプランナーまたはオプティマイザーは、インデックスのみのスキャンプランタイプがオフになっている場合、そのプランタイプを使用できません。enable_indexonlyscan パラメータの値を [1] に設定することをお勧めします。
RDS インデックススキャンを有効にしてください クエリプランナーまたはオプティマイザーは、インデックススキャンプランタイプがオフになっている場合、そのプランタイプを使用できません。enable_indexscan パラメータの値を [1] に設定することをお勧めします。
RDS クエリキャッシュを無効にしてください 変更によりクエリキャッシュを削除する必要がある場合、DB インスタンスは停止しているように見えます。ほとんどのワークロードはクエリキャッシュの恩恵を受けません。クエリキャッシュは MySQL バージョン 8.0 から削除されました。query_cache_type パラメータを [0] に設定することをお勧めします。
RDS メモリパラメータがデフォルトとは異なります DB インスタンスのメモリパラメータがデフォルト値と大幅に異なります。これらの設定はパフォーマンスに影響を及ぼし、エラーを引き起こす可能性があります。DB インスタンスのカスタムメモリパラメータを DB パラメータグループのデフォルト値にリセットすることをお勧めします。
RDS 一般的なログを無効にしてください DB インスタンスのために一般ログ記録がオンになっています。この設定は、データベースの問題をトラブルシューティングする際に役立ちます。ただし、一般的なログ記録をオンにすると、I/O オペレーションの量と割り当てられるストレージスペースが増加し、競合やパフォーマンスの低下が発生する可能性があります。一般的なログ記録の使用に関する要件を確認してください。general_logging パラメータの値を [0] に設定することをお勧めします。
RDS 統計情報の永続化を有効にしてください DB インスタンスは、InnoDB の統計情報をディスクに永続化するように設定されていません。統計情報が保存されない場合、インスタンスが再起動され、テーブルにアクセスされるたびに統計情報が再計算されます。これにより、クエリ実行プランに変動が生じます。このグローバルパラメータの値はテーブルレベルで変更できます。innodb_stats_persistent パラメータの値を [ON] に設定することをお勧めします。
RDS 自動バキュームを有効にしてください DB インスタンスのために自動バキュームパラメータがオフになっています。自動バキュームをオフにすると、テーブルとインデックスの肥大化が増進し、パフォーマンスに影響を及ぼします。DB パラメータグループで自動バキュームをオンにすることをお勧めします。
RDS 開くことができる最小ファイル数 innodb_open_files パラメータは、InnoDB が一度に開くことができるファイルの数を制御します。InnoDB は、mysqld の実行中に、すべてのログファイルとシステムテーブルスペースファイルを開きます。DB インスタンスでは、InnoDB が一度に開くことができるファイルの最大数の値が小さく設定されています。innodb_open_files パラメータを最小値の [65] に設定することをお勧めします。
ライセンス込みのサポート終了のエンジンエディションを使用している Amazon RDS リソース 現在のライセンスのサポートを継続するために、メジャーバージョンを Amazon RDS によってサポートされている最新のエンジンバージョンにアップグレードすることをお勧めします。データベースのエンジンバージョンは、現在のライセンスではサポートされません。
異種のインスタンスクラスがあるクラスター内の Amazon RDS DB インスタンス DB クラスター内のすべての DB インスタンスに同じ DB インスタンスクラスとサイズを使用することをお勧めします。
異種のインスタンスサイズがあるクラスター内の Amazon RDS DB インスタンス DB クラスター内のすべての DB インスタンスに同じ DB インスタンスクラスとサイズを使用することをお勧めします。

これ結構良くないですか。
スケールアップしましょう程度のものではなくて、DB エンジン固有のデータベースパラメータについてもアドバイスを受けることが出来ます。

セキュリティ:3 件

セキュリティのカテゴリでは、Amazon RDS をよりセキュアにするセキュリティ設定のレコメンデーションを受けることが出来ます。

従来以下の 2 件の設定が存在していました。

  • Amazon RDS パブリックスナップショット
  • Amazon RDS セキュリティグループのアクセスリスク

今回新たに以下の 3 件が追加されています。

チェック項目 説明
Amazon RDS Aurora ストレージ暗号化がオフになっています Amazon RDS は、AWS Key Management Service (AWS KMS) で管理するキーを使用して、すべてのデータベースエンジンのために保管中の暗号化をサポートします。Amazon RDS 暗号化を使用するアクティブな DB インスタンスでは、ストレージに保存されている保管中のデータは、自動バックアップ、リードレプリカ、スナップショットと同様に暗号化されます。Aurora DB クラスターの作成中に暗号化がオンになっていない場合は、復号されたスナップショットを、暗号化された DB クラスターに復元する必要があります。
Amazon RDS エンジンのマイナーバージョンアップグレードが必要です データベースリソースが、最新のマイナー DB エンジンバージョンを実行していません。最新のマイナーバージョンには、最新のセキュリティ修正と他の改善点が含まれています。
Amazon RDS ストレージ暗号化がオフになっています Amazon RDS は、AWS Key Management Service (KMS) で管理するキーを使用して、すべてのデータベースエンジンのために保管中の暗号化をサポートします。Amazon RDS 暗号化を使用するアクティブな DB インスタンスでは、ストレージに保存されている保管中のデータは、自動バックアップ、リードレプリカ、スナップショットと同様に暗号化されます。DB インスタンスの作成中に暗号化がオンになっていない場合は、暗号化をオンにする前に、DB インスタンスの復号されたスナップショットの暗号化されたコピーを作成および復元する必要があります。

なるほど。
セキュリティカテゴリについては、従来の項目も追加された項目も、AWS インフラの基本的なセキュリティ項目って感じがしますね。暗号や公開レベル、自動アップグレード設定ですね。

耐障害性:13 件

耐障害性のカテゴリでは、データベースの回復性を向上させるためのレコメンデーションを受けることが出来ます。わかりやすいところだと冗長性が足りていなかったり使用率が高すぎる状態などの検出が該当します。

以前からチェックされていた項目は以下です。

  • Amazon RDS バックアップ
  • Amazon RDS DB インスタンス拡張モニタリングが有効化されていない
  • Amazon RDS DiskQueueDepth
  • Amazon RDS FreeStorageSpace
  • Amazon RDS Multi-AZ
  • Amazon RDS は AWS Backup プランに含まれていません
  • RDS DB クラスターでマルチ AZ レプリケーションが有効になっていない
  • RDS マルチ AZ スタンバイインスタンスが有効になっていない
  • Amazon RDS ReplicaLag

ポイントとしては冗長性に関する設定の他に、DiskQueueDepth や FreeStorageSpace、ReplicaLag などの一部の CloudWatch メトリクスをチェックし、Trusted Advisor で決められたしきい値を超えている場合はレコメンデーションを受けることが出来ます。

従来から結構すごくないですか、これ。 デフォルトでメトリクス監視設定してくれてるようなものですね。

それに対して今回次の項目が追加されています。

チェック項目 説明
Amazon RDS DB クラスターには 1 つの DB インスタンスがあります 可用性を向上させ、パフォーマンスを改善するために、少なくとももう 1 つの DB インスタンスを DB クラスターに追加します。
同じアベイラビリティーゾーンにすべてのインスタンスがある Amazon RDS DB クラスター DB クラスターは現在、単一のアベイラビリティーゾーンにあります。複数のアベイラビリティーゾーンを使用すると、可用性を向上させることができます。
すべてのリーダーインスタンスが同じアベイラビリティーゾーンにある Amazon RDS DB クラスター DB クラスターのすべてのリーダーインスタンスが、同じアベイラビリティーゾーン内にあります。DB クラスター内のリーダーインスタンスを複数のアベイラビリティーゾーンに分散することをお勧めします。分散すると、データベースの可用性が向上するとともに、クライアントとデータベース間のネットワークレイテンシーが低減することで、応答時間が短縮されます。
Amazon RDS DB インスタンスで、ストレージの自動スケーリングがオフになっています DB インスタンスのために Amazon RDS ストレージの自動スケーリングがオンになっていません。データベースのワークロードが増加すると、RDS ストレージの自動スケーリングにより、ダウンタイムなしでストレージキャパシティが自動的にスケールされます。
Amazon RDS DB インスタンスがマルチ AZ 配置を使用していません マルチ AZ 配置を使用することをお勧めします。マルチ AZ 配置により、DB インスタンスの可用性と耐久性が向上します。マルチ AZ 配置と料金の詳細については、[情報] をクリックしてください。
RDS テーブルのログ記録 log_output が [TABLE] に設定されている場合、log_output が [FILE] に設定されている場合よりも多くのストレージが使用されます。ストレージサイズ制限に達しないように、パラメータを [FILE] に設定することをお勧めします。
RDS 行フォーマット MySQL DB インスタンスで既知の問題が発生しました: MySQL バージョン8.0.26 よりも前のバージョンで、row_format を [COMPACT] または [REDUNDANT] に設定した状態で作成されたテーブルは、インデックスが 767 バイトを超えるとアクセスおよび回復できなくなります。innodb_default_row_format パラメータの値を [DYNAMIC] に設定することをお勧めします。
RDS ログのフラッシュを有効にしてください DB インスタンスの innodb_flush_log_at_trx_commit パラメータの値は安全な値ではありません。このパラメータは、ディスクに対するコミットオペレーションの永続性を制御します。innodb_flush_log_at_trx_commit パラメータを [1] に設定することをお勧めします。
RDS 最大ユーザー接続数 DB インスタンスでは、各データベースアカウントの最大同時接続数として、小さい値が設定されています。max_user_connections パラメータを 5 よりも大きい数値に設定することをお勧めします。
RDS 読み取り専用レプリカ DB インスタンスには書き込み可能モードのリードレプリカがあり、クライアントからの更新が可能です。リードレプリカが書き込み可能モードでないようにするため、read_only パラメータを [TrueIfReplica] に設定することをお勧めします。
RDS 自動バックアップ DB リソースで自動バックアップが無効になっています。自動バックアップにより、DB インスタンスのポイントインタイムリカバリが可能になります。
RDS バイナリログを同期してください DB インスタンスでトランザクションのコミットが確認されるまで、バイナリログのディスクへの同期は強制されません。sync_binlog パラメータの値を [1] に設定することをお勧めします。
RDS 同期コミットを有効にしてください synchronous_commit パラメータがオフになっている場合、データベースのクラッシュでデータが失われる可能性があります。データベースの耐久性にリスクがあります。synchronous_commit パラメータをオンにすることをお勧めします。

最近のアップデートで RDS のクラスターの組み方も色々なオプションが登場しています。
それらにあわせて耐障害性の観点からのチェックがまず追加されているという印象ですね。

他にはデータベースエンジン固有のパラメータ設定をこちらもチェックしてくれています。 innodb_flush_log_at_trx_commitパラメータやsynchronous_commitパラメータなど、エンジン固有のレコメンデーションを受けることが出来るのは有り難いですね。

サービスの制限:追加なし

サービスの制限カテゴリでは、AWS アカウントのリソースの使用状況とサービスクォータに近づいているか、あるいは制限を超えているかをチェックします。
こちらのカテゴリは今回のタイミングでの追加はありませんでした。

参考までに、Amazon RDS に関連するこのカテゴリのチェック項目としては以下のようなものが存在しています。

  • RDS クラスターパラメータグループ
  • RDS クラスターロール
  • RDS クラスター
  • RDS DB インスタンス
  • RDS DB 手動スナップショット
  • RDS DB パラメータグループ
  • RDS DB セキュリティグループ
  • RDS イベントサブスクリプション
  • RDS セキュリティグループあたりの最大認証数
  • RDS オプショングループ
  • RDS マスターあたりのリードレプリカ
  • RDS リザーブドインスタンス
  • RDS サブネットグループ
  • RDS サブネットグループあたりのサブネット
  • RDS 合計ストレージクォータ

運用上の優秀性:4 件

運用上の優秀性(オペレーションエクセレンス)のカテゴリでは、AWS 環境を効果的かつ大規模に運用するのに役立つレコメンデーションを受けることが出来ます。

以前からチェックされていた項目は以下です。

  • RDS DB クラスター削除保護チェック
  • RDS DB インスタンスのマイナーバージョン自動アップグレードチェック

あーなるほど、削除保護やマイナーバージョンアップグレードなどの機能ですね。
適用しない場合もありますけど、基本的にはまず使えるか検討する機能って感じですね。

これらに関して今回追加された項目が以下です。

チェック項目 説明
異なるパラメータグループを持つクラスター内の Amazon RDS DB インスタンス DB クラスター内のすべての DB インスタンスで同じ DB パラメータグループを使用することをお勧めします。
Amazon RDS 拡張モニタリングがオフになっています データベースリソースでは拡張モニタリングがオンになっていません。拡張モニタリングは、モニタリングとトラブルシューティングのためにオペレーティングシステムに関するリアルタイムのメトリクスを提供します。
Amazon RDS Performance Insights がオフになっています Amazon RDS Performance Insights は DB インスタンスの負荷をモニタリングし、データベースのパフォーマンスの問題の分析と解決をサポートします。Performance Insights をオンにすることをお勧めします。
RDS トラック数を有効にしてください track_counts パラメータがオフになっている場合、データベースはデータベースアクティビティの統計情報を収集しません。自動バキュームが正しく機能するには、これらの統計情報が必要です。track_counts パラメータを [1] に設定することをお勧めします

Performance Insights や拡張モニタリングのチェックって今回追加されたのか!と驚きました。
一方で RDS トラックス数のチェックについてはデータベースパラメータのエンジン固有のチェックを行っています。

レコメンデーションを発生させてみた

適当な RDS for PostgreSQL を作成してチェックを行ってみました。
上記チェック項目のいくつかに該当するデータベースパラメータを設定したり、あるいは Performance Insight s などの一部機能をオフにしています。

Trusted Advisor で次のように検出されました。
良いですね。以前からそうですが、チェックの妥当性を判断するために参考情報がリンクされているのがとても使いやすいです。

この RDS トラックであれば、こちらのリンクから AutoVacuum に関する情報にたどりつき、必要性を判断する際の参考情報を確認することが出来ます。

さいごに

本日は AWS Trusted Advisor で Amazon RDS に関するチェック項目が 37 件も追加されたので、何が追加されたのか整理してみました。

AWS Trusted Advisor の RDS チェック、なかなかすごくないですか。
「マルチ AZ にしましょう。バックアップを有効化しましょう。」みたいなレコメンドは、まぁそうだよなという感じなのですが、データベースエンジン固有のパラメータについても推奨事項を案内してくれるのがかなり良いなと思いました。
また、こちらは従来からですがメトリクスを見てレコメンドしてくれるのも良いですね。

AWS Trusted Advisor を利用可能で Amazon RDS を使われている方は是非この機会にレコメンド内容を確認してみては如何でしょうか。
今まで気づいていなかった改善点に気がつけるかもしれません。