AWS SCT 拡張パックを使用して PostgreSQL で SQL Server エージェントをエミュレートする - AWS Schema Conversion Tool

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS SCT 拡張パックを使用して PostgreSQL で SQL Server エージェントをエミュレートする

SQL Server エージェントは、SQL Server ジョブを実行する Microsoft Windows サービスです。SQL Server エージェントは、スケジュールに従って、特定のイベントに応答して、またはオンデマンドでジョブを実行します。SQL Server エージェントの詳細については、『Microsoft 技術ドキュメント』を参照してください。

PostgreSQL エージェントに相当するものはありません。SQL Server エージェントの機能をエミュレートするために、AWS SCT は拡張パックを作成します。この拡張パックは AWS Lambda と Amazon CloudWatch を使用しています。AWS Lambda は、スケジュールの管理やジョブの実行に使用するインターフェースを実装します。Amazon CloudWatch はスケジュールルールを管理します。

AWS Lambda と Amazon CloudWatch は JSON パラメータを使用してやり取りします。この JSON パラメータは次の構造があります。

{ "mode": mode, "parameters": { list of parameters }, "callback": procedure name }

前の例では、mode はタスクのタイプであり、list of parameters タスクのタイプによって決まるパラメータのセットです。また、procedure name は、タスクが完了した後に実行されるプロシージャの名前でもあります。

AWS SCT は 1 つの Lambda 関数を使用してジョブの制御と実行を行います。CloudWatch ルールはジョブの実行を開始し、ジョブを開始するために必要な情報を提供します。CloudWatch ルールがトリガーされると、ルールのパラメータを使用して Lambda 関数が開始されます。

プロシージャを呼び出す簡単なジョブを作成するには、次の形式を使用します。

{ "mode": "run_job", "parameters": { "vendor": "mysql", "cmd": "lambda_db.nightly_job" } }

複数のステップを含むジョブを作成するには、次の形式を使用します。

{ "mode": "run_job", "parameters": { "job_name": "Job1", "enabled": "true", "start_step_id": 1, "notify_level_email": [0|1|2|3], "notify_email": email, "delete_level": [0|1|2|3], "job_callback": "ProcCallBackJob(job_name, code, message)", "step_callback": "ProcCallBackStep(job_name, step_id, code, message)" }, "steps": [ { "id":1, "cmd": "ProcStep1", "cmdexec_success_code": 0, "on_success_action": [|2|3|4], "on_success_step_id": 1, "on_fail_action": 0, "on_fail_step_id": 0, "retry_attempts": number, "retry_interval": number }, { "id":2, "cmd": "ProcStep2", "cmdexec_success_code": 0, "on_success_action": [1|2|3|4], "on_success_step_id": 0, "on_fail_action": 0, "on_fail_step_id": 0, "retry_attempts": number, "retry_interval": number }, ... ] }

PostgreSQL での SQL Server エージェントの動作をエミュレートするために、AWS SCT 拡張パックでは以下のテーブルとプロシージャも作成します。

PostgreSQL で SQL サーバーエージェントをエミュレートするテーブル

SQL Server エージェントをエミュレートするために、拡張パックは次のテーブルを使用します。

sysjobs

ジョブに関する情報を格納します。

sysjobsteps

ジョブのステップに関する情報を格納します。

sysschedules

ジョブスケジュールに関する情報を格納します。

sysjobschedules

個々のジョブのスケジュール情報を格納します。

sysjobhistory

スケジュールされたジョブの実行に関する情報を格納します。

PostgreSQL で SQL サーバーエージェントをエミュレートするプロシージャ

SQL Server エージェントをエミュレートするために、拡張パックでは以下の手順を使用します。

sp_add_job

新しいジョブを追加します。

sp_add_jobstep

ジョブにステップを追加します。

sp_add_schedule

Amazon CloudWatch に新しいスケジュールルールを作成します。このスケジュールは任意の数のジョブで使用できます。

sp_attach_schedule

選択したジョブのスケジュールを設定します。

sp_add_jobschedule

Amazon CloudWatch でジョブのスケジュールルールを作成し、このルールのターゲットを設定します。

sp_update_job

以前に作成したジョブの属性を更新します。

sp_update_jobstep

ジョブ内のステップの属性を更新します。

sp_update_schedule

Amazon CloudWatch のスケジュールルールの属性を更新します。

sp_update_jobschedule

指定ジョブのスケジュールの属性を更新します。

sp_delete_job

ジョブを削除します。

sp_delete_jobstep

ジョブからジョブステップを削除します。

sp_delete_schedule

スケジュールを削除します。

sp_delete_jobschedule

指定されたジョブのスケジュールルールを Amazon CloudWatch から削除します。

sp_detach_schedule

スケジュールとジョブの関連付けを削除します。

get_jobs、update_job

AWS Elastic Beanstalk と相互作用する内部プロシージャ。

sp_verify_job_date、sp_verify_job_time、sp_verify_job、sp_verify_jobstep、sp_verify_schedule、sp_verify_job_identifier、sp_verify_schedule_identifiers

設定を確認する内部プロシージャ。

PostgreSQL で SQL サーバーエージェントをエミュレートするプロシージャの構文

拡張パック内の aws_sqlserver_ext.sp_add_job プロシージャは、msdb.dbo.sp_add_job プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_job_name varchar, par_enabled smallint = 1, par_description varchar = NULL::character varying, par_start_step_id integer = 1, par_category_name varchar = NULL::character varying, par_category_id integer = NULL::integer, par_owner_login_name varchar = NULL::character varying, par_notify_level_eventlog integer = 2, par_notify_level_email integer = 0, par_notify_level_netsend integer = 0, par_notify_level_page integer = 0, par_notify_email_operator_name varchar = NULL::character varying, par_notify_netsend_operator_name varchar = NULL::character varying, par_notify_page_operator_name varchar = NULL::character varying, par_delete_level integer = 0, inout par_job_id integer = NULL::integer, par_originating_server varchar = NULL::character varying, out returncode integer

拡張パック内の aws_sqlserver_ext.sp_add_jobstep プロシージャは、msdb.dbo.sp_add_jobstep プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_step_id integer = NULL::integer, par_step_name varchar = NULL::character varying, par_subsystem varchar = 'TSQL'::bpchar, par_command text = NULL::text, par_additional_parameters text = NULL::text, par_cmdexec_success_code integer = 0, par_on_success_action smallint = 1, par_on_success_step_id integer = 0, par_on_fail_action smallint = 2, par_on_fail_step_id integer = 0, par_server varchar = NULL::character varying, par_database_name varchar = NULL::character varying, par_database_user_name varchar = NULL::character varying, par_retry_attempts integer = 0, par_retry_interval integer = 0, par_os_run_priority integer = 0, par_output_file_name varchar = NULL::character varying, par_flags integer = 0, par_proxy_id integer = NULL::integer, par_proxy_name varchar = NULL::character varying, inout par_step_uid char = NULL::bpchar, out returncode integer

拡張パック内の aws_sqlserver_ext.sp_add_schedule プロシージャは、msdb.dbo.sp_add_schedule プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_schedule_name varchar, par_enabled smallint = 1, par_freq_type integer = 0, par_freq_interval integer = 0, par_freq_subday_type integer = 0, par_freq_subday_interval integer = 0, par_freq_relative_interval integer = 0, par_freq_recurrence_factor integer = 0, par_active_start_date integer = NULL::integer, par_active_end_date integer = 99991231, par_active_start_time integer = 0, par_active_end_time integer = 235959, par_owner_login_name varchar = NULL::character varying, *inout par_schedule_uid char = NULL::bpchar,* inout par_schedule_id integer = NULL::integer, par_originating_server varchar = NULL::character varying, out returncode integer

拡張パック内の aws_sqlserver_ext.sp_attach_schedule プロシージャは、msdb.dbo.sp_attach_schedule プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_schedule_id integer = NULL::integer, par_schedule_name varchar = NULL::character varying, par_automatic_post smallint = 1, out returncode integer

拡張パック内の aws_sqlserver_ext.sp_add_jobschedule プロシージャは、msdb.dbo.sp_add_jobschedule プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_name varchar = NULL::character varying, par_enabled smallint = 1, par_freq_type integer = 1, par_freq_interval integer = 0, par_freq_subday_type integer = 0, par_freq_subday_interval integer = 0, par_freq_relative_interval integer = 0, par_freq_recurrence_factor integer = 0, par_active_start_date integer = NULL::integer, par_active_end_date integer = 99991231, par_active_start_time integer = 0, par_active_end_time integer = 235959, inout par_schedule_id integer = NULL::integer, par_automatic_post smallint = 1, inout par_schedule_uid char = NULL::bpchar, out returncode integer

拡張パック内の aws_sqlserver_ext.sp_delete_job プロシージャは、msdb.dbo.sp_delete_job プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_originating_server varchar = NULL::character varying, par_delete_history smallint = 1, par_delete_unused_schedule smallint = 1, out returncode integer

拡張パック内の aws_sqlserver_ext.sp_delete_jobstep プロシージャは、msdb.dbo.sp_delete_jobstep プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_step_id integer = NULL::integer, out returncode integer

拡張パック内の aws_sqlserver_ext.sp_delete_jobschedule プロシージャは、msdb.dbo.sp_delete_jobschedule プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_name varchar = NULL::character varying, par_keep_schedule integer = 0, par_automatic_post smallint = 1, out returncode integer

拡張パック内の aws_sqlserver_ext.sp_delete_schedule プロシージャは、msdb.dbo.sp_delete_schedule プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_schedule_id integer = NULL::integer, par_schedule_name varchar = NULL::character varying, par_force_delete smallint = 0, par_automatic_post smallint = 1, out returncode integer

拡張パック内の aws_sqlserver_ext.sp_detach_schedule プロシージャは、msdb.dbo.sp_detach_schedule プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_schedule_id integer = NULL::integer, par_schedule_name varchar = NULL::character varying, par_delete_unused_schedule smallint = 0, par_automatic_post smallint = 1, out returncode integer

拡張パック内の aws_sqlserver_ext.sp_update_job プロシージャは、msdb.dbo.sp_update_job プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_job_id integer = NULL::integer par_job_name varchar = NULL::character varying par_new_name varchar = NULL::character varying par_enabled smallint = NULL::smallint par_description varchar = NULL::character varying par_start_step_id integer = NULL::integer par_category_name varchar = NULL::character varying par_owner_login_name varchar = NULL::character varying par_notify_level_eventlog integer = NULL::integer par_notify_level_email integer = NULL::integer par_notify_level_netsend integer = NULL::integer par_notify_level_page integer = NULL::integer par_notify_email_operator_name varchar = NULL::character varying par_notify_netsend_operator_name varchar = NULL::character varying par_notify_page_operator_name varchar = NULL::character varying par_delete_level integer = NULL::integer par_automatic_post smallint = 1 out returncode integer

拡張パック内の aws_sqlserver_ext.sp_update_jobschedule プロシージャは、msdb.dbo.sp_update_jobschedule プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_job_id integer = NULL::integer par_job_name varchar = NULL::character varying par_name varchar = NULL::character varying par_new_name varchar = NULL::character varying par_enabled smallint = NULL::smallint par_freq_type integer = NULL::integer par_freq_interval integer = NULL::integer par_freq_subday_type integer = NULL::integer par_freq_subday_interval integer = NULL::integer par_freq_relative_interval integer = NULL::integer par_freq_recurrence_factor integer = NULL::integer par_active_start_date integer = NULL::integer par_active_end_date integer = NULL::integer par_active_start_time integer = NULL::integer par_active_end_time integer = NULL::integer par_automatic_post smallint = 1 out returncode integer

拡張パック内の aws_sqlserver_ext.sp_update_jobstep プロシージャは、msdb.dbo.sp_update_jobstep プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_job_id integer = NULL::integer par_job_name varchar = NULL::character varying par_step_id integer = NULL::integer par_step_name varchar = NULL::character varying par_subsystem varchar = NULL::character varying par_command text = NULL::text par_additional_parameters text = NULL::text par_cmdexec_success_code integer = NULL::integer par_on_success_action smallint = NULL::smallint par_on_success_step_id integer = NULL::integer par_on_fail_action smallint = NULL::smallint par_on_fail_step_id integer = NULL::integer par_server varchar = NULL::character varying par_database_name varchar = NULL::character varying par_database_user_name varchar = NULL::character varying par_retry_attempts integer = NULL::integer par_retry_interval integer = NULL::integer par_os_run_priority integer = NULL::integer par_output_file_name varchar = NULL::character varying par_flags integer = NULL::integer par_proxy_id integer = NULL::integer par_proxy_name varchar = NULL::character varying out returncode integer

拡張パック内の aws_sqlserver_ext.sp_update_schedule プロシージャは、msdb.dbo.sp_update_schedule プロシージャをエミュレートします。SQL Server エージェントプロシージャの詳細については、『Microsoft 技術ドキュメント』を参照してください。

par_schedule_id integer = NULL::integer par_name varchar = NULL::character varying par_new_name varchar = NULL::character varying par_enabled smallint = NULL::smallint par_freq_type integer = NULL::integer par_freq_interval integer = NULL::integer par_freq_subday_type integer = NULL::integer par_freq_subday_interval integer = NULL::integer par_freq_relative_interval integer = NULL::integer par_freq_recurrence_factor integer = NULL::integer par_active_start_date integer = NULL::integer par_active_end_date integer = NULL::integer par_active_start_time integer = NULL::integer par_active_end_time integer = NULL::integer par_owner_login_name varchar = NULL::character varying par_automatic_post smallint = 1 out returncode integer

PostgreSQL で SQL Server エージェントをエミュレートするプロシージャを使用する場合の例

新しいジョブを追加するには、次に示す aws_sqlserver_ext.sp_add_job プロシージャに従います。

SELECT * FROM aws_sqlserver_ext.sp_add_job ( par_job_name := 'test_job', par_enabled := 1::smallint, par_start_step_id := 1::integer, par_category_name := '[Uncategorized (Local)]', par_owner_login_name := 'sa');

新しいジョブステップを追加するには、次に示す aws_sqlserver_ext.sp_add_jobstep プロシージャに従います。

SELECT * FROM aws_sqlserver_ext.sp_add_jobstep ( par_job_name := 'test_job', par_step_id := 1::smallint, par_step_name := 'test_job_step1', par_subsystem := 'TSQL', par_command := 'EXECUTE [dbo].[PROC_TEST_JOB_STEP1];', par_server := NULL, par_database_name := 'GOLD_TEST_SS');

簡単なスケジュールを追加するには、次に示す aws_sqlserver_ext.sp_add_schedule プロシージャに従います。

SELECT * FROM aws_sqlserver_ext.sp_add_schedule( par_schedule_name := 'RunOnce', par_freq_type := 1, par_active_start_time := 233000);

ジョブのスケジュールを設定するには、次に示す aws_sqlserver_ext.sp_attach_schedule プロシージャに従います。

SELECT * FROM aws_sqlserver_ext.sp_attach_schedule ( par_job_name := 'test_job', par_schedule_name := 'NightlyJobs');

ジョブのスケジュールを作成するには、次に示す aws_sqlserver_ext.sp_add_jobschedule プロシージャに従います。

SELECT * FROM aws_sqlserver_ext.sp_add_jobschedule ( par_job_name := 'test_job2', par_name := 'test_schedule2', par_enabled := 1::smallint, par_freq_type := 4, par_freq_interval := 1, par_freq_subday_type := 4, par_freq_subday_interval := 1, par_freq_relative_interval := 0, par_freq_recurrence_factor := 0, par_active_start_date := 20100801, par_active_end_date := 99991231, par_active_start_time := 0, par_active_end_time := 0);

PostgreSQL で SQL サーバーエージェントをエミュレートするためのユースケースの例

ソースデータベースコードで SQL Server エージェントを使用してジョブを実行している場合、AWS SCT はSQL Server から PostgreSQL への拡張パックを使用して、このコードを PostgreSQL に変換できます。拡張パックは AWS Lambda 関数を使用して SQL Server エージェントの動作をエミュレートします。

新しい AWS Lambda 関数を作成するか、既存の関数を登録できます。

新しい AWS Lambda 関数を作成するには
  1. AWS SCT のターゲットデータベースのツリーで、コンテキスト (右クリック) メニューを開き、[次に拡張パックの適用] () を選択して、[PostgreSQL] を選択します。

    拡張パックウィザードが表示されます。

  2. [SQL Server エージェントエミュレーションサービス] タブで、次の操作を行います。

    • [AWS Lambda 関数の作成] を選択します。

    • [データベースログイン] には、ターゲットデータベースユーザーの名前を入力します。

    • [データベースパスワード] には、前のステップで入力したユーザー名のパスワードを入力します。

    • [Python ライブラリフォルダ] には、Python ライブラリフォルダへのパスを入力します。

    • [AWS Lambda 関数の作成] を選択し、[次へ] を選択します。

以前にデプロイした AWS Lambda 関数を登録するには
  • ターゲットデータベースで次のスクリプトを実行します。

    SELECT FROM aws_sqlserver_ext.set_service_setting( p_service := 'JOB', p_setting := 'LAMBDA_ARN', p_value := ARN)

    前述の例では、ARN はデプロイされた AWS Lambda 関数の Amazon リソースネーム (ARN) です。

次の例では、1 つのステップで構成されるシンプルなタスクを作成します。このタスクでは、5 分ごとに以前に作成された job_example 関数が実行されます。この job_example_table 関数はレコードをテーブルに挿入します。

この簡単なタスクを作成するには
  1. 以下の aws_sqlserver_ext.sp_add_job 関数を使用してジョブを作成します。

    SELECT FROM aws_sqlserver_ext.sp_add_job ( par_job_name := 'test_simple_job');
  2. 次に示す aws_sqlserver_ext.sp_add_jobstep 関数を使用してジョブステップを作成します。

    SELECT FROM aws_sqlserver_ext.sp_add_jobstep ( par_job_name := 'test_simple_job', par_step_name := 'test_simple_job_step1', par_command := 'PERFORM job_simple_example;');

    ジョブステップは関数の実行内容を指定します。

  3. 次に示すように、aws_sqlserver_ext.sp_add_jobschedule 関数を使用してジョブのスケジューラーを作成します。

    SELECT FROM aws_sqlserver_ext.sp_add_jobschedule ( par_job_name := 'test_simple_job', par_name := 'test_schedule', par_freq_type := 4, /* Daily */ par_freq_interval := 1, /* frequency_interval is unused */ par_freq_subday_type := 4, /* Minutes */ par_freq_subday_interval := 5 /* 5 minutes */);

    ジョブステップは関数の実行内容を指定します。

このジョブを削除するには、以下の aws_sqlserver_ext.sp_delete_job 関数を使用します。

PERFORM aws_sqlserver_ext.sp_delete_job( par_job_name := 'PeriodicJob1'::character varying, par_delete_history := 1::smallint, par_delete_unused_schedule := 1::smallint);