Microsoft SQL Server を AWS にデプロイするためのベストプラクティスを紹介 !

2021-02-02
ビジネス x クラウド

稲葉 智子

皆さんは、AWS ウェブサイトに「AWS ホワイトペーパーとガイド」のページがあるのをご存知ですか ? AWS では皆さんにクラウドについて知識をもっと深めていただけるよう、テクニカルホワイトペーパー、技術ガイド、参考資料、リファレンスアーキテクチャ図などの技術文書を無償で公開しています。ですが、このホワイトペーパーは長編大作が多く、ページ数も30ページを超えるものが多いので、日々の業務の中で読む時間を確保するのも大変ですよね。

そこで、今回は、AWS ホワイトペーパーの中から「Microsoft SQL Server を AWS にデプロイするためのベストプラクティス」の内容をシンプルに短くまとめてご紹介します。(詳細な情報や使用例に関しては、ホワイトペーパー (本体) の方ごご一読ください)

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »


どんなベストプラクティスが含まれているのか ?

AWS が提唱している AWS Well-Architected フレームワークの 5 つの柱をベースに、下記5つの項目で構成されています。

高可用性と
災害対策

パフォーマンスの
最適化

セキュリティの
最適化

コスト最適化

運用上の優秀性

それでは、Microsoft SQL Server を AWS クラウドにデプロイして運用するにあたり、どのようなベストプラクティスが活用できるのか見ていきましょう。

注)
このベストプラクティスは、2020年5月改訂時に、公開時点での最新バージョンである Microsoft SQL Server 2019 で利用できる機能に焦点をあてて編集されています。以前のバージョンをお使いの方は、下記を参考にしてこのベストプラクティスをご活用ください。

  • Microsoft SQL Server 2019 に移行して、互換モードで実行できるバージョン
    Microsoft SQL Server 2008、2012、2014、2016、2017

  • Microsoft によりメインストリームサポートおよび延長サポートが終了しているため、サポート対象のバージョンにアップグレードが必要なバージョン
    Microsoft SQL Server 2000、2005、2008

高可用性と災害対策

ビジネスにおいてサービスが提供できなくなる事態の発生頻度が少ないに越したことはありませんが、いつ何時災害が発生するかは誰にもわかりません。

ここでは、災害が発生してもビジネスが継続できるようにするために目標復旧時間 (RTO) と目標復旧時点 (RPO) を考慮した災害対策を事前に講じておき、お使いのシステムやアプリケーションのデータを守るうえで、Microsoft SQL Server のどの Edition が最適なのかを確認していただけるようになっています。詳しくは、このホワイトペーパー内の「表 1: Microsoft SQL Server の HA/DR オプション」を参照してください。

これに加えて、次の 4 つの点に関する推奨事項について紹介されています。

アベイラビリティゾーンとマルチ AZ 配置

AWS のアベイラビリティーゾーンは、別々の障害ドメインを提供してワークロードを低レイテンシーで通信するために比較的近接するように設計されているため、ミラーリング、Always On 可用性グループ、基本可用性グループ、またはフェイルオーバークラスターインスタンスを使用したデータベースの同期レプリケーションに適しています。

ここでは、アベイラビリティーゾーンの性能とMicrosoft SQL Server を組み合わせて使用することで、データ損失をゼロにし、より高いパフォーマンスを実現することについて、下記 2 つの例で説明しています。

Always On フェイルオーバークラスターインスタンス (FCI) のノードを別々のアベイラビリティーゾーンに配置し、低レイテンシーのネットワークリンクを活用して高いパフォーマンスを実現する

Microsoft SQL Server のストレージ層として Amazon FSx for Windows ファイルサーバー を使用することで、Always On フェイルオーバークラスターインスタンス (FCI) のデプロイをシンプルにする

Amazon FSx については、「パフォーマンス最適化」と「コストの最適化」も合わせてご一読ください。

クラスタープレイスメントグループと拡張ネットワーキング

ここでは、可用性が高くなるとパフォーマンスが低下するため、クラスタープレイスメントグループと拡張ネットワーキングを用いて、AWS でこの差異を軽減する次の方法を紹介しています。

Amazon EC2 で、クラスタープレイスメントグループ内に多数の EC2 インスタンスをデプロイし、ネットワークレイテンシーを最小限にするため、同じデータセンター内で物理的に近い場所に配置します。

拡張ネットワーキングの Elastic Network Adapter (ENA) または Elastic Fabric Adapter (EFA) を活用してAWS で最大の帯域幅を得ます。(m5n、m5dN、r5n、r5dN の EC2 インスタンスと組み合わせると、最大 100 Gbps の帯域幅を得られます)

サーバーに近接すると同時に障害が発生する可能性が高くなるため、高可用性の要件と競合しているように見えますが、マルチ AZ と組み合わせることで、より高いレベルの可用性を得ることができます。

また、クラスタープレイスメントグループ内に Always On フェイルオーバークラスターインスタンス (FCI) を作成した場合の例や 2 つの EC2 インスタンスを同じ物理ホストで実行する場合の例についても触れています。

マルチリージョン配置

Amazon Virtual Private Cloud (Amazon VPC) はデフォルトで単一のリージョン内に限定されているため、マルチリージョンでデプロイするには、異なるリージョンにデプロイされている Microsoft SQL Server インスタンス間で接続を確立する必要があるため、その方法として、下記 4 つを紹介しています。(各機能の詳細はリンク先を見ていただくか、ホワイトペーパー(本体) でご確認ください)

また、複数のリージョンにまたがるケースについても、次のように紹介されています。

AWS Direct Connect 機能の使用
リモートリージョンにデプロイされたアプリケーションまたはユーザーで、Microsoft SQL Server インスタンスに接続する必要がある場合は、この機能を使用して、すべての Direct Connect 接続からすべての AWSリージョンに接続することができます。

積極的な RPO 要件を伴うワークロードの場合
非同期マルチリージョンデプロイをマルチ AZ またはシングル AZ の同期レプリケーションと組み合わせることができます。ただし、これらの組み合わせにより Microsoft SQL Server ライセンスコストが大幅に増加するため、慎重に考慮する必要があります。

複数のリージョンにまたがる複数のレプリカが含まれる場合
分散可用性グループ機能により、各リージョンにデプロイされた可用性グループを、より大きな分散可用性グループに組み合わせることやリードレプリカの数を増やすことができます。

分散可用性グループに関しては活用例が紹介されていますので、ホワイトペーパー (本体) の該当セクションもご一読ください。

災害復旧

災害対策では、サーバーはプライマリサイトから遠く離れたリモートサイトに設置されていることが多く、同期レプリケーションを使用する高可用性要件のソリューションを適用している場合は高レイテンシーになり、パフォーマンスが低下します。そのため、災害対策要件のソリューションでは、コスト、RPO、RTO、複雑さ、各ソリューションを実装するための取り組みなどの要件に基づいて選択されています。

AWSでは、ログシッピングや Windows 記憶域レプリカなどの一般的な Microsoft SQL Server の災害対策要件のソリューションに加えて、CloudEndure Disaster Recovery の使用も推奨しています。この機能を使用すると、ダウンタイムを数分に短縮し、1 秒未満の RPO でデータ損失を防ぎ、実装を簡素化して、信頼性を高め、総所有コストを削減できます。また、復旧するワークロードに必要とされる適切なサイズのコンピューティングや高性能なストレージを備えたプロビジョニング済みの完全な災害対策環境のみを災害演習のときに起動させることができます。(AWS では、移行プロジェクトの場合に追加コストなしで CloudEndure Migration をご利用いただけます。詳細は、CloudEndure Migration のページをご覧ください)


パフォーマンスの最適化

お使いのシステム構成によっては、パフォーマンスを最大限に高めることが最適化に繋がる場合があります。Microsoft SQL Server および AWS のワークロードのパフォーマンスを大幅に向上させるベストプラクティスとして下記を紹介しています。

アプリケーションとデータベーススキーマの最適化 ワークロードのパフォーマンスを効果的に向上させる方法のひとつです。アプリケーションのパフォーマンスを大幅に向上させるには、リレーショナルデータベースから専用データベースソリューションへの変更をご検討ください。(例:Amazon DynamoDBAmazon NeptuneAmazon Quantum Ledger DatabaseAmazon Managed Blockchain など)
リレーショナルデータベースを使用する必要があるアプリケーションの最適化 クラウド向けに構築された Amazon Aurora の利用を推奨しています。Amazon Aurora では、時間がかかる管理タスク (ハードウェアのプロビジョニング、データベースのセットアップ、パッチ適用、バックアップ) は自動化されています。また、Amazon Aurora Serverless ではサーバーを管理する必要がないため、最高レベルのコスト最適化と安定したパフォーマンスを実現できます。
物理データベーススキーマの最適化 データベースのパフォーマンスを大幅に向上させるには、慎重に物理設計して、非クラスター化インデックスを定義し、テーブルとインデックスの水平パーティション化を使用することが望ましいです。そのうえで、右の点についてもご検討ください。

トランザクションデータの分析処理
Microsoft SQL Server の列ストアインデックス (最大 10 倍のパフォーマンスとデータ圧縮の改善が可能) を活用して最適化できます。

書き込み量の多いデータベースのスケーリング
場合によってはデータを論理的に小さなチャンクにスライスし、各チャンクを別々のサーバーにホストする (シャーディング) ことでスケーリングの問題を解決できます。ただし、すでにアプリケーションとデータベースレベルで最適化を行っている場合 (例: レガシー基幹業務アプリケーションの実行や、差し迫った負荷増加の予測など) はこの方法を適用できない場合があります。 その場合は、インフラストラクチャの設定に重点を置いて問題を解決または軽減できるかをご検討ください。

次のセクションでは、AWS クラウドで Microsoft SQL Server のパフォーマンスを最大限に高めるためのインフラストラクチャ設計部分に焦点を当てたベストプラクティスを紹介します。

Amazon Elastic Block Store (Amazon EBS) の使用

Amazon EBS (単一 AZ のブロックストレージサービス) での EBS ボリュームはシンプルで使いやすく、様々なケースで効果的に使用できます。ここでは、EBS ボリュームを使用する場合のベストプラクティスについて紹介します。

プロビジョンド IOPS ボリュームタイプ (io1) の使用 単一の EBS ボリュームでパフォーマンスを最大限に高める必要がある場合に、このインスタンスタイプを推奨しています。
単一の EBS ボリュームよりも高い IOPS とスループットが必要な場合 この場合は、複数の EBS ボリュームを作成して Windows または Linux インスタンスでストライプ化します。これにより、インスタンスあたりの利用可能な IOPS を最大 80,000、インスタンスあたりのスループットは最大 2,375 MB/ 秒まで増やすことができます。EBS 最適化 の EC2 インスタンスタイプを使用するとEBS ボリューム間とのリクエスト処理に専用ネットワーク接続が割り当てられます。汎用 SSD (gp2) ボリュームでも適切に設定すれば SQL Server ワークロードのコストとパフォーマンスのバランスを良くすることができます。
ポイントインタイムで作成された EBS スナップショットを使用する場合 Amazon S3 に保存したEBS スナップショット から EBS ボリュームを復元する場合に、Amazon EBS 高速スナップショット復元の利用を推奨しています。EBS スナップショットから EBS ボリュームを復元すると、アプリケーションで I/Oオペレーションがすぐにできるようになりますが、パフォーマンスを最大限に高めるには時間がかかるため、この機能を使用することで、ブロックに初めてアクセスするときの I/O オペレーションのレイテンシーを排除できます。
アプリケーションコンシステントな EBS スナップショットを取得する場合 EBS スナップショットの取得には、AWS Systems Manager Run Command の使用を推奨しています。データベースがオンラインの状態でも取得可能なため、オフラインにしたり、読み取り専用モードにする必要はありません。Windows Volume Shadow Copy Service (VSS) を使用して、VSS 対応アプリケーションのイメージレベルバックアップを取得します。Linux インスタンスの VSS スナップショットも作成できますが、Linux は VSS をサポートしていないため、手動で行う必要があります。
クラッシュ整合性スナップショットの使用 この機能を使用すると、Microsoft SQL Server をクラッシュする前の時点の正常な状態のデータベースに復元できます。オーケストレーターアプリケーションを使用せずに、Windows または Linux EC2 インスタンスにアタッチされた複数の EBS ボリュームのクラッシュ整合性スナップショットを作成すると、コミットされていないトランザクションとディスクにフラッシュされていない書き込みだけが失われるためご注意ください。

インスタンスストレージ

EC2 インスタンスではインスタンスストレージが最速ですが、物理ディスクの速度にパフォーマンスの上限があります。そのため、複数のディスクにまたがってストライピングすることで、単一ディスクの最大値を超えて使用することが可能になります。記憶域スペース (単一の Windows インスタンスの場合) および記憶域スペースダイレクト (Windows Server フェイルオーバークラスターの場合) のストレージプールのキャッシュレイヤーとしても、このインスタンスストレージをご利用いただけます。ここでは、インスタンスストレージのパフォーマンスを最大限に高めるベストプラクティスについてご紹介します。

ストレージ最適化インスタンスタイプの使用
インスタンスタイプの i3 クラスで提供している NVMe (Non-Volatile Memory Express) SSD インスタンスストアボリューム (例: i3.16xlarge) の使用を推奨しています。より大きなインスタンスタイプ (例: i3.2xlarge) を選択すると、インスタンスストアと基盤物理ディスクを対で使用できるため、ディスクパフォーマンスが確保され、ノイジーネイバー問題を解消できます。

tempdb システムデータベースの使用
ベストプラクティスとしては、ユーザーデータベースとは別に、tempdb のデータファイルを高速ボリュームに保存することを推奨しています。最高のパフォーマンスを得るには、同一ファイルグループ内の tempdb データファイルと同じサイズで、ストライピングされているボリュームに保存することをお勧めします。

バッファプール拡張 の使用
この機能では、RAM と永続的ディスクストレージ間のセカンダリキャッシュとして高速ランダムアクセスディスク (SSD) を使用しています。これにより、SQL Server でワークロードを実行する際にコストとパフォーマンスのバランスを取ることができます。(Microsoft SQL Server の Enterprise Edition と Standard Edition で使用可)

注) インスタンスストレージは、関連付けられた EC2 インスタンスが存在している間のみ利用できます。EC2 インスタンスに障害が発生してインスタンスが停止/終了した場合は、そのインスタンスストアボリューム内のデータはすべて消去されます。EBS ボリュームとは異なり、インスタンスストアボリュームのスナップショットを使用してバックアップできないため、永続性が求められるデータに インスタンスストレージを使用する場合は、耐久性を考慮する必要があります。

Amazon FSx for Windows ファイルサーバー

ワークロードに適したパフォーマンスを実現できるよう、スループットレベルをファイルシステムのサイズとは別に選択できる Amazon FSx for Windows ファイルサーバー を推奨しています。スループット容量のレベルが高いほど、接続する SQL Server インスタンスに対して処理できる IOPS レベルも高くなるため、Microsoft SQL Server のストレージオプションのひとつになっています。このベストプラクティスは、次のようなケースに適しています。

フェイルオーバークラスタインスタンスに含まれている SQL Server ノードによって使用される共有ストレージとして

Windows Server フェイルオーバークラスター上で SQL Server クラスターで使用されファイル共有監視として

専用 EBS 最適化で利用できるよりも高いスループットレベルを達成するためのオプションとして

帯域幅とレイテンシー

パフォーマンスを最適化するにはレイテンシーと帯域幅について考慮し、ネットワークのレイテンシーと可用性のバランスを取る必要があります。ここでは、次のベストプラクティスを紹介しています。

ENA ドライバーの使用
このドライバーを使用するとネットワークの帯域幅は最大になりますが、レイテンシーには影響しません。

相互接続ノード間の距離の調整
クラスターノードの距離を互いに近づけすぎるとネットワークレイテンシーが距離に比例して影響を受け、同時障害の可能性が高くなり可用性が低下します。これらのノードの距離を離すと、可用性は最も高くなりますが、レイテンシーも高くなります。

クラスターノードを複数のアベイラビリティーゾーンに分散
AWS のアベイラビリティーゾーンでは、他のアベイラビリティーゾーンから物理的に分離されるように設計されており、地理的に近接してネットワークレイテンシーを低く抑えます。

リードレプリカ

Microsoft SQL Server でもリードレプリカを利用できるようになり、読み取り頻度の高いデータベースワークロードに対してリードレプリカの作成が推奨されています。Microsoft SQL Server でリードレプリカを使用する際のベストプラクティスをご紹介します。

可用性グループリスナーの使用
このリスナーが必要に応じて複数のトラフィックをルーティングし、I/O トランザクションのみをプライマリインスタンスに送信します。(可用性グループに関する詳細は、Always On 可用性グループを参照)

地理的に分散した場所からデータベースに接続
リードレプリカが設置されている AWS リージョンがユーザーやアプリケーションがいる場所から物理的に離れている場合は、レイテンシーが懸念されます。その場合は、ユーザーやアプリケーションに近い AWS リージョンでリードレプリカを運用することが推奨されます。

読み取り専用トランザクションにセカンダリデータベースを使用
これを使用する場合は、サーバーソフトウェアのライセンスが適切に付与されているか必ず確認してください。


セキュリティの最適化

クラウド上のセキュリティ強化は、AWS の最優先事項です。AWS で提供しているセキュリティーサービスと Microsoft SQL Server の組み込みセキュリティ機能を組み合わせることで、さらにセキュリティの強化を行うことができます。

Amazon Virtual Private Cloud (Amazon VPC)

転送中のデータ保護に役立つ機能がたくさん用意されている Amazon VPC では、ベストプラクティスとして SQL Server インスタンスを Amazon VPC 内のプライベートサブネットにデプロイし、Amazon VPC で NAT ゲートウェイまたはカスタム NAT インスタンスを介するインターネットアクセスのみを許可することを推奨しています。

保管時の暗号化

保管時にデータファイルを暗号化して保存する方法のベストプラクティスとして、下記を推奨しています。

EBS 暗号化の使用

Amazon EBS の暗号化/復号化の機能を使用して、EBS ボリュームを使用してブロックレベルで暗号化します。

Amazon FSx for Windows ファイルサーバーに組み込まれている保管時の暗号化機能の使用

AWS Key Management Service (AWS KMS) の使用

Amazon EBS と Amazon FSx は AWS KMS で暗号化キーの管理をし、AWS KMS が提供するキーおよび独自のキーをご利用いただけます。(詳細は、AWS KMS のドキュメントを参照)

Microsoft SQL Server Transparent Data Encryption (TDE)

Microsoft SQL Server 2019 から Standard Edition でも利用可能になりました。この機能を有効にすると保管時にデータファイルを暗号化してくれます。Amazon RDS for SQL Server でもこの機能を利用できるので、Amazon EC2 インスタンスの SQL Server ワークロードにも有効です。(以前のバージョンの Standard Edition では利用不可)

<EBS 暗号化と TDE のトレードオフとその違いについて>

EBS 暗号化と TDE には下記の違いがあります。

  • EBS 暗号化はブロックレベルで行われます。この場合、データは保存時に暗号化され、取得時に復号化されます。
  • TDE では暗号化はファイルレベルで行われます。この場合、データファイルは保存時に暗号化されますが、復号化には該当の証明書が必要です。

EBS 暗号化と TDEの使用例がホワイトペーパー (本体) に紹介されていますので、合わせてご一読ください。

転送時の暗号化

転送時の暗号化には、次のベストプラクティスが推奨されています。

SSL/TLS プロトコルを使用して Microsoft SQL Server ワークロードの転送時の暗号化を有効にします。AWS の SQL Server ワークロードでも Microsoft SQL Server の暗号化接続がサポートされているのでご利用いただけます。

SQL Server のストレージ層に Server Message Block (SMB) プロトコルを使用します。このプロトコルを使用すると、Amazon FSx で SQL Server やアプリケーションの設定を変更することなくファイルシステムにアクセスし、SMB 暗号化を使用して転送中のすべてのデータを自動的に暗号化することができます。

使用中の暗号化

使用中の暗号化には、Microsoft SQL Server で提供している Always Encrypted の使用を推奨しています。この機能は、クライアント証明書を使用して機密データを保護するために用意されていますが、ユーザー権限を分離して管理することができます。(Amazon RDS for SQL Server および Amazon EC2 の SQL Server ワークロードで利用可)

AWS Key Management Service (AWS KMS)

暗号化/復号化キーの管理には、AWS KMS の利用を推奨しています。AWS KMS で生成されたキーまたは独自のキーのいずれを使用しても、AWS KMS からキーが送信されることはないので、不正なアクセスから保護できます。SQL Server バックアップファイルを Amazon S3、Amazon S3 Glacier、その他のストレージサービスに保存する際にも AWS KMS のキーを使用して暗号化できます。

セキュリティパッチ

AWS では、AWS Systems Manager Patch Manager を使用して、セキュリティパッチとアップデートの定期的なデプロイを自動化して管理することを推奨しています。Patch Manager のユースケースは、セキュリティパッチに限定されないことに注意してください。この記事の「運用上の優秀性」トピックの「パッチ管理」も参考にしてください。


コスト最適化

ライセンス料金はコスト最適化を行う上では重要なポイントです。AWS では、お客様の状況に合わせて、下記 2 つのライセンスモデルが利用可能です。

License Included (LI) AWS で時間単位の使用料金の一部としてライセンス料金を支払うことで、Microsoft SQL Server を実行することができます。このモデルのメリットは、長期契約が不要で、いつでも製品の使用を停止し、その使用量に対する支払いを停止できることです。
Bring Your Own License (BYOL) お手持ちのライセンスを AWS で利用したい場合は、このライセンスモデルが使用できます。また、ソフトウェアアシュアランスの有無により下記のようになります。 ソフトウェアアシュアランス: あり ソフトウェアアシュアランスにより Microsoft ライセンスモビリティプログラムが適用されている場合は、AWS クラウドで稼働するサーバーインスタンスでもお手持ちのライセンスをご利用いただけます。
ソフトウェアアシュアランス: なし Amazon EC2 Dedicated Hostsを使用して AWS でお手持ちのライセンスを使用できる場合があります。詳細は、AWS と Microsoft に関するよくある質問で「ライセンシング」セクションを参照してください。

次のセクションで、他にもどのようなコスト最適化ができるのか見ていきましょう。

Amazon EC2 CPU 最適化

ビジネス要件により Microsoft SQL Server のデプロイに、コンピューティング集約型またはメモリやストレージなどのリソースに特化した EC2 インスタンスタイプが必要な場合があります。このような特定の要件に特化した EC2 インスタンスタイプでは、必要とする要件以上の CPU コア数が提供されているため、全く使用していない CPU コアにもライセンスコストが発生してしまいます。

これを防ぐ方法として、EC2 インスタンスの起動時に CPU オプションを指定することによるライセンスコストの最適化を推奨しています。(CPU オプションは EC2 インスタンスの起動時のみに利用可能です。起動後は利用できませんので、ご注意ください)

SQL Server Standard Edition への切り替え

Microsoft SQL Server 2019 より Standard Edition でも利用可能になっている機能があります。下記などの機能を使用するために Enterprise Edition を利用していた場合は、Standard Edition に切り替えてライセンスコストを抑えることができます。

Transparent Data Encryption を使用した保管時の暗号化 Microsoft SQL Server 2019 より Standard Edition でも利用可能になりました。この機能を利用するために Enterprise Edition を利用していた場合は、Standard Edition に切り替えることでライセンスコストを抑えることができます。
Always On 基本可用性グループ この機能には、使用できるレプリカは 2 つ (プライマリとセカンダリ) まで、などの制限がいくつかあります。複数の高可用性モードで運用しているデータベースに接続する必要があるアプリケーションの場合は、この機能を使用できないのでご注意ください。その他の制限についてはリンク先をご参照してください。
Always On フェイルオーバークラスターインスタンス Amazon FSx for Windows ファイルサーバーを使用してこの機能が持つ制限を回避できます。Amazon FSx を使用した Always On フェイルオーバークラスターインスタンスのベストプラクティスは前述の記載も合わせてご覧ください。ここでは、Amazon FSx を使用することで Always On フェイルオーバークラスターインスタンスのデプロイをシンプルにしてコストを大幅に抑える3 つの主なシナリオを右に紹介しています。 Always On フェイルオーバークラスターインスタンス用の共有ストレージソリューションの実装は複雑でコストがかかるため、Always On 可用性グループ と Enterprise Edition の使用を選択した場合は、Standard Edition に切り替えることでデプロイと運用管理がシンプルになり、ライセンスコストも大幅に抑えることができます。
サードパーティ製のストレージレプリケーションソフトウェアソリューションで Always On フェイルオーバークラスターインスタンスを共有ストレージで使用している場合は、Amazon FSx のフルマネージド型共有ストレージソリューションに切り替えることで Always On フェイルオーバークラスターインスタンスのデプロイをシンプルにし、コストを抑えることができます。
Always On フェイルオーバークラスターインスタンスをオンプレミスで実行している場合は、アベイラビリティーゾーンと複数のアベイラビリティーゾーンにデプロイされた高可用性共有ストレージに対するAmazonFSxのサポートとの組み合わせに切り替えることにより、高可用性と災害復旧ソリューションが別途用意する必要がなくなるため、デプロイをシンプルにして、コストも抑えることができます。

z1d EC2 インスタンスタイプ

お使いの Microsoft SQL Server がより高速なシーケンシャル処理を必要とするワークロードである場合は、z1d インスタンスの利用を検討することを推奨しています。このインスタンスで実行できる CPU コア数は少ないですが、ライセンスコストが高いワークロード向けに最適化されているインスタンスなので、CPU コアを多く持つインスタンスを実行するのと同等またはそれ以上のパフォーマンスで運用することができます。

アクティブレプリカのライセンスの排除

LI モデルと BYOL モデルを組み合わせてアクティブレプリカのコスト最適化を行うことができます。よくあるソリューションとして、アクティブレプリカを持つ Microsoft SQL Server Always On 可用性グループの使用があります。これは、アクティブレプリカのジョブが下記のケースで実行される場合に最適です。

セカンダリインスタンスのアクティブレプリカを、主にレポーティング、バックアップ、OLAP バッチジョブ、および高可用性の目的で使用しているが、これら機能のうち、レポーティング、バックアップ、OLAP バッチジョブの実行用に常に稼働させておく必要がない場合

オンプレミス環境のためプライマリインスタンスと常に同期するセカンダリインスタンスをアクティブレプリカで作成する必要がある場合 (追加ライセンスの取得が必要になる場合)

上記のような場合に、AWS ではセカンダリインスタンスをアクティブレプリカからパッシブレプリカに切り替えることで、このアーキテクチャを最適化することができます。高可用性の維持はパッシブレプリカが引き続き行い、その他のジョブは、LI モデルを使用して作成された別のインスタンス上で実行します。(ジョブを数時間実行してからインスタンスを停止できます)

継続的または高頻度で実行されるジョブのためのレプリカが必要な場合は、AWS Database Migration Service (AWS DMS) を使用して、プライマリインスタンスからセカンダリインスタンスにデータを継続的にレプリケートすることを検討してください。この方法は、Standard Edition を使用して実行できるので、Enterprise Edition を利用する必要がなく、ライセンスコストを抑えることができます。

AWS でのライセンスコストを最適化する方法の詳細については、AWS での Microsoft ライセンシングページを参照してください。


運用上の優秀性

ここでは、AWS クラウドに Microsoft SQL Server をデプロイした後で、障害やインシデントが常に発生することを想定し、それらに対応できるよう準備しておくことの重要性についてふれています。このセクションでは、次の 3 つについて推奨しています。

可観測性と根本原因の分析

Microsoft SQL Server ワークロードに対する異常の観察と検出を行うために、Amazon CloudWatch Application Insights の利用を推奨しています。この機能を有効にすると、アプリケーションのリソース全体とテクノロジースタックで主要なメトリクスやログを特定して設定します。エラーが検出されると CloudWatch Events が作成され、通知の設定やアクションの実行に使用でき、トラブルシューティングを円滑に行うことができます。

平均修復時間の短縮 (MTTR)

Amazon CloudWatch Application Insights を有効にすると自動でダッシュボードが生成されることに加えて、AWS リソースに関連する運用作業項目 (OpsItems) も作成されます。この運用作業項目 (OpsItems) は、AWS Systems ManagerOpsCenter で管理されるため、この機能の利用が推奨されています。この OpsCenter は、問題を解決するまでの平均時間を短縮するように設計されています。

パッチ管理

パッチ管理には、AWS Systems Manager Patch Manager の利用を推奨しています。このパッチマネージャーでは、Microsoft SQL Server を含む Microsoft アプリケーションがサポートされています。また、メンテナンスウィンドウと統合されているので、パッチを含む定期的なスケジュールを定義して管理することができます。


まとめ

今回は「Microsoft SQL Server を AWS にデプロイするためのベストプラクティス」でどのようなベストプラクティスが紹介されているのか要点をざっとまとめてみましたが、いかがでしたでしょうか ?

皆さんが運用しているシステムのコスト最適化にご活用いただけますと幸いです。


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者紹介

稲葉 智子
アマゾン ウェブ サービス ジャパン合同会社
技術統括部 テクニカルライター

AWS クラウドのサービスに関しては入社と同時に勉強開始。好きな AWS サービスは、ローカリゼーションも担当しているので、Amazon Translate。AWS DeepRacer や AWS DeepComposer にも興味があります。趣味は習い事のハープとカフェ巡り。AWS では猫好きが多いのですが、私は犬好きで、ウェルシュ・コーギー・ペンブローク Lover です。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する