Automation Runbook をデプロイして、インデックスを自動的に再構築する

推定所要時間:30 分

あなたは、データベース管理の日常業務自動化を支援するシニア データベース管理者として採用されました。 この自動化はピーク時のパフォーマンスで AdventureWorks のデータベースの稼働を確実に続けるうえで役に立つだけでなく、特定の条件に基づいてアラートを生成することもできるようにします。 AdventureWorks では、サービスとしてのインフラストラクチャ (IaaS) とサービスとしてのプラットフォーム (PaaS) の両方のオファリングで SQL Server を利用しています。

📝 これらの演習では、T-SQL コードをコピーして貼り付け、既存の SQL リソースを使うように求めらる場合があります。 コードを実行する前に、コードが正しくコピーされていることを確認してください。

環境をセットアップします

ラボ仮想マシンが提供され、事前に構成されている場合は、C:\LabFiles フォルダーにラボ ファイルが用意されているはずです。 少し時間をとって確認してください。ファイルが既に存在存在している場合には、このセクションをスキップしてください。 ただし、独自のマシンを使用している場合、またはラボ ファイルが見つからない場合は、 GitHub からそれらを複製して続行する必要があります。

  1. ラボ仮想マシン、または提供されていない場合はローカル コンピューターから、Visual Studio Code のセッションを起動します。

  2. コマンド パレット (Ctrl+Shift+P) を開き、「Git Clone」と入力します。 [Git: Clone] オプションを選択します。

  3. [Repository URL] フィールドに次の URL を貼り付け、Enter キーを押します。

     https://github.com/MicrosoftLearning/dp-300-database-administrator.git
    
  4. リポジトリを、ラボ仮想マシン、または提供されていない場合はローカル コンピューターの [C:\LabFiles] フォルダーに保存してください(フォルダーが存在しない場合は作成します)。

Azure で SQL Server を構成する

Azure にログインし、Azure で実行されている既存の Azure SQL Server インスタンスがあるかどうかを確認します。 Azure で SQL Server インスタンスが既に実行されている場合は、このセクションをスキップします

  1. ラボ仮想マシン、または提供されていない場合はローカル コンピューターから、Visual Studio Code セッションを起動し、前のセクションから複製されたリポジトリに移動します。

  2. /Allfiles/Labs フォルダーを右クリックし、[統合ターミナルで開く] を選択します。

  3. Azure CLI を使用して Azure に接続しましょう。 次のコマンドを入力して、Enter キーを押します。

     az login
    

    📝 ブラウザー ウィンドウが開くことに注意してください。 ログインには Azure 資格情報を使用してください。

  4. Azure にログインしたら、リソース グループがまだ存在しない場合は作成し、そのリソース グループの下に SQL サーバーとデータベースを作成します。 次のコマンドを入力して、Enter キーを押します。 スクリプトが完了するまで数分かかります

     cd ./Setup
     ./deploy-sql-database.ps1
    

    📝 既定では、このスクリプトは contoso-rg というリソース グループを作成するか、名前が contoso-rg (存在する場合) で始まるリソースを使用していることに注意してください。 既定では、 West US 2 リージョン (westus2) にもすべてのリソースが作成されます。 最後に、 SQL 管理者パスワードのランダムな 12 文字のパスワードを生成します。 これらの値は、パラメーター -rgName-location-sqlAdminPw のいずれかまたは複数を使用して、任意の値に変更することができます。 パスワードは Azure SQL のパスワードの複雑さの要件を満たす必要があります。具体的には、12文字以上で、大文字 1 文字、小文字 1 文字、数字 1 つ、特殊文字 1 つを含める必要があります。

    📝 スクリプトによって、現在のパブリック IP アドレスが SQL Server ファイアウォール規則に追加されることに注意してください。

  5. スクリプトが完了すると、リソース グループ名、SQL Server 名とデータベース名、管理者ユーザー名とパスワードが返されます。 これらの値は、後でラボで必要になりますのでメモしておきます


Automation アカウントを作成する

  1. ラボ仮想マシン、または提供されていない場合はローカル コンピューターから、ブラウザー セッションを起動し、 https://portal.azure.comに移動します。 Azure 資格情報を使用して、Azure portal に接続します。

  2. Azure portal の検索バーに「automation」と入力し、検索結果から [Automation アカウント] を選択して、 [+ 作成] を選択します。

  3. [Automation アカウントの作成] ページで、次の詳細を入力して、 [確認と作成] を選択します。

    • リソース グループ: <お使いのリソース グループ>
    • Automation アカウント名: autoAccount
    • リージョン: 既定のリージョンを使用する
  4. [レビュー] ページで、 [作成] を選択します。

    📝 Automation アカウントの作成には数分かかる場合があります。

既存の Azure SQL Database に接続する

  1. Azure portal 内で、「sql データベース」を検索して、自分のデータベースに移動します。

  2. SQL データベース AdventureWorksLT を選択します。

  3. SQL Database ページのメイン セクションで、 [クエリ エディター (プレビュー)] を選択します。

  4. データベース管理者アカウントを使用してデータベースにサインインするための資格情報を求めるメッセージが表示され、[OK] を選択します

    ブラウザで新しいタブで開きます。 [クライアント IP の追加] を選択し、[保存] を選択します。 保存したら、前のタブに戻り、もう一度 [OK] を選択します。

    📝 ログインによって要求されたサーバー ‘your-sql-server-name’ を開くことができません。IP アドレス ‘xxx.xxx.xxx.xxx’ を持つクライアントは、サーバーへのアクセスを許可されていません。 というエラー メッセージが表示されることがあります。 その場合は、現在のパブリック IP アドレスを SQL Server のファイアウォール規則に追加する必要があります。

    ファイアウォール規則を設定する必要がある場合は、次の手順を行います。

    1. データベースの [概要] ページにある上部のメニュー バーから [サーバー ファイアウォールの設定] を選択します。
    2. [+ 現在の IPv4 アドレス (xxx.xxx.xxx) を追加する] を選択して、[保存] を選択します。
    3. 保存したら、AdventureWorksLT データベース ページに戻り、もう一度 **[クエリ エディター (プレビュー)] ** を選択します。
    4. データベース管理者アカウントを使用してデータベースにサインインするための資格情報を求めるメッセージが表示され、[OK] を選択します
  5. [クエリ エディター (プレビュー)][クエリを開く] を選択します。

  6. フォルダー アイコンを選択し、C:\LabFiles\dp-300-database-administrator\Allfiles\Labs\Module13 フォルダーに移動します。 usp_AdaptiveIndexDefrag.sql ファイルを選択し、[開く] を選択してから、[OK] を選択します。

  7. クエリの 5 行目と 6 行目の USE msdbGO を削除し、[実行] を選択します。

  8. [ストアド プロシージャ フォルダーを展開して、新しく作成されたストアド プロシージャを確認します。

Automation アカウント資産を構成する

次の手順で、Runbook の作成準備として必要な資産を構成します。 次に、[Automation アカウント] を選択します。

  1. Azure portal 上で、上部の検索ボックスに「automation」と入力し、[Automation アカウント] を選択します

  2. 作成した autoAccount Automation アカウントを選択します。

  3. Automation ブレードの [共有リソース] セクションで、 [モジュール] を選択します。 [ギャラリーの参照] を選択します。

  4. ギャラリー内で SqlServer を検索します。

  5. SqlServer を選択すると、次の画面に移動するので、[選択] ボタンを選択します。

  6. [モジュールの追加] ページで、使用可能な最新のランタイム バージョンを選択し、 [インポート] を選択します。 これにより、PowerShell モジュールが Automation アカウントにインポートされます。

  7. データベースに安全にサインインするには、資格情報を作成する必要があります。 Automation アカウントのブレードから、[共有リソース] セクションに移動し、[資格情報] を選択します。

  8. [+ 資格情報の追加] を選択し、以下の情報を入力して、 [作成] を選択します。

    • 名前: SQLUser
    • ユーザー名: sqladmin
    • パスワード: <強力なパスワードを入力します。具体的には、12文字以上で、大文字 1 文字、小文字 1 文字、数字 1 つ、特殊文字 1 つを含める必要があります。>
    • パスワードの確認入力: <前に入力したパスワードを再入力します。>

PowerShell Runbook を作成する

  1. Azure portal 内で、「sql データベース」を検索して、自分のデータベースに移動します。

  2. SQL データベース AdventureWorksLT を選択します。

  3. [概要] ページで、Azure SQL データベースの [サーバー名] をコピーします (サーバー名は dp300-lab で始まるはずです)。 これは後の手順で貼り付けます。

  4. Azure portal 上で、上部の検索ボックスに「automation」と入力し、[Automation アカウント] を選択します

  5. autoAccount Automation アカウントを選択します。

  6. Automation アカウント ブレードの [プロセスオートメーション] セクションまで展開し、[Runbook] を選択します。

  7. [+ Runbook の作成] を選択します。

    📝 学習したように、2 つの既存の Runbook が作成されていることに注意してください。 これらは、Automation アカウントのデプロイ中に自動的に作成されました。

  8. Runbook の名前として「IndexMaintenance」を、Runbook の種類として「PowerShell」を入力します。 使用可能な最新のランタイム バージョンを選択し、 [確認および作成] を選択します。

  9. [Runbook の作成] ページで [作成] を選択します。

  10. Runbook が作成されたら、以下の PowerShell コード スニペットをコピーして Runbook エディターに貼り付けます。

    📝 Runbook を保存する前に、コードが正しくコピーされていることを確認してください。

     $AzureSQLServerName = ''
     $DatabaseName = 'AdventureWorksLT'
        
     $Cred = Get-AutomationPSCredential -Name "SQLUser"
     $SQLOutput = $(Invoke-Sqlcmd -ServerInstance $AzureSQLServerName -UserName $Cred.UserName -Password $Cred.GetNetworkCredential().Password -Database $DatabaseName -Query "EXEC dbo.usp_AdaptiveIndexDefrag" -Verbose) 4>&1
    
     Write-Output $SQLOutput
    

    📝 上記のコードは、ストアド プロシージャ usp_AdaptiveIndexDefrag を実行する PowerShell スクリプトであることに注意してください。 このスクリプトでは、 Invoke-Sqlcmd コマンドレットを使用して SQL Server に接続し、ストアド プロシージャを実行します。 Get-AutomationPSCredential コマンドレットは、Automation アカウントに格納されている資格情報を取得するために使用されます。

  11. スクリプトの 1 行目に、前の手順でコピーしたサーバー名を貼り付けます。

  12. 保存を選択してから、公開を選択します。

  13. [はい] を選択して、発行アクションを確定します。

  14. IndexMaintenance Runbook が発行されました。

Runbook のスケジュールの作成

次に、Runbook をスケジュールして定期的に実行されるようにします。

  1. IndexMaintenance Runbook の左側のナビゲーションにある [リソース] の下で、 [スケジュール] を選択します。

  2. [+ スケジュールの追加] を選択します。

  3. [Runbook へのスケジュールのリンク] を選択します。

  4. [+ スケジュールの追加] を選択します。

  5. 以下の情報を入力し、[作成] を選択します。

    • 名前: DailyIndexDefrag
    • 説明: AdventureWorksLT データベースの毎日のインデックスのデフラグ。
    • 開始: 4:00 AM (翌日)
    • タイム ゾーン:<該当する場所に一致するタイム ゾーンを選択します>
    • 繰り返し: 定期的
    • 繰り返し間隔: 1 日
    • 有効期限の設定: なし

    📝 開始時刻は翌日の午前 4 時に設定されることに注意してください。 [タイム ゾーン] を、自身のローカル タイム ゾーンに設定します。 [繰り返し] を 1 日ごとに設定します。 無期限です。

  6. [作成] を選択してから [OK] を選択します。

  7. これでスケジュールが作成され、Runbook にリンクされました。 [OK] を選択します。

Azure Automation から、Azure 環境と非 Azure 環境にわたって一貫した管理をサポートするクラウドベースのオートメーションと構成サービスが提供されています。


リソースをクリーンアップする

Azure SQL Server を他の目的で使用していない場合は、このラボで作成したリソースをクリーンアップできます。

リソース グループを削除します

このラボの新しいリソース グループを作成した場合は、リソース グループを削除して、このラボで作成されたすべてのリソースを削除できます。

  1. Azure portal で、左側のナビゲーション ペインから リソース グループ を選択するか、検索バーで リソース グループを検索して、結果からそのリソース グループを選択します。

  2. このラボ用に作成したリソース グループに移動します。 リソース グループには、Azure SQL Server と、このラボで作成されたその他のリソースが含まれます。

  3. トップ メニューから [リソース グループの削除] を選択します。

  4. [リソース グループの削除] ダイアログで、リソース グループの名前を入力して確認した後、[削除] を選択します。

  5. リソース グループが削除されるのを待ちます。

  6. Azure Portal を閉じます。

ラボ リソースのみを削除する

このラボ用の新しいリソース グループを作成せず、リソース グループとその以前のリソースをそのまま残したい場合は、このラボで作成したリソースを削除できます。

  1. Azure portal で、左側のナビゲーション ペインから リソース グループ を選択するか、検索バーで リソース グループを検索して、結果からそのリソース グループを選択します。

  2. このラボ用に作成したリソース グループに移動します。 リソース グループには、Azure SQL Server と、このラボで作成されたその他のリソースが含まれます。

  3. ラボで以前に指定した SQL Server 名のプレフィックスが付いたすべてのリソースを選択します。

  4. トップ メニューから、削除を選択します。

  5. [リソースの削除] ダイアログで、「delete」と入力し、[削除] を選択します。

  6. [削除] をもう一度選択し、リソースの削除を確定します。

  7. リソースが削除されるまで待ちます。

  8. Azure Portal を閉じます。

LabFiles フォルダーを削除する

このラボ用に新しい LabFiles フォルダーを作成して、それが不要になった場合は、LabFiles フォルダーを削除して、このラボで作成されたすべてのファイルを削除できます。

  1. ラボ仮想マシン、または提供されていない場合はローカル コンピューターから、エクスプローラーを開き、 C:\ ドライブに移動します。
  2. LabFiles フォルダーを右クリックし、[削除] を選択します。
  3. [はい] を選択して、フォルダーの削除を確認します。

このラボは以上で完了です。

この演習を完了することで、SQL サーバー データベースのインデックスの最適化を、毎日午前 4 時に実行するように自動化しました。