Azure Synapse Analytics SQL プールで Azure Functions を使用してコンピューティング リソースを管理しますUse Azure Functions to manage compute resources in Azure Synapse Analytics SQL pool

このチュートリアルでは、Azure Synapse Analytics で Azure Functions を使用し、SQL プールのコンピューティング リソースを管理します。This tutorial uses Azure Functions to manage compute resources for a SQL pool in Azure Synapse Analytics.

Azure Function App を SQL プールと組み合わせて使用するためには、ご利用の SQL プール インスタンスと同じサブスクリプションに、共同作成者のアクセス権を持ったサービス プリンシパル アカウントを作成する必要があります。In order to use Azure Function App with SQL pool, you must create a Service Principal Account with contributor access under the same subscription as your SQL pool instance.

Azure Resource Manager テンプレートを使用してタイマーベースのスケーリングを展開するDeploy timer-based scaling with an Azure Resource Manager template

このテンプレートを展開するには、次の情報が必要です。To deploy the template, you need the following information:

  • SQL プール インスタンスが存在するリソース グループの名前Name of the resource group your SQL pool instance is in
  • SQL プール インスタンスが存在するサーバーの名前Name of the server your SQL pool instance is in
  • SQL プール インスタンスの名前Name of your SQL pool instance
  • Azure Active Directory のテナント ID (ディレクトリ ID)Tenant ID (Directory ID) of your Azure Active Directory
  • サブスクリプション IDSubscription ID
  • サービス プリンシパルのアプリケーション IDService Principal Application ID
  • サービス プリンシパルのシークレット キーService Principal Secret Key

以上の情報が揃ったら、次のテンプレートを展開します。Once you have the preceding information, deploy this template:

[Azure に配置する] というラベルの付いたボタンが示されている画像。Image showing a button labeled "Deploy to Azure".

テンプレートを展開すると、3 つのリソースが新たに追加されていることがわかります。無料の Azure App Service プランと、使用量ベースの Function App プラン、そして、ログと操作キューを担うストレージ アカウントです。Once you've deployed the template, you should find three new resources: a free Azure App Service Plan, a consumption-based Function App plan, and a storage account that handles the logging and the operations queue. デプロイされた関数を実際の要件に合わせて変更する方法については、引き続き他のセクションもご覧ください。Continue reading the other sections to see how to modify the deployed functions to fit your need.

コンピューティング レベルを変更するChange the compute level

  1. ご利用の Function App サービスに移動します。Navigate to your Function App service. テンプレートを既定値のままデプロイした場合、このサービスの名前は DWOperations になります。If you deployed the template with the default values, this service should be named DWOperations. Function App を開くと、Function App サービスに 5 つの関数がデプロイされていることがわかります。Once your Function App is open, you should notice there are five functions deployed to your Function App Service.

    テンプレートでデプロイされる関数

  2. 変更の対象がスケールアップ時刻であるかスケールダウン時刻であるかに応じて、 [DWScaleDownTrigger] または [DWScaleUpTrigger] を選択します。Select either DWScaleDownTrigger or DWScaleUpTrigger depending on whether you would like to change the scale up or scale down time. ドロップダウン メニューで [統合] を選択します。In the drop-down menu, select Integrate.

    関数の統合を選択

  3. この時点で表示される値は、 %ScaleDownTime%%ScaleUpTime% のどちらかです。Currently the value displayed should say either %ScaleDownTime% or %ScaleUpTime%. これらの値は、スケジュールが [アプリケーション設定] に定義された値に基づいていることを示します。These values indicate the schedule is based on values defined in your Application Settings. 差し当たり、この値は無視してかまいません。以降の手順に基づき、必要な時刻に合わせてスケジュールを変更してください。For now, you can ignore this value and change the schedule to your preferred time based on the next steps.

  4. SQL Data Warehouse のスケールアップ頻度を表す時刻 (CRON 式) をスケジュール領域に追加します。In the schedule area, add the time the CRON expression you would like to reflect how often you want the SQL Data Warehouse to be scaled up.

    関数のスケジュールを変更

    schedule の値は、次の 6 個のフィールドが含まれる CRON 式です。The value of schedule is a CRON expression that includes these six fields:

    {second} {minute} {hour} {day} {month} {day-of-week}
    

    たとえば、「0 30 9 * * 1-5」と入力した場合、毎平日の午前 9 時 30 分に実行されます。For example, "0 30 9 * * 1-5" would reflect a trigger every weekday at 9:30am. 詳細については、Azure Functions のスケジュールの例を参照してください。For more information, visit Azure Functions schedule examples.

スケール操作の時間を変更するChange the time of the scale operation

  1. ご利用の Function App サービスに移動します。Navigate to your Function App service. テンプレートを既定値のままデプロイした場合、このサービスの名前は DWOperations になります。If you deployed the template with the default values, this service should be named DWOperations. Function App を開くと、Function App サービスに 5 つの関数がデプロイされていることがわかります。Once your Function App is open, you should notice there are five functions deployed to your Function App Service.

  2. 変更の対象がスケールアップのコンピューティング値であるかスケールダウンのコンピューティング値であるかに応じて、 [DWScaleDownTrigger] または [DWScaleUpTrigger] を選択します。Select either DWScaleDownTrigger or DWScaleUpTrigger depending on whether you would like to change the scale up or scale down compute value. 関数を選択すると、ウィンドウに index.js ファイルが表示されます。Upon selecting the functions, your pane should show the index.js file.

    関数のトリガー コンピューティング レベルを変更

  3. ServiceLevelObjective の値を目的のレベルに変更し、保存ボタンをクリックします。Change the value of ServiceLevelObjective to the level you would like and hit save. この値は、[統合] セクションで定義されたスケジュールに基づいてデータ ウェアハウス インスタンスをスケーリングする際の目標となるコンピューティング レベルです。This value is the compute level that your data warehouse instance will scale to based on the schedule defined in the Integrate section.

スケールではなく一時停止または再開を使用するUse pause or resume instead of scale

現在、既定で有効になっている関数は DWScaleDownTriggerDWScaleUpTrigger です。Currently, the functions on by default are DWScaleDownTrigger and DWScaleUpTrigger. それらの代わりに一時停止と再開の機能を使用する場合は、DWPauseTrigger または DWResumeTrigger を有効にしてください。If you would like to use pause and resume functionality instead, you can enable DWPauseTrigger or DWResumeTrigger.

  1. [関数] ウィンドウに移動します。Navigate to the Functions pane.

    [関数] ウィンドウ

  2. 有効にするトリガーに対応するスライド式のトグル ボタンをクリックします。Click on the sliding toggle for the corresponding triggers you would like to enable.

  3. それぞれのトリガーの [統合] タブに移動して、そのスケジュールを変更します。Navigate to the Integrate tabs for the respective triggers to change their schedule.

    注意

    スケーリング トリガーと一時停止/再開トリガーの機能上の違いは、キューに送信されるメッセージです。The functional difference between the scaling triggers and the pause/resume triggers is the message that is sent to the queue. 詳細については、「新しいトリガー関数を追加する」を参照してください。For more information, see Add a new trigger function.

新しいトリガー関数を追加するAdd a new trigger function

現在、テンプレートに含まれているスケール関数は 2 つだけです。Currently, there are only two scaling functions included within the template. これらの関数を使用すると、1 日に実行できるスケールダウンとスケールアップはそれぞれ 1 回だけです。With these functions, during the course of a day, you can only scale down once and up once. 1 日に複数回スケールダウンしたり、平日と週末とでスケーリングの動作に違いを設けたりするなど、さらに細かな制御が必要となる場合は、別途トリガーを追加する必要があります。For more granular control, such as scaling down multiple times per day or having different scaling behavior on the weekends, you need to add another trigger.

  1. 新しく空の関数を作成します。Create a new blank function. [関数] の横にある + ボタンを選択して、関数テンプレート ウィンドウを表示します。Select the + button near your Functions location to show the function template pane.

    新しい関数の作成

  2. [言語] から [JavaScript] を選択し、 [TimerTrigger] を選択します。From Language, select JavaScript, then select TimerTrigger.

    新しい関数の作成

  3. 関数に名前を付けてスケジュールを設定します。Name your function and set your schedule. この画像は、毎週土曜日の午前 0 時 (金曜日の深夜) に関数をトリガーするように設定する例です。The image shows how one may trigger their function every Saturday at midnight (late Friday evening).

    土曜日にスケール ダウン

  4. index.js の内容を他のトリガー関数からコピーします。Copy the content of index.js from one of the other trigger functions.

    index js のコピー

  5. 次のように operation 変数を目的の動作に設定します。Set your operation variable to the desired behavior as follows:

    // Resume the SQL pool instance
    var operation = {
        "operationType": "ResumeDw"
    }
    
    // Pause the SQL pool instance
    var operation = {
        "operationType": "PauseDw"
    }
    
    // Scale the SQL pool instance to DW600
    var operation = {
        "operationType": "ScaleDw",
        "ServiceLevelObjective": "DW600"
    }
    

複雑なスケジュールComplex scheduling

このセクションでは、一時停止、再開、スケーリングの各機能に対して、より複雑なスケジュールを設定する方法を簡単に紹介します。This section briefly demonstrates what is necessary to get more complex scheduling of pause, resume, and scaling capabilities.

例 1Example 1

毎日午前 8 時に DW600 にスケールアップし、午後 8 時に DW200 にスケールダウンします。Daily scale up at 8am to DW600 and scale down at 8pm to DW200.

機能Function スケジュールSchedule 操作Operation
Function1Function1 0 0 8 * * *0 0 8 * * * var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW600"}
Function2Function2 0 0 20 * * *0 0 20 * * * var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW200"}

例 2Example 2

毎日午前 8 時に DW1000 にスケールアップし、午後 4 時に DW600 にスケールダウンします。さらに、午後 10 時に DW200 にスケールダウンします。Daily scale up at 8am to DW1000, scale down once to DW600 at 4pm, and scale down at 10pm to DW200.

機能Function スケジュールSchedule 操作Operation
Function1Function1 0 0 8 * * *0 0 8 * * * var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW1000"}
Function2Function2 0 0 16 * * *0 0 16 * * * var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW600"}
Function3Function3 0 0 22 * * *0 0 22 * * * var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW200"}

例 3Example 3

平日の午前 8 時に DW1000 にスケールアップし、午後 4 時に 1 回 DW600 にスケールダウンします。Scale up at 8am to DW1000 , scale down once to DW600 at 4pm on the weekdays. 金曜日の午後 11 時に一時停止し、月曜朝の午前 7 時に再開します。Pauses Friday 11pm, resumes 7am Monday morning.

機能Function スケジュールSchedule 操作Operation
Function1Function1 0 0 8 * * 1-50 0 8 * * 1-5 var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW1000"}
Function2Function2 0 0 16 * * 1-50 0 16 * * 1-5 var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW600"}
Function3Function3 0 0 23 * * 50 0 23 * * 5 var operation = {"operationType": "PauseDw"}
Function4Function4 0 0 7 * * 00 0 7 * * 0 var operation = {"operationType": "ResumeDw"}

次のステップNext steps

Azure Functions をタイマーでトリガーする方法について確認します。Learn more about timer trigger Azure functions.

SQL プールのサンプル リポジトリを確認します。Checkout the SQL pool samples repository.