Azure DB連携

Azure エラスティックジョブを作成してみた

Azure エラスティックジョブを利用すると、多数のデータベースを対象にまとまったSQL文(Transact-SQL,T-SQL)を並列実行することができる。

Azure エラスティックジョブについては、以下のサイトを参照のこと。
https://learn.microsoft.com/ja-jp/azure/azure-sql/database/elastic-jobs-overview?view=azuresql

今回は、Azure Portal上でAzure エラスティックジョブを作成してみたので、その手順を共有する。

前提条件

SQLデータベース(azureSqlDatabase)上に、USER_DATAテーブルを作成済であること。
前提条件_1

前提条件_2

やってみたこと

  1. エラスティックジョブエージェントの作成
  2. ジョブユーザーの作成
  3. データベーススコープ認証情報の作成
  4. ターゲットグループの作成
  5. ジョブの作成
  6. ジョブステップの作成
  7. ジョブステップの手動実行確認
  8. ジョブステップの自動実行確認

エラスティックジョブエージェントの作成

ジョブを作成・実行・管理するためのAzureリソースであるエラスティックジョブエージェントは、Azure Portal上で作成できる。その手順は、以下の通り。

1) Azure Portalにログインし、「エラスティックジョブエージェント」を選択する。
エラスティックジョブエージェントの作成_1

2) 左上の「作成」ボタンを押下する。
エラスティックジョブエージェントの作成_2

3) エージェント名・サーバーを指定後、ジョブのデータベースで「新規作成」リンクを押下する。
エラスティックジョブエージェントの作成_3

4) ジョブデータベース名を指定し、「適用」ボタンを押下する。
エラスティックジョブエージェントの作成_4

5) 基本情報の指定内容を確認後、「確認と作成」ボタンを押下する。
エラスティックジョブエージェントの作成_5

6) 設定内容を確認後、「作成」ボタンを押下する。
エラスティックジョブエージェントの作成_6

7) デプロイが完了すると以下の画面が表示されるため、「リソースに移動」ボタンを押下する。
エラスティックジョブエージェントの作成_7

8) 以下のように、エラスティックジョブエージェントの作成が確認できる。
エラスティックジョブエージェントの作成_8

エンジニアファーストバナー

ジョブユーザーの作成

ジョブ ステップの実行対象となるターゲットサーバー(azureSqlDatabase)上で、ジョブユーザ-(job_user)を作成する。その手順は、以下の通り。

1) SQL Server認証で、ターゲットサーバー(azureSqlDatabase)にログインする。
ジョブユーザーの作成_1

2) ログイン時のパスワードを指定しながらジョブユーザ-(job_user)を作成する。

CREATE USER [job_user] WITH PASSWORD='(ログインパスワード)'
ジョブユーザーの作成_2

3) ジョブユーザ-(job_user)に、必要な権限を付与する。今回は、データの読み書き権限を付与している。

ALTER ROLE [db_datareader] ADD MEMBER [job_user];
ALTER ROLE [db_datawriter] ADD MEMBER [job_user];
GO
ジョブユーザーの作成_3

4) ジョブユーザ-(job_user)に付与された権限は、以下で確認できる。

SELECT dp.name AS UserName, dr.name AS DatabaseRoleName
FROM sys.database_role_members drm
JOIN sys.database_principals dp ON drm.member_principal_id = dp.principal_id
JOIN sys.database_principals dr ON drm.role_principal_id = dr.principal_id
WHERE dp.name = 'job_user'
ジョブユーザーの作成_4

データベーススコープ認証情報の作成

ジョブのデータベース(azure-job-db-purinit)上で、エラスティックジョブのジョブステップから参照する資格情報である、データベースのスコープ認証情報(job_cred)を作成する。その手順は、以下の通り。

1) SQL Server認証で、ジョブのデータベース(azure-job-db-purinit)にログインする。
make_db_scope_credential_1

2) データベースのスコープ認証情報を作成するために必要なマスターキーを作成する。

CREATE MASTER KEY ENCRYPTION BY PASSWORD='(マスターキーのパスワード)'
make_db_scope_credential_2

3) データベースのスコープ認証情報(job_cred)を作成する。クエリに黄色の警告が表示されるが、そのまま実行できる。

CREATE DATABASE SCOPED CREDENTIAL [job_cred]
WITH IDENTITY = 'job_user', SECRET = '(job_userのログインパスワード)'
make_db_scope_credential_3

4) 作成したデータベースのスコープ認証情報は、以下のように確認できる。

SELECT * FROM sys.database_scoped_credentials
make_db_scope_credential_4

5) Azure Portal上でジョブステップを作成できるよう、データベースのスコープ認証情報(job_cred)の参照権限をpublicユーザーに付与する。

GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[job_cred] TO [public]
make_db_scope_credential_5



ターゲットグループの作成

ジョブステップで実行対象となるターゲットサーバー(azureSqlDatabase)の値を指定するためのターゲットグループは、Azure Portalで作成できる。その手順は、以下の通り。

1) 作成したエラスティックジョブの「ターゲットグループ」メニューを選択し、「作成」ボタンを押下する。
ターゲットグループの作成_1

2) ターゲットグループ名を指定し「作成」ボタンを押下する。
ターゲットグループの作成_2

3) ターゲットグループのメンバーの「作成」ボタンを押下する。
ターゲットグループの作成_3

4) サーバー名・データベース名を指定し、「作成」ボタンを押下する。
ターゲットグループの作成_4_1

なお、サーバー名・データベース名は、以下のジョブ ステップの実行対象となるターゲットサーバー(azureSqlDatabase)の値を指定している。
ターゲットグループの作成_4_2

5) 以下のように、ターゲットグループが追加されたことが確認できる。
ターゲットグループの作成_5

エンジニアファーストバナー

ジョブの作成

ジョブはAzure Portalで作成でき、実行タイミングを指定できる。その手順は、以下の通り。

1) ジョブ定義で「作成」ボタンを押下する。
ジョブの作成_1

2) 1日1回ジョブを実行するようにするため、ジョブスケジュールを有効化するに「はい」、スケジュール間隔の種類を「定期的」、スケーリング間隔を「P1D」を指定する。さらに、ジョブ名と、2026/1/18以降毎日15時に実行するようにするため開始時刻に「2026/1/18 15:00」を指定し、「作成」ボタンを押下する。
ジョブの作成_2

3) 以下のように、ジョブが作成されたことが確認できる。
ジョブの作成_3

「CODE×CODE」は、需要の高い技術(AWS, Python等)を習得できるプログラミングスクールスクールだった近年、さまざまな会社でクラウド(特にIaaSやPaaSのパブリッククラウド)の需要が非常に高まっていて、クラウドサービスによるシステム開...

ジョブステップの作成

ジョブステップの作成も、Azure Portalで行える。その手順は、以下の通り。

1) 作成されたジョブ名のリンクを押下する。
ジョブステップの作成_1

2)「追加 ジョブステップ」ボタンを押下する。
ジョブステップの作成_2

3) ステップ名(任意)、資格情報にデータベースのスコープ認証情報(job_cred)、ターゲットグループに作成したazure-tgroup-purinitを指定し、SQLスクリプトに実行したいSQL文を指定後、「確認と作成」ボタンを押下する。
ジョブステップの作成_3

なお、指定したSQLスクリプトは、以下の通り。

DECLARE @RowCount INT = 1;  -- 現在の処理件数
DECLARE @BatchSize INT = 2; -- 一括処理件数(最大値:1000)
DECLARE @RoopCount INT = 1; -- ループカウント数

-- 更新前に、user_data.memoをNULLにリセットする
UPDATE dbo.user_data SET memo = NULL;

WHILE (@RowCount > 0)
BEGIN
    -- memoが未設定で、@BatchSizeに設定した件数分のidを取得し、[target_id]に格納
    -- [target_id]に格納したレコードのmemoを一括更新する
    WITH [target_id] AS (
        SELECT TOP (@BatchSize) id 
        FROM dbo.user_data
        WHERE memo IS NULL
    )
    UPDATE u
    SET u.memo = N'ループカウント数:' + CAST(@RoopCount AS NVARCHAR) 
               + N'、実行時刻:' + FORMAT(DATEADD(HOUR, 9, GETUTCDATE())
                   , 'yyyy/MM/dd HH:mm:ss')
    FROM dbo.user_data u
    INNER JOIN [target_id] ti
      ON u.id = ti.id;

    -- 先ほどのupdate文での処理件数を格納
    SET @RowCount = @@ROWCOUNT;
    -- ループカウント数を更新
    SET @RoopCount = @RoopCount + 1;
END

4) 内容を確認し、「作成」ボタンを押下する。
ジョブステップの作成_4

5) 以下のように、ジョブステップの作成が確認できる。
ジョブステップの作成_5

6) 作成したジョブステップにチェックを入れると、以下のように、SQLスクリプトが表示されることが確認できる。
ジョブステップの作成_6



ジョブステップの手動実行確認

ジョブステップの手動実行は、Azure Portal上で行える。その手順は、以下の通り。

1) SQL Server認証で、ターゲットサーバー(azureSqlDatabase)にログインする。
ジョブステップの手動実行確認_1

2) エラスティックジョブで更新対象となるUSER_DATAテーブルを確認した結果は、以下の通り。
ジョブステップの手動実行確認_2

3) 作成したエラスティックジョブの「ジョブの開始」ボタンを押下する。
ジョブステップの手動実行確認_3

4) ダイアログの「ジョブの開始」ボタンを押下する。
ジョブステップの手動実行確認_4

5) ジョブの実行が終わると、以下のように、ジョブ実行が正常終了したことが確認できる。ここで「最後のジョブの実行を表示する」リンクを押下する。
ジョブステップの手動実行確認_5

6) 以下のように、ジョブの実行開始・終了時間が確認できる。
ジョブステップの手動実行確認_6

7) エラスティックジョブ実行後に、更新対象となるUSER_DATAテーブルを確認した結果は以下の通りで、MEMO列が想定通りに更新されていることが確認できる。
ジョブステップの手動実行確認_7

「EaseUS Todo Backup」は様々な形でバックアップ取得が行える便利ツールだったパソコン内のデータを、ファイル/パーティション/ディスク等の様々な単位でバックアップしたり、バックアップのスケジュール設定や暗号化設定も...

ジョブステップの自動実行確認

ジョブステップの自動実行後確認は、Azure Portal上で行える。その手順は、以下の通り。

1) 作成したエラスティックジョブを表示し、「最後のジョブの実行を表示する」リンクを押下する。
ジョブステップの自動実行確認_1

2) 以下のように、ジョブの実行開始・終了時間が確認でき、日本時間の15:00頃に完了していることが確認できる。
ジョブステップの自動実行確認_2

3) エラスティックジョブ自動実行後に更新対象となるUSER_DATAテーブルを確認した結果は以下の通りで、MEMO列が想定通りに更新されていることが確認できる。
ジョブステップの自動実行確認_3

要点まとめ

  • Azure エラスティックジョブを利用すると、多数のデータベースを対象にまとまったSQL文(Transact-SQL,T-SQL)を並列実行することができる。
  • エラスティックジョブのジョブステップを作成するには、あらかじめデータベーススコープ認証情報・ターゲットグループを作成しておく必要がある。