SQL Server インスタンスを大規模に Azure に接続する

この記事では、SQL Server の複数のインスタンスを 1 つのタスクとして Azure Arc に接続する方法について説明します。 これを行う最も簡単な方法は、Azure Policy を使用することです。 または、複数の Windows または Linux マシンにインストールされている複数の SQL Server インスタンスは、スクリプトを使用して Azure Arc に接続することもできます。

前提条件

  • 各サーバーに SQL Server の 1 つ以上のインスタンスがインストールされている

    注意

    Azure Arc 対応サーバー上の SQL Server では、SQL Server フェールオーバー クラスター インスタンスがサポートされません。

  • Arc 対応 SQL Server リソースをオンボードするユーザーが、次のアクセス許可を持っている

    • Microsoft.AzureArcData/sqlServerInstances/read
    • Microsoft.AzureArcData/sqlServerInstances/write
  • サブスクリプションで次のリソース プロバイダーが登録されている

    • Microsoft.AzureArcData
    • Microsoft.HybridCompute

リソース プロバイダーを登録する

リソース プロバイダーを登録するには、次のいずれかの方法を使用します。

  1. [サブスクリプション] を選択します
  2. サブスクリプションの選択
  3. [設定] で、 [リソース プロバイダー] を選択します
  4. Microsoft.AzureArcDataMicrosoft.HybridCompute を検索し、 [登録] を選択します

Azure Policy を使用して大規模に接続する

Configure Arc-enabled machines running SQL Server to have SQL Server extension installed という Azure ポリシー定義を使用して、複数の Arc 対応マシンで SQL Server インスタンスを自動的に接続することができます。 このポリシー定義は、既定ではスコープに割り当てられません。 このポリシー定義を任意のスコープに割り当てると、SQL Server がインストールされているすべての Azure Arc 対応サーバーに "SQL Server 用 Azure 拡張機能" がインストールされます。 インストールが済むと、拡張機能によってマシン上の SQL Server インスタンスが Azure に接続されます。 その後、継続的に実行される拡張機能により、SQL Server の構成の変更が検出され、Azure と同期されます。 たとえば、新しい SQL Server インスタンスがマシンにインストールされた場合、拡張機能によって自動的に Azure に登録されます。

Azure Policy の割り当てを作成するには、割り当ての対象となるスコープ (サブスクリプションまたはリソース グループ) に対する Resource Policy Contributor ロールの割り当てが必要です。 さらに、"新しい" システム割り当てマネージド ID を作成する場合は、サブスクリプションで User Access Administrator ロールの割り当てが必要です。

重要

SQL Server - Azure Arc リソースの Arc 対応 SQL Server リソースは、それらがホストされている Server - Azure Arc リソースと同じリージョンおよびリソース グループに作成されます。

重要

SQL Server 用 Azure 拡張機能は Azure と 1 時間に 1 回同期されるため、ポリシーの割り当てを作成した後これらのリソースが作成されるまでに、最大で 1 時間かかることがあります。

User Access Administrator ロールと Resource Policy Contributor ロールの割り当てがある場合、またはサブスクリプションの Owner ロールの割り当てがある場合は、サブスクリプション全体または特定のリソース グループのスコープで、Azure Policy とシステム割り当てマネージド ID を使用して大規模な登録をすばやく有効にできます。

これを行うには、次の手順を実行します。

  1. Azure portal で [SQL Server - Azure Arc] ビューに移動します
  2. 一覧の上部にある [Automatic Arc-enabled SQL Server registration] (Arc 対応 SQL Server の自動登録) ボタンを選択します。
  3. サブスクリプションと、必要に応じてリソース グループを選択します。
  4. [使用許諾契約書の条項に同意する] チェックボックスをオンにします。
  5. [有効] を選択します。

これらの手順により、選択したサブスクリプションと、必要に応じて特定のリソース グループ スコープに対して、Configure Arc-enabled machines running SQL Server to have SQL Server extension installed ポリシー定義の新しい Azure Policy 割り当てが作成されます。 新しいシステム割り当てマネージド ID が作成され、Arc 対応 SQL Server をオンボードするために必要なアクセス許可が付与されます。 この新しいマネージド ID は、ポリシーの修復によって、SQL Server 用 Azure 拡張機能をインストールするために使用されます。

Azure Policy 割り当てを使って大規模に接続する

既存のユーザー割り当てマネージド ID を選択したい場合、または大規模なオンボード ポリシーの構成をより細かく制御したい場合は、Azure Policy 割り当てを作成できます。

  1. Azure portal で [Azure Policy] に移動し、[定義] を選択します。
  2. Configure Arc-enabled machines running SQL Server to have SQL Server extension installed.」を検索して、このポリシーを選択します。
  3. [割り当て] を選択します。
  4. スコープを選択します。
  5. [次へ][次へ] の順に選択します。
  6. [修復] タブで、[修復タスクを作成する] をクリックします。
  7. [システム割り当てマネージド ID] (推奨) または[ユーザー割り当てマネージド ID] を選択し、"ユーザー アクセス管理" と "Log Analytics 共同作成者" のロールの割り当てを持つマネージド ID を選択します。
  8. [Review + Create](レビュー + 作成) をクリックします。
  9. Create をクリックしてください。

Azure portal または任意の API を使用して Azure ポリシーを割り当てる方法については、「Azure Policy のドキュメント」を参照してください。

スクリプトを使用して複数の SQL Server インスタンスを接続する

複数の Windows または Linux マシンにインストールされている複数の SQL Server インスタンスは、単一のマシンに対して生成したスクリプトと同じものを使用して、Azure Arc に接続することができます。 このスクリプトを使用すると、各マシンとそこにインストールされているすべての SQL Server インスタンスが Azure Arc に接続されます。

Azure Active Directory サービス プリンシパルを使用する

最適なエクスペリエンスを得るには、Azure Active Directory のサービス プリンシパルを使用します。 サービス プリンシパルは、マシンを Azure に接続する場合や、Azure Arc 対応サーバーと Azure Arc 対応 SQL Server 用の Azure リソースを作成する場合に必要な最小限のアクセス許可のみが付与される、特殊な制限付きの管理用 ID です。 サービス プリンシパルは、テナント管理者のような、より上位の特権アカウントを使用するより安全であり、アクセス制御セキュリティのベスト プラクティスに従っています。

Connected Machine Agent をインストールして構成するためのインストール方法を使用するには、使用する自動化された方法に、マシンでの管理者アクセス許可が付与されている必要があります。 Linux では、root アカウントを使用します。 Windows では、ローカルの Administrators グループのメンバーを使用します。

作業を開始する前に、必ず、前提条件を確認し、必要なアクセス許可を満たすカスタム ロールを作成したことを確認してください。

複数のインスタンスを接続する

各マシンには Azure PowerShell がインストールされている必要があります。

  1. サービス プリンシパルを作成します。 New-AzADServicePrincipal コマンドレットを使用します。 必ず、出力を変数に格納してください。 そうしないと、後で必要なパスワードを取得できなくなります。

    $sp = New-AzADServicePrincipal -DisplayName "Arc-for-servers" -Role <your custom role>
    $sp
    
  2. Microsoft Graph にアクセスするためのアクセス許可をサービス プリンシパルに付与します。

    注意

    • サービス プリンシパルを作成するときのアカウントは、オンボーディングに使用したいサブスクリプションの所有者またはユーザー アクセス管理者であることが必要です。 ロールの割り当てを作成する十分なアクセス許可がない場合、サービス プリンシパルは作成されますが、マシンをオンボードすることはできません。 カスタム ロールの作成手順については、「必要なアクセス許可」を参照してください。

    • サービス プリンシパルには、Microsoft Graph の Directory.ReadAll アクセス許可が必要です。 サービス プリンシパルにディレクトリのアクセス許可を割り当てる方法については、API のアクセス許可の管理に関する記事を参照してください。

  3. $sp 変数に格納されているパスワードを取得します。

    $credential = New-Object pscredential -ArgumentList "temp", $sp.PasswordCredentials.SecretText 
    $credential.GetNetworkCredential().password
    
  4. サービス プリンシパルのテナント ID の値を取得します。

    $tenantId= (Get-AzContext).Tenant.Id
    
  5. 適切なセキュリティ プラクティスを使用して、パスワード、アプリケーション ID、テナント ID の値をコピーして保存します。 サービス プリンシパルのパスワードを忘れたり紛失したりした場合は、New-AzADSpCredential コマンドレットを使用してリセットできます。

    Note

    Azure Arc for servers では現在、証明書を使用したサインインがサポートされていないため、サービス プリンシパルには認証のためのシークレットが必要であることに注意してください。

  6. SQL Server を Azure Arc に接続する」の手順に従って、ポータルから PowerShell スクリプトをダウンロードします。

  7. PowerShell ISE の管理者インスタンスでスクリプトを開き、前述のサービス プリンシパルのプロビジョニング時に生成された値を使用して、次の環境変数を置き換えます。 これらの変数は最初は空になっています。

    $servicePrincipalAppId="{serviceprincipalAppID}"
    $servicePrincipalSecret="{serviceprincipalPassword}"
    $servicePrincipalTenantId="{serviceprincipalTenantId}"
    
  8. 各ターゲット マシンでスクリプトを実行します

オンボードが成功したことを確認する

SQL Server インスタンスを Azure に接続したら、Azure portal に移動して、新しく作成された Azure Arc リソースを確認します。 約 1 分以内に、接続されている各マシンに対して新しい Server - Azure Arc リソースが表示され、接続されている SQL Server インスタンスごとに新しい SQL Server - Azure Arc リソースが表示されます。 これらのリソースが作成されていない場合、それは、拡張機能のインストールとアクティブ化プロセス中に問題が発生したことを意味します。 トラブルシューティングのオプションについては、「SQL Server 用 Azure 拡張機能のトラブルシューティング」をご覧ください。

成功したオンボードを示すスクリーンショット。

SQL Server 用 Azure 拡張機能のトラブルシューティング

始める前に、ログの場所を記録しておきます。 拡張機能ログは、次のフォルダーに作成されます: C:\ProgramData\GuestConfig\extension_logs\Microsoft.AzureData.WindowsAgent.SqlServer\ExtensionLog_0.log

配置機能ログは、次のフォルダーに作成されます: C:\ProgramData\GuestConfig\extension_logs\Microsoft.AzureData.WindowsAgent.SqlServer\1.1.0.0\deployer.log

Arc 対応 SQL Server リソースが作成されない問題については、いくつかの原因が考えられます。

拡張機能のインストールが失敗した

接続されたサーバーに移動し、デプロイ機能のログを調べます。 通常なら、次のメッセージが記録されています。

[07/14/2021 18:56:45 UTC] [INFO] Status of service 'SqlServerExtension' before attempting start: Stopped [07/14/2021 18:56:45 UTC] [INFO] Status of service 'SqlServerExtension' after attempting start: Stopped

表示されない場合は、拡張機能が正しくインストールされていないことを意味します。 次の手順を試してみてください。

  1. イベント ログを調べて、インストールを妨げているものがあるかどうかを確認します。 次のフォルダーから、SqlServerExtension.msi をインストールしてみてください: C:\Packages\Plugins\Microsoft.AzureData.WindowsAgent.SqlServer{version}。 インストールの UI にエラーの詳細が表示される場合があります。

  2. サービス アプリとサーバー マネージャーを閉じてから、いずれかの接続方法で拡張機能のインストールを再試行します。

拡張機能はインストールされたが開始されなかった

ログ ファイルでアプリケーション エラーを調べます。

SQL Server 拡張機能がコンピューターに存在しない

SQL Server がインストールされているかどうかを確認してください。

サーバー - Azure Arc ARM リソースが手動で削除された

拡張機能のログで次のレコードを調べます。

[7/14/2021 9:36:18 PM UTC] [ERROR]   [UploadServiceProvider]      [ExtensionHandlerStatusQueryError] ArcSqlInstancesRequest request is null, not sending data to RP.

これは、マシンが接続されたサーバーとして認識されなくなっていることを意味します。 サーバーを Azure Arc にオンボードし、いずれかの接続方法で拡張機能のインストールを再試行してください。

サーバーのマネージド ID に十分なアクセス許可がない

拡張機能ログで、次のレコードがあるかどうかを調べてください: [INFO] [UploadServiceProvider] [ExtensionHandlerArcUploadServicesNotifications] [AzureUpload] Arc post request failed with error: Forbidden message: {"ErrorDescription":{"ErrorCode":6,"Message":"The user has no access to the provided Azure resource."},"ResponseUrl":null}

マシンのマネージド ID に、Azure Connected SQL Server のオンボード ロールが割り当てられていることを確認してください。 「マシンが Arc 対応サーバーに既に接続されている場合」のロールの割り当て手順を参照してください。

ユーザーが Arc 対応 SQL Server リソースを新しいリソース プロバイダーに移行しなかった

拡張機能ログで、次のレコードがあるかどうかを調べてください: [7/14/2021 5:35:04 PM UTC] [INFO] [UploadServiceProvider] [ExtensionHandlerArcUploadServicesNotifications] [AzureUpload] Arc for Sql Server upload response status: InternalServerError.

こちらの手順に従って、Arc 対応 SQL Server リソースを Microsoft.AzureArcData に移行してください。

次のステップ