このチュートリアルでは、Azure Functions を使用して、Azure Synapse Analytics の専用 SQL プール (旧称 SQL DW) のコンピューティング リソースを管理します。
専用 SQL プール (旧称 SQL DW) で Azure 関数アプリを使用するには、 サービス プリンシパル アカウントを作成する必要があります。 サービス プリンシパル アカウントには、専用 SQL プール (以前の SQL DW) インスタンスと同じサブスクリプションで共同作成者アクセス権が必要です。
Azure Resource Manager テンプレートを使用してタイマーベースのスケーリングをデプロイする
テンプレートをデプロイするには、次の情報が必要です。
- 専用 SQL プール (以前の SQL DW) インスタンスが含まれているリソース グループの名前
- 専用 SQL プール (以前の SQL DW) インスタンスが含まれているサーバーの名前
- 専用 SQL プール (旧称 SQL DW) インスタンスの名前
- Microsoft Entra ID のテナント ID (ディレクトリ ID)
- サブスクリプション ID
- サービス プリンシパル アプリケーション ID
- サービス プリンシパルのシークレット キー
上記の情報を取得したら、次のテンプレートをデプロイします。
テンプレートをデプロイすると、3 つの新しいリソース (無料の Azure App Service プラン、従量課金ベースの Function App プラン、ログ記録と操作キューを処理するストレージ アカウント) が見つかります。 他のセクションを読み続けて、デプロイされた関数をニーズに合わせて変更する方法を確認してください。
スケール操作の時刻を変更する
Function App Service に移動します。 既定値を使用してテンプレートをデプロイした場合、このサービスには DWOperations という名前を付ける必要があります。 関数アプリを開くと、Function App Service に 5 つの関数がデプロイされていることがわかります。
DWScaleDownTrigger または DWScaleUpTrigger のいずれかを選択して、スケールアップまたはスケールダウンします。 ドロップダウン メニューの [統合] を選択します。
現在、表示される値は 、%ScaleDownTime% または %ScaleUpTime%を示す必要があります。 これらの値は、スケジュールが アプリケーション設定で定義されている値に基づいて行われるかどうかを示します。 現時点では、この値を無視し、次の手順に基づいてスケジュールを希望の時刻に変更できます。
スケジュール領域に、Azure Synapse Analytics をスケールアップする頻度を反映する CRON 式を追加します。
scheduleの値は、次の 6 つのフィールドを含む CRON 式です。{second} {minute} {hour} {day} {month} {day-of-week}たとえば、 "0 30 9 * * 1-5" は、平日の午前 9 時 30 分にトリガーを反映します。 詳細については、Azure Functions のスケジュールの例を参照してください。
コンピューティング レベルを変更する
Function App Service に移動します。 既定値を使用してテンプレートをデプロイした場合、このサービスには DWOperations という名前を付ける必要があります。 関数アプリを開くと、Function App Service に 5 つの関数がデプロイされていることがわかります。
DWScaleDownTrigger または DWScaleUpTrigger を選択して、コンピューティング値をスケールアップまたはスケールダウンします。 関数を選択すると、ウィンドウに index.js ファイルが表示されます。
ServiceLevelObjective の値を目的のレベルに変更し、[保存] を選択します。 ServiceLevelObjective は、[統合] セクションで定義されているスケジュールに基づいて、データ ウェアハウス インスタンスがスケーリングするコンピューティング レベルです。
スケールの代わりに、"pause" または "resume" を使用するようにしてください。
現在、既定で有効になっている関数は DWScaleDownTrigger と DWScaleUpTrigger です。 代わりに一時停止と再開の機能を使用する場合は、 DWPauseTrigger または DWResumeTrigger を有効にすることができます。
[関数] ウィンドウに移動します。
有効にする対応するトリガーのスライディング トグルを選択します。
それぞれのトリガーの [統合 ] タブに移動して、スケジュールを変更します。
注
スケーリング トリガーと一時停止/再開トリガーの機能的な違いは、キューに送信されるメッセージです。 詳細については、「 新しいトリガー関数の追加」を参照してください。
新しいトリガー関数を追加する
現時点では、テンプレート内に含まれるスケーリング関数は 2 つだけです。 これらの機能を使用すると、1 日の間にスケールダウンとスケールアップがそれぞれ 1 回ずつしかできません。 1 日に複数回スケールダウンしたり、週末に異なるスケーリング動作を行ったりするなど、より細かい制御を行うには、別のトリガーを追加する必要があります。
新しい空の関数を作成します。 関数の場所の近くにある [ + ] ボタンを選択して、関数テンプレート ウィンドウを表示します。
言語から JavaScript を選択し、 TimerTrigger を選択します。
関数に名前を付け、スケジュールを設定します。 この画像は、毎週土曜日の午前 0 時 (金曜日の深夜) に関数をトリガーするように設定する例です。
index.js の内容を他のトリガー関数の 1 つからコピーします。
次のように、操作変数を目的の動作に設定します。
// Resume the dedicated SQL pool (formerly SQL DW) instance var operation = { "operationType": "ResumeDw" } // Pause the dedicated SQL pool (formerly SQL DW) instance var operation = { "operationType": "PauseDw" } // Scale the dedicated SQL pool (formerly SQL DW)l instance to DW600c var operation = { "operationType": "ScaleDw", "ServiceLevelObjective": "DW600c" }
複雑なスケジュール設定
このセクションでは、一時停止、再開、スケーリング機能のより複雑なスケジュール設定を行うために必要な内容を簡単に示します。
例 1
毎日午前 8 時に DW600c にスケールアップし、午後 8 時に DW200c にスケールダウンします。
| Function | スケジュール | Operation |
|---|---|---|
| Function1 | 0 0 8 * * * | var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW600c"} |
| Function2 | 0 0 20 * * * | var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW200c"} |
例 2
毎日午前 8 時から DW1000c にスケールアップし、午後 4 時に DW600 に 1 回スケールダウンし、午後 10 時に DW200c にスケールダウンします。
| Function | スケジュール | Operation |
|---|---|---|
| Function1 | 0 0 8 * * * | var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW1000c"} |
| Function2 | 0 0 16 * * * | var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW600c"} |
| ファンクション3 | 0 0 22 * * * | var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW200c"} |
例 3
午前 8 時に DW1000c にスケールアップし、平日の午後 4 時に DW600c に 1 回スケール ダウンします。 金曜日の午後 11 時に一時停止し、月曜日の午前 7 時に再開します。
| Function | スケジュール | Operation |
|---|---|---|
| Function1 | 0 0 8 * * 1-5 | var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW1000c"} |
| Function2 | 0 0 16 * * 1-5 | var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW600c"} |
| Function3 | 0 0 23 * * 5 | var operation = {"operationType": "PauseDw"} |
| Function4 | 0 0 7 * * 1 | var operation = {"operationType": "ResumeDw"} |
次のステップ
タイマー トリガーの詳細については、Azure Functions を参照してください。
専用 SQL プール (以前の SQL DW) サンプル リポジトリを参照してください。