エラスティック ジョブの作成、構成、および管理
適用対象: Azure SQL データベース
この記事では、Azure SQL Database のエラスティック ジョブを作成、構成、および管理するために必要な手順について説明します。 これらの手順の多くは Azure portal および T-SQL、PowerShell、REST API を使用して実行できます。 エラスティック ジョブを使用すると、複数のデータベースにわたって 1 つまたは複数の Transact-SQL (T-SQL) スクリプトを同時に実行できます。 詳細については、「エラスティック ジョブ (プレビュー) を使用して管理タスクを自動化する」または「エラスティック ジョブの作成、構成、および管理 (プレビュー)」で詳細を確認してください。
エラスティック ジョブ エージェントの作成および構成
DTU 購入モデルを使用して、S1 以上で、中身が空の Azure SQL Database を作成または特定します。 このデータベースは、ジョブ エージェントと同じサーバーに存在する必要があります。 このデータベースは、エラスティック ジョブ エージェントの作成時に ジョブ データベースとして使用されます。 Azure portal、PowerShell、Azure CLI (sql up) を使用して、単一データベースを作成できます。
Azure portal で、または PowerShell を使用してエラスティック ジョブ エージェントを作成します。
Azure portal でエラスティック ジョブ エージェントを作成する手順は次のとおりです。
- Azure portal で、[Elastic Job agents] (Elastic Job エージェント) を検索します。 [作成] を選択して、新しいエラスティック ジョブ エージェントのリソースのプロビジョニングを開始します。 またはこのリンクから、Azure portal で Elastic Job エージェントを作成します。
- エラスティック ジョブ エージェント名を指定します。
- エージェントのサブスクリプションとリソース グループを選択します。 必要な場合は、新しいリソース グループを作成します。 エラスティック ジョブは、他のリソース グループ、サブスクリプション、さらには他の Azure リージョン内のデータベースをターゲットにすることができます。
- エラスティック ジョブ エージェントのサーバーになる Azure SQL Database 論理サーバーを選択します。
- エラスティック ジョブ エージェントのデータベースになる論理サーバーの Job データベースを選択します。 検証により、データベースが適切であることが確認されます。
- [サービス レベル] で、[JA 100] を選択します。
- [Next: Identity] (次へ: ID) を選択します。
- ジョブ エージェントでターゲット サーバー/データベースに対する認証を行うには、2 つの方法があります。ユーザー割り当てマネージド ID (UMI) を使用した Microsoft Entra 認証、またはデータベース スコープの資格情報を使用する方法です。
- エラスティック ジョブ エージェントのプロビジョニング プロセスの外部で UMI を作成するか、既存の UMI を使用します。 [ユーザー割り当てマネージド ID の追加] を選択します。 UMI を選択します。 [追加] を選択します。
- データベース スコープの資格情報を使用する場合は、このチュートリアルの後半の手順を参照してください。
- タグを選択します。
- Azure タグの使用を検討します。 たとえば、リソースを作成したユーザーを識別する "オーナー" タグまたは "CreatedBy" タグ、このリソースが稼働中、開発中であるかどうかを識別する Environment タグなどです。詳細については、「Azure リソースの名前付けおよびタグ付けの戦略を作成する」を参照してください。
- [Review + create](レビュー + 作成) を選択します。
- [確認と作成] ページで新しいエラスティック ジョブ エージェントの選択を確認し、[作成] を選択します。
- ターゲット サーバー/データベースに対して認証を行うには、さらに次の手順が必要です。 このチュートリアル記事の次のセクションの手順を続行してください。
ジョブ エージェント認証を作成する
エラスティック ジョブ エージェントは、各ターゲット サーバーまたはデータベースに対して認証可能である必要があります。 このセクションでは、エラスティック ジョブ エージェントでターゲット グループ内のサーバー/データベースに対して認証を行うために必要な手順について説明します。
ターゲットに対するエラスティック ジョブ エージェントの認証には、次の 2 つのオプションがあります。
- ユーザー割り当てマネージド ID (UMI) にマップされたデータベース ユーザーを使用して、ターゲット サーバー/データベースに対する認証を行います。
- Microsoft Entra 認証 (旧称 Azure Active Directory) で UMI を使用することをお勧めします。
- 各データベースのデータベース スコープの資格情報にマップされたデータベース ユーザーを使用します。
- 以前は、データベース スコープの資格情報が、エラスティック ジョブ エージェントがターゲットに対して認証するための唯一のオプションでした。
ユーザー割り当てマネージド ID (UMI) による Microsoft Entra 認証を使用する
ユーザー割り当てマネージド ID (UMI) を使った Microsoft Entra (旧称 Azure Active Directory) 認証を使用します。 これは、推奨されている認証方法です。
- すべてのジョブ ターゲット論理サーバー/データベース、およびジョブ出力論理サーバーで、Microsoft Entra (旧称 Azure Active Directory) 認証を有効にします。
- ユーザー割り当てマネージド ID (UMI) を作成するか、既存の UMI を使用します。
- Azure portal、Azure CLI、PowerShell、Resource Manager、または REST API を使用して、新しい UMI を作成できます。
- 作成したエラスティック ジョブ エージェントに UMI を割り当てます。
- エラスティック ジョブ エージェントの作成時に UMI を割り当てることをおすすめします。「エラスティック ジョブ エージェントの作成および構成」の手順を参照してください。 Azure portal でジョブ エージェントを作成する際に、[ID] タブでエラスティック ジョブ エージェントに割り当てます。
- UMI を使用するように既存のエラスティック ジョブ エージェントを更新するには、エラスティック ジョブ エージェントの Azure portal ページで、リソース メニューにある [セキュリティ] メニューから [ID] に移動します。 UMI を選択してエラスティック ジョブ エージェントに割り当てます。
New-AzSqlElasticJobAgent
またはSet-AzSqlElasticJobAgent
PowerShell コマンドレットを使用してエラスティック ジョブ エージェントを作成または更新する場合は、次のパラメーターを使用します:-IdentityType UserAssigned -IdentityID <identity resource path>
。 例:$parameters = @{ Name = '<job agent name>' ResourceGroupName = '<Resource_Group_Name>' IdentityType = 'UserAssigned' IdentityID = '/subscriptions/fa58cf66-caaf-4ba9-875d-f1234/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<UMI name here>' } Set-AzSqlElasticJobAgent @parameters
- REST API を使用して、エラスティック ジョブ エージェントを作成または更新することもできます。
- ターゲット グループを作成し、ジョブのターゲットを追加します。 PowerShell または T-SQL を使用して、ターゲット グループおよびターゲット (ジョブの実行の対象とするデータベース) を定義します。
- 各ターゲット サーバー/データベースで、T-SQL または PowerShell を使用して、UMI またはデータベース スコープの資格情報にマップされた包含ユーザーを作成します。
- 出力データベースで、アクセス許可を作成して UMI ジョブ ユーザーに割り当てます。 出力データベースに接続し、
jobuserUMI
という名前のユーザーに対して次のスクリプトの例を実行します。CREATE USER [jobuserUMI] FROM EXTERNAL PROVIDER; GO
- the @output_table_name argument の
sp_add_jobstep
呼び出しで出力パラメーターが指定されている場合は、ジョブ エージェント UMI またはデータベース スコープの資格情報に、その出力テーブルに CREATE TABLE および IN Standard Edition RT データへのアクセス許可を付与する必要があります。GRANT CREATE TABLE TO [job_user]; GRANT SELECT,INSERT,UPDATE,DELETE ON [dbo].[output_table_name] TO job_user;
- 各ターゲット サーバー/データベースで、ジョブ スクリプトを実行するために必要なアクセス許可をデータベース ユーザーに付与します。 これらのアクセス許可は、T-SQL クエリの要件によって異なります。
データベース スコープの資格情報を使用する
ジョブ データベースと各ターゲット サーバー/データベースで、認証にデータベース スコープの資格情報を使用できます。 以前は、データベース スコープの資格情報がエラスティック ジョブで使用できる唯一のオプションでした。
注意
UMI が Job Agent に割り当てられている場合、SQL 認証はターゲットへの接続には使用されません。 Job Agent は UMI を使用した Microsoft Entra 認証のみを使用して、すべてのターゲット データベースに接続します。
- ジョブ データベースにデータベース スコープの資格情報を作成します。
- データベース スコープの資格情報の作成に PowerShell を使用する。
- データベース スコープの資格情報の作成に T-SQL を使用する。
- PowerShell を使用してターゲット グループ (ジョブの実行の対象とするデータベース)を定義するか、T-SQL を使用してターゲットを定義します。
- ジョブを実行する各ターゲット データベースに、ジョブ エージェントのログイン/ユーザーを作成します。 各ターゲット サーバー/データベースのログイン/ユーザーには、ジョブ ユーザーのデータベース スコープ資格情報の ID と同じ名前と、ジョブ ユーザーのデータベース スコープ資格情報と同じパスワードが必要です。
- 資格情報とユーザーを各ターゲット データベースに追加するには、PowerShell を使用します。
- ユーザーの追加についての詳細は、「ログインとユーザー アカウントを使用してサーバーおよびデータベースへのアクセスを承認する」を参照してください。
- 出力データベースで、アクセス許可を作成してジョブ ユーザーに割り当てます。
- 出力データベースをホストする論理サーバーの
master
データベースに接続します。 まだ存在しない場合は、ジョブ ユーザーのデータベース スコープの資格情報の ID と同じ名前およびパスワードを使用して、SQL 認証ログインを作成します。CREATE LOGIN [job_user] WITH PASSWORD '<same_password_as_database-scoped_credential>' GO
- 出力データベースに接続し、
job_user
という名前のユーザーに対して次のスクリプトの例を実行します。CREATE USER [job_user] FROM LOGIN [job_user]; GO
- @output_table_name 引数の
sp_add_jobstep
呼び出しで出力パラメーターが指定されている場合、ジョブ エージェント UMI またはデータベース スコープの資格情報には、その出力テーブルに CREATE TABLE および INSERT データを実行するアクセス許可が付与されている必要があります。GRANT CREATE TABLE TO [job_user]; GRANT SELECT,INSERT,UPDATE,DELETE ON [dbo].[output_table_name] TO job_user;
- 出力データベースをホストする論理サーバーの
- 各ターゲット サーバー/データベースで、ジョブ スクリプトを実行するために必要なアクセス許可をデータベース ユーザーに付与します。 これらのアクセス許可は、T-SQL クエリの要件によって異なります。
ジョブの作成、実行、および管理
- PowerShell または T-SQL を使用してジョブを作成します。
- 各エラスティック ジョブにステップを追加します。 ジョブ ステップごとにターゲット グループを選択する必要があります。 PowerShell または T-SQL を使用してジョブ ステップを追加します。
- PowerShell または T-SQL を使用してジョブを実行します。
- Azure portal を使用してジョブの実行状態を監視するか、PowerShell または T-SQL を使用してジョブを監視します。
Azure SQL エラスティック ジョブのプライベート エンドポイントを構成する
各ターゲット サーバーには、サービス管理のプライベート エンドポイントを使用することで到達できます。また、Microsoft によって作成および管理され、エラスティック ジョブでのみ使用できます。 エラスティック ジョブのプライベート エンドポイントを作成すると、エラスティック ジョブとターゲット サーバーの間にプライベート リンクが確立されます。 構成が完了すると、エラスティック ジョブ エージェントとターゲット サーバー間のすべての通信がプライベート エンドポイント経由で行われます。
構成は簡単です。 この通信を有効にするには、目的のターゲット サーバーとジョブ出力サーバーごとにプライベート エンドポイントを作成する必要があります。
- [Elastic job agent] (エラスティック ジョブ エージェント) ナビゲーション メニューの [セキュリティ] で、[プライベート エンドポイント] を選択します。
- [サーバーの追加] を選択 し、プライベート エンドポイントを作成します。
- [プライベート エンドポイントの作成] ウィンドウを開きます。
- Azure 内の任意の サブスクリプションからターゲット サーバーを選択できます。
- そのサブスクリプション内のターゲットの Azure SQL Database 論理サーバーを選択します。
- プライベート エンドポイント名を指定します。
- [プライベート エンドポイントの作成] を選択します。 デプロイには少し時間がかかります。 すぐに、[プライベート エンドポイント] ページの [接続の状態] に [保留中] と表示されます。
- Azure portal で、ターゲットの Azure SQL Database 論理サーバーに移動します。
- そのターゲットの Azure SQL Database 論理サーバーの管理者として、[SQL サーバー] ナビゲーション メニューの [セキュリティ] で [ネットワーク] を選択します。
- [プライベート アクセス] を選択します。
- 保留中のプライベート エンドポイント要求を承認します。
- [プライベート エンドポイント] ページの [接続の状態] に [承認済み] と表示されます。 これで、ジョブ エージェントとそのターゲットの Azure SQL Database 論理サーバー内のデータベース、またはエラスティック プール間の通信は、サービス管理のプライベート エンドポイントを経由するようになります。
- そのターゲットの Azure SQL Database 論理サーバーの管理者として、[SQL サーバー] ナビゲーション メニューの [セキュリティ] で [ネットワーク] を選択します。 エラスティック ジョブの目的でパブリック アクセスを有効にする必要はありません。
Azure Monitor を使用してジョブ エージェントアラートを構成する
ジョブの実行状態に関する通知を受け取るエラスティック ジョブ エージェントのリソースに対して Azure Monitor アラートを構成します。 たとえば、ユーザーが構成したアクション グループを使用して、ジョブの失敗/成功を通知できます。
エラスティック ジョブ エージェントアラートは、Azure portal、PowerShell、または REST API を使用して作成できます。
Azure portal を使用してエージェントアラートを作成する
Azure portal、Azure CLI、PowerShell、REST API を使用して、Azure Monitor アラート ルールを作成します。 エラスティック ジョブのアラート ルールは、Azure SQL Database などの他のアラート ルールと同様に機能します。
Azure Portal で続行する場合:
- エラスティック ジョブ エージェントの Azure portal のリソース メニューから、[監視] メニューに移動して [アラート] を選択します。
- [Set up alert rules on this resource] (このリソースのアラート ルールを設定) プロンプトで、[アラート ルールの作成] を選択します。
- [アラート ルールの作成] ページで、[シグナルの選択] ページが開きます。 エラスティック ジョブ メトリック [Elastic Jobs Executions Failed] (エラスティック ジョブ実行失敗)、[Elastic Jobs Executions Successful] (エラスティック ジョブ実行成功)、または [Elastic Jobs Executions Timed Out] (エラスティック ジョブ実行タイムアウト) を選択します。
- [アラート ロジック] では、[しきい値]、[集計の種類]、[演算子]、[単位] は既定値のままにします。
- [しきい値] を
0
に設定します。 その他の設定は、既定値のままにしておきます。 - [次へ: アクション] を選択します。
- [アクション グループの作成] を選択するか、既存のアクション グループを選択します。
- Azure portal で Azure Monitor アラートのアクション グループを作成し、エラーの際に管理者や開発者に電子メールを送信するなどの通知の設定を行います。
- アラートのアクション グループをテストします。
- [Next: Details](次へ: 詳細) を選択します。
- プロジェクトの詳細として、サブスクリプションとリソース グループを指定します。
- アラート通信のアラート ルールの詳細を指定します。 アラート ルール名を指定します。
- [タグ] を選択し、このアラートの CreatedBy や Environment などのメタデータを指定します。
- [確認および作成] を選択します。 [作成] を選択します Azure portal にアラート ルールが表示されるまでには、数分かかる場合があります。
- 必要に応じて、Azure portal、Azure CLI、または PowerShell を使用して Azure Monitor のアラート処理ルールを作成します。 アラート処理ルールを使用して、通知の非表示、または特定の種類のアラートに対する特定のアクションの適用など、アラートがトリガーされたときに何が起こるかを決定できます。
ジョブ エージェントをスケーリングする
既定では、ジョブ エージェントは JA100 で作成され、最大 100 件のエラスティック ジョブを同時に実行できます。 サービス レベルの変更は非同期操作であり、新しいサービス レベルはプロビジョニングの遅延後に使用可能になります。
エラスティック ジョブ エージェントの同時実行数が 100 を超える必要がある場合は、より高いサービス レベルを使用できます。「同時実行の容量レベル」を参照してください。 現在、ジョブ エージェントのサービス レベルは、Azure portal、PowerShell、または REST API を使用して変更できます。
同時実行ジョブでサービス レベルを超えると、サービス レベルの同時実行ジョブの制限を超えてジョブが開始される前に、キューの遅延が発生します。
Azure portal を使用してエラスティック ジョブ エージェントをスケーリングする
- Azure portal で、[Elastic Job agents] (Elastic Job エージェント) ページに移動します。
- [価格レベル]を選択するか、コンテキスト メニューから [Scale Up/Down] (スケールアップ/スケールダウン) を選択します。
- [サービス レベル] ドロップダウン リストから新しいサービス レベルを選択します。
- コストのカードを確認します。
- [更新] を選択します。
PowerShell を使用してエラスティック ジョブ エージェントをスケーリングする
Set-AzSqlElasticJobAgent
のオプション パラメーター -ServiceObjective
を使用して、新しいサービス目標を指定できます。 次に例を示します。
$parameters = @{
Name = '<job agent name>'
ResourceGroupName = '<Resource_Group_Name>'
ServiceObjective = 'JA200'
}
Set-AzSqlElasticJobAgent @parameters
REST API を使用してエラスティック ジョブ エージェントをスケーリングする
ジョブ エージェント REST API を使用して、ジョブ エージェントをスケーリングできます。 次に例を示します。
{
"id": "/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/group1/providers/Microsoft.Sql/servers/server1/jobAgents/agent1",
"name": "agent1",
"type": "Microsoft.Sql/servers/jobAgents",
"location": "southeastasia",
"sku": {
"name": "JA100 ",
"capacity": 100
},
"properties": {
"databaseId": "/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/group1/providers/Microsoft.Sql/servers/server1/databases/db1"
}
}