翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Terraform を使用して SQL Server フェイルオーバークラスターインスタンスを Amazon EC2 および Amazon FSx にデプロイする
Mark Hudson と Matt Burgess、Amazon Web Services
概要
このパターンでは、Terraform を使用して、Amazon Elastic Compute Cloud (Amazon EC2) 上の Windows Server フェイルオーバークラスター (WSFC) ノード全体に SQL Server フェイルオーバークラスターインスタンス (FCIs) をデプロイします。さらに、このパターンでは、データおよびログファイルに Amazon FSx 共有ストレージを使用します。
SQL Server データベースを に移行する場合 AWS、最初の選択肢は Amazon RDS for SQL Server です。ただし、Amazon RDS for SQL Server が適していない場合があり、SQL Server を高可用性アーキテクチャの Amazon EC2 にデプロイする必要があります。このソリューションでは、SQL Server FCIsが WSFC ノード全体にインストールされます。
このパターンに含まれる Terraform モジュールは、最大 2 つの Amazon EC2 SQL Server インスタンスをプロビジョニングします。Amazon FSx for Windows File Server ファイルシステムはクォーラム監視として機能し、共有データとログファイルを保存します。設定されたインスタンスの数に関係なく、SQL Server インスタンスノードは常に FCI クラスターを作成して結合し、環境のパリティを確保します。(通常は、開発用に 1 つのインスタンス、本番環境用に 2 つのインスタンスが設定されています)。高可用性のために 2 つのノードを使用する設定の場合、内部 Network Load Balancer がプロビジョニングされます。Network Load Balancer は、FCI クラスターで設定されたヘルスプローブを使用して、プライマリであるノードを特定します。
前提条件と制限
前提条件
アクティブ AWS アカウント。
個別のアベイラビリティーゾーンに 2 つのサブネットを持つ Amazon Virtual Private Cloud (Amazon VPC)。
Amazon VPC DHCP オプションセット。Active Directory ドメイン名に解決するようにドメイン名を設定し、Active Directory ドメインコントローラーを指すようにドメインと NetBIOS ネームサーバーを設定します。詳細については、「追加情報」の「VPC 設定」を参照してください。
AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD).
カスタム Amazon マシンイメージ (AMI)。詳細については、「追加情報」の「AMI 設定」を参照してください。
SQL Server ISO イメージを含む Amazon Simple Storage Service (Amazon S3) バケット。この前提条件は、提供された
component.yaml
ファイルで EC2 Image Builder を使用してカスタム AMI を構築する場合にのみ必要です。AWS Key Management Service (AWS KMS) 暗号化キー。
デフォルトでは、SQL Server は開発者エディションのプロダクトキーを使用してインストールされます。本番システムは、関連する変数によってモジュールに渡された有効な製品キーを使用することが期待されます。
制約事項
このソリューションには が必要です AWS Managed Microsoft AD。ただし、必要に応じて、代わりにセルフマネージド Active Directory 実装を使用できます。これを行うには、含まれている Amazon FSx Terraform モジュールを変更して
active_directory_id
属性を削除します。次に、Terraform ドキュメントに示すように、セルフマネージド Active Directory に必要な 4 つの属性を追加します。 SQL Server は、混合モード認証を使用するように設定されています。必要に応じて、Windows のみの認証を使用できます。これを行うには、提供されたユーザーデータスクリプトで、
setup.exe
コマンドに提供された/SECURITYMODE
および/SAPWD
パラメータを削除します。sql_accounts.tf
ファイルを削除し、instances.tf
ファイルを変更してsql_sa_password
エントリを削除できます。デプロイされたクラスターを削除するときは、Active Directory 内の対応する仮想コンピュータオブジェクトと個々のコンピュータオブジェクトを削除する必要があります。オブジェクトを削除するには、Active Directory 管理ツールを使用します。
一部の AWS のサービス は、すべてで利用できるわけではありません AWS リージョン。リージョンの可用性については、AWS 「リージョン別のサービス
」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択します。
製品バージョン
このソリューションは次のバージョンでテスト済みです。
[Windows Server 2019]
SQL Server 2019
アーキテクチャ
ソーステクノロジースタック
SQL Server
ターゲットテクノロジースタック
Amazon EC2 を使用した WSFC ノード上の SQL Server FCI
Amazon FSx for Windows File Server
Amazon S3 バケット
AWS Secrets Manager
AWS Managed Microsoft AD
AWS KMS
AWS Identity and Access Management (IAM)
ターゲット アーキテクチャ
次の図は、このソリューションのアーキテクチャを示しています。

図に示す内容は以下のとおりです。
EC2 インスタンスに AWS KMS および Secrets Manager へのアクセスを提供する IAM ロール
2 つのアベイラビリティーゾーンにまたがるプライベートサブネットの Amazon EC2 インスタンスにデプロイされた 2 つの SQL Server ノード
アクティブな SQL Server インスタンスへの接続を容易にする Network Load Balancer (単一ノードクラスターのセットアップ時にデプロイされない)
SQL Server ノードによって共有ストレージ用に両方のプライベートサブネットにデプロイされた Amazon FSx for Windows File Server ファイルシステム
Active Directory と SQL Server の認証情報と設定を保存するための Secrets Manager
SQL Server インストールイメージを保存するための Amazon S3 バケット
AWS Managed Microsoft AD for Windows 認証
AWS KMS 暗号化キーを作成するための
自動化とスケール
GitHub リポジトリterraform.tfvars
して、環境に固有の変数値を含める必要があります。Amazon S3 バケット、 AWS Managed Microsoft AD コンポーネント、 AWS KMS 暗号化キー、および一部のシークレットは、このデプロイの前提条件であり、Terraform コードには含まれていません。
ツール
AWS のサービス
AWS Directory Service for Microsoft Active Directory では、ディレクトリ対応のワークロードと AWS リソースが で Microsoft Active Directory を使用できます AWS クラウド。このパターンでは、 AWS Managed Microsoft AD は Windows Server および SQL Server 認証、DNS に使用されます。
Amazon Elastic Compute Cloud (Amazon EC2) は、 AWS クラウドでスケーラブルなコンピューティング容量を提供します。必要な数の仮想サーバーを起動することができ、迅速にスケールアップまたはスケールダウンができます。このパターンでは、SQL Server フェイルオーバークラスターインスタンスは Amazon EC2 インスタンスにインストールされます。
EC2 Image Builder は、カスタマイズされたサーバーイメージの作成、管理、デプロイを自動化するのに役立ちます。
Amazon FSx for Windows File Server は、Windows Server でフルマネージド型の共有ストレージを提供します。このパターンでは、FSx for Windows File Server は SQL Server データおよびログファイルとクォーラム監視用の共有ストレージを提供します。
AWS Identity and Access Management (IAM) は、誰が認証され、誰に使用を許可するかを制御することで、 AWS リソースへのアクセスを安全に管理できます。
AWS Key Management Service (AWS KMS) は、データの保護に役立つ暗号化キーの作成と制御に役立ちます。このパターンでは、Secrets Manager シークレット、Amazon Elastic Block Store (Amazon EBS) ボリュームの SQL Server ストレージ、および FSx for Windows File Server ファイルシステムを暗号化するために使用されます。
AWS Secrets Manager を使用すると、コード内のハードコードされた認証情報 (パスワードを含む) を Secrets Manager への API コールで置き換えて、プログラムでシークレットを取得することができます。このパターンでは、SQL Server をインストールして実行するための Active Directory 認証情報、
sa
ユーザー認証情報、およびデータベース接続情報が Secrets Manager に保存されます。Amazon Simple Storage Service (Amazon S3) は、どのようなデータ量であっても、データを保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。このパターンでは、Amazon S3 バケットを使用して SQL Server のインストールイメージを保存します。
Amazon Virtual Private Cloud (Amazon VPC) は、定義した仮想ネットワークに AWS リソースを起動するのに役立ちます。この仮想ネットワークは、ユーザー自身のデータセンターで運用されていた従来のネットワークと似ていますが、 AWSのスケーラブルなインフラストラクチャを使用できるという利点があります。
その他のツール
Microsoft SQL Server FCIs
は、Windows Server クラスターノード全体にインストールされます。さらに、複数のサブネットにインストールできます。このパターンでは、SQL Server FCI インスタンスは WSFC ノード全体にインストールされます。 Terraform
は、コードを使用してクラウドインフラストラクチャとリソースをプロビジョニングおよび管理するためのInfrastructure as Code (IaC) ツールです。このパターンでは、Terraform を使用してリソースを作成し、SQL Server FCI インスタンスを設定します。 Windows Server フェイルオーバークラスタリング
は、SQL Server などのホストサーバーアプリケーションの高可用性をサポートするインフラストラクチャ機能を提供します。このパターンでは、FCI ノードは WSFC 機能を使用して、インスタンスレベルで冗長性を通じてローカルの高可用性を提供します。
コードリポジトリ
このパターンのコードは、GitHub cluster-amazon-elastic-compute-cloud-amazon-fsx-microsoft-sql-server
ソリューションの概要と追加のインストールおよび使用状況情報を提供する
README.md
ファイルこのパターンのコンポーネントをプロビジョニングするための Terraform 設定ファイルのベースセットと Amazon FSx 固有のモジュール
Amazon EC2 ユーザーデータスクリプトとして実行されるインスタンスセットアップスクリプト
Image Builder がカスタム AMI の作成に使用できる
component.yam
l ファイル
ベストプラクティス
セキュリティとパッチ適用
AMI の前提条件であるインストールと設定は、SQL Server FCI クラスターをデプロイするための最小要件です。組織の標準とセキュリティ要件に準拠するには、追加のソフトウェアと設定が必要になる場合があります。
デプロイ後、Windows に継続的にパッチを適用します。実行中のインスタンスに直接パッチを適用するか、最新の Windows パッチを使用して新しい AMI を作成し、新しい AMI を使用してインスタンス (一度に 1 つずつ) を置き換えます。 は、最新のオペレーティングシステムパッチ、ドライバー、起動エージェントを含む新しい Windows AMIs毎月 AWS リリースします。新しいインスタンスを起動するとき、または独自のカスタムイメージを構築するときに、最新の AMI をチェックすることをお勧めします。
Amazon EC2 インスタンスは、すべての送信トラフィックを許可するように設定されています。本番環境にデプロイする場合、セキュリティグループのアウトバウンドルールを設定して、このトラフィックを必要な送信先に制限する必要があります。
FSx for Windows File Server ファイルシステムは、ファイル共有とファイルおよびフォルダへのアクセスの監査ログを自動的に記録し、環境の要件である場合は目的の宛先に配信できます。
Secrets Manager シークレットを定期的にローテーションします。Amazon EC2 インスタンスのキーペアについては、AWS Secrets Manager を使用して SSH キーペアを安全に保存およびローテーションする方法
」で説明されているように、自動ローテーションソリューションを検討してください。Active Directory 認証情報と SQL Server sa
認証情報シークレットについては、パスワード管理のポリシーに従って自動ローテーションを設定します。
Active Directory 管理
FCI クラスターの一部として、Windows は Active Directory にコンピュータ名オブジェクト (CNO) を生成します。CNO は DNS リクエストに応答し、アクティブな SQL ノードにトラフィックを転送します。この Active Directory 提供の DNS の使用はお勧めしません。TTL が高すぎて適切なフェイルオーバー時間が得られず、多くの場合、新しいプライマリ IP アドレスが反映されるまでに 5 分以上かかります。一方、高可用性のインストールの場合、内部 Network Load Balancer は 30 秒以内にフェイルオーバーするように設定されています。
クラスターを作成するには、Active Directory ドメイン管理者が必要です。この要件は、クラスターオブジェクトの作成と Active Directory でのアクセス許可の変更に必要なアクセス許可が昇格されているためです。ただし、SQL Server サービスはドメイン管理者として実行する必要はありません。したがって、この目的のために 2 番目の Active Directory ユーザーを作成することをお勧めします。ただし、サービスがドメイン管理者ユーザーとして実行される場合は、このユーザーを削除できます。この場合、ドメイン管理者ユーザーは、このパターンの一部として作成された Active Directory 管理者グループに追加する必要があります。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
Active Directory グループを作成します。 | で AWS Managed Microsoft AD、次のグループを作成します。
詳細については、 AWS ドキュメントの「グループの作成 AWS Managed Microsoft AD」を参照してください。 | AD 管理者 |
Active Directory ユーザーを作成します。 | で AWS Managed Microsoft AD、次のユーザーを作成します。
詳細については、 AWS ドキュメントの AWS Managed Microsoft AD 「 ユーザーの作成」を参照してください。 | AD 管理者 |
Active Directory 認証情報をシークレットに追加します。 | Secrets Manager を使用して 4 つのシークレットを作成し、次の情報を保存します。
詳細については、 AWS ドキュメントの「 AWS Secrets Manager シークレットの作成」を参照してください。 | AWS 管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
Windows AMI を作成します。 | 前提条件となるソフトウェアと設定を含むカスタム Windows AMI を作成します。詳細については、「追加情報」を参照してください。 | AWS 管理者、AWS DevOps |
Terraform をインストールします。 | Terraform をインストールするには、Terraform | AWS DevOps |
リポジトリをクローン作成します。 | このパターンのリポジトリ | AWS DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
Terraform 変数を変更します。 | 指定された たとえば、 変数 | AWS DevOps |
Terraform を初期化します。 | 提案されたデプロイを確認するには、リポジトリのルートに移動します。Terraform コマンドラインインターフェイス (CLI) を使用して を実行し | AWS DevOps |
リソースをデプロイします。 | SQL クラスターと関連リソースをデプロイするには、Terraform CLI を使用して を実行します | AWS DevOps、AWS 管理者 |
デプロイを検証します。 | デプロイを検証するには、次の手順を実行します。
| AWS システム管理者 |
トラブルシューティング
問題 | ソリューション |
---|---|
Terraform のプロビジョニングは完了しましたが、Windows Failover Cluster Manager がクラスターが作成されたか、クラスターが操作不可能な状態であることを示しています。 | リソースのインストール全体とクラスターの設定には 45~60 分かかる場合があります。Terraform が完了したら、ユーザーデータスクリプトを完了まで実行する必要があります。そのためには、複数回の再起動が必要です。進行状況をモニタリングするには、 |
機能しているクラスターをプロビジョニングした後、Terraform を使用してクラスターを削除および再作成することは成功しません。Terraform は完了しますが、クラスターが正しく設定されていません。 | プロビジョニングプロセスの一環として、マシンと仮想オブジェクトを Active Directory および Active Directory DNS に登録します。Amazon EC2 クラスターノードとクラスターノードにコンピュータ名が存在する場合、FCI は正しく初期化できず、プロビジョニングが失敗します。 この問題を修正するには、次の手順を実行します。
|
関連リソース
AWS ドキュメント
追加情報
Terraform モジュール情報
このモジュールでは、AMI 設定とユーザーデータ設定を組み合わせて、プロビジョニング時間と安定性を適切に組み合わせます。プロビジョニング中、Windows では複数の再起動と待機が必要です。チェックポイントメソッドは、永続ユーザーデータの再起動中に無限ループから保護するために実装されています。ユーザーデータは永続化するように設定されています。したがって、ユーザーデータ設定スクリプトはべき等になるように開発されており、継続する必要があります。Idempotency は更新プロセスを合理化し、FCI クラスターに再参加または再作成するための手動設定を行わずに、更新サイクル中にインスタンスをスワップアウトできるようにします。
SQL Server 接続文字列とフェイルオーバークラスタリング
モジュールは、このデータベースの接続文字列で使用するエンドポイントアドレスを含むシークレットを発行します。シークレット名は の形式に従います{environment_name}/sqlserver/{cluster_name}/endpoint
。1 つのノードのみを使用するインストールでは、これが Amazon EC2 インスタンス SQL Server インターフェイスの IP アドレスであることが想定されます。高可用性インストール (2 つのインスタンス) の場合、これは内部 Network Load Balancer の DNS 名であることが予想されます。
このモジュールでは、フェイルオーバークラスタリング仮想 IPs はサポートされていません。仮想 IP を動作させるには、同じサブネットにとどまる必要があります。では AWS、1 つのサブネットを複数のアベイラビリティーゾーンにまたがることはできません。したがって、仮想 IPsます。
各 Amazon EC2 インスタンスには 3 つのプライベート IP アドレスが割り当てられます。それらの usais は次のとおりです。
ネットワークトラフィックのプライマリ IP – 送信トラフィックのソース IP。
FCI 通信 – フェイルオーバークラスターの状態と同期を維持するために使用されます。
SQL Server (TCP ポート 1433) – リスナーと はハートビートトラフィックをリッスンして、プライマリインスタンスを決定します。
VPC の構成
前提条件には、DNS 解決に Active Directory を使用するように設定された DHCP オプションセットが一覧表示されます。ただし、この前提条件は難しい要件ではありません。ハード要件は、EC2 インスタンスが Active Directory ドメイン名を解決できることです。この要件を満たすには、 Amazon Route 53 Resolver エンドポイントを使用するなど、他の方法を使用できます。詳細については、「Directory Service の DNS 解決と Amazon Route 53 Resolver の統合
AMI 設定
このパターンで使用される AMI には、以下の前提条件となるソフトウェアと設定が含まれている必要があります。
SQL Server 2019 のインストールファイルをダウンロードして に展開します
C:\SQL_Install_media
。次の Windows 機能をインストールします。
Install-WindowsFeature Failover-Clustering
Install-WindowsFeature RSAT-AD-PowerShell
Install-WindowsFeature RSAT-AD-Tools
Install-WindowsFeature RSAT-Clustering-Mgmt
Install-WindowsFeature RSAT-Clustering-PowerShell
Install-WindowsFeature RSAT-Clustering-CmdInterface
Windows ファイアウォールを次のように無効にします。
Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled False
次のように CredSSP 認証方法を有効にします ( を組織の Windows ドメイン名
<domain>
に置き換えます)。Enable-WSManCredSSP -Role "Server" -Force
Enable-WSManCredSSP -Role "Client" -DelegateComputer *.<domain>.com -Force
次のレジストリキーを設定します。
NTLM 認証情報を許可する:
HKLM:\Software\Policies\Microsoft\Windows\CredentialsDelegation
名前:
AllowFreshCredentialsWhenNTLMOnly
値: 1
型:
REG_DWORD
ローカルドメインコンピュータに PowerShell の NTLM の使用を許可します。
パス:
HKLM:\Software\Policies\Microsoft\Windows\CredentialsDelegation\AllowFreshCredentialsWhenNTLMOnly
名前:
1
値:
wsman/*.<domain>.com
型:
REG_SZ
PowerShell ギャラリー
を次のようにセットアップします。 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
次の Windows PowerShell モジュールをインストールします
*
。Install-Module -Name ComputerManagementDsc
Install-Module -Name FailOverClusterDsc
Install-Module -Name PSDscResources
Install-Module -Name xSmbShare
Install-Module -Name xActiveDirectory
Install-Module -Name SqlServer
Image Builder を使用して AMI を作成するには、Image Builder ドキュメントのEC2 Image Builderconsole ウィザードを使用してイメージパイプラインを作成する」の手順に従います。前の前提条件でレシピのコンポーネントを作成するには、次のステップを使用します。
GitHub リポジトリ
の ami
フォルダから component.yamlファイルをダウンロードします。 コンテンツを新しい Image Builder コンポーネントにコピーします。
以下のプレースホルダーをお客様の情報で更新します。
<domain>
– Active Directory ドメイン名<bucket_name>
– SQL Server イメージを含む Amazon S3 バケットの名前