ページの先頭行へ戻る
Systemwalker Operation Manager V17.1.0 リファレンス集

20.9.1 接続情報ファイル

ファイル名

nnnnn.json

※nnnnは任意の文字

使用用途

REST実行ジョブがクラウドサービスに接続するために必要なパラメタを記載する接続情報ファイルです。REST実行ジョブを利用する場合には必須です。REST実行ジョブ登録時には、本ファイルをフルパスで指定します。

格納場所

任意

ファイル形式

本ファイルはJSON形式、文字コードはUTF-8で記載します。string型の値にダブルクォーテーションやバックスラッシュ、および、制御文字などを含める場合、JSONのフォーマットに従いエスケープした文字列を指定してください。

パラメタ

requestオブジェクトのパラメタ

requestオブジェクトの指定は必須です。

パラメタ

キー名・型・デフォルト値

説明

接続URL (*)

キー名

url

接続先のURLを以下の形式で指定します。

  • httpsを使用する場合

    https://ホスト[:ポート番号]/リソースパス

  • httpを使用する場合

    http://ホスト[:ポート番号]/リソースパス

URLは2083バイト以内で指定します。URL内で利用可能な文字については接続先のクラウドサービスの規約に従ってください。

string

デフォルト値

なし

HTTPメソッド (*)

キー名

method

HTTPメソッドを設定します。

GET/PUT/POST/DELETEのいずれかを指定します。

string

デフォルト値

なし

認証情報名

キー名

authName

jobschsetauthinfoコマンドで設定したリクエストの認証情報名を指定します。コマンドの詳細については、“4.9 jobschsetauthinfoコマンド【Windows版】【Linux版】”を参照してください。

省略した場合、認証処理を行いません。

string

デフォルト値

なし

プロキシサーバの認証情報名

キー名

proxyAuthName

jobschsetauthinfoコマンドで設定したプロキシサーバの認証情報名を指定します。コマンドの詳細については、“4.9 jobschsetauthinfoコマンド【Windows版】【Linux版】”を参照してください。

省略した場合、プロキシサーバを利用しません。

string

デフォルト値

なし

クエリパラメタ

キー名

query

接続先URLにクエリパラメタを指定する場合、“パラメタ名:値”の形式で指定します。以下のようにパラメタ名と値はqueryオブジェクト内で複数指定可能です。

query: {
  パラメタ名1:値1,
  パラメタ名2:値2,
  …
}

クエリパラメタの値にjobschsetauthinfoコマンドで設定した任意のキーの値を設定したい場合は、以下のように値を“@任意のキー名@”の形式で指定することで、設定した値に置きかわります。

query: {
  パラメタ名:@任意のキー名@
}

パラメタ名および値は1024バイト以内で指定してください。

省略した場合、URLにクエリパラメタを追加しません。

object

デフォルト値

なし

HTTPリクエストヘッダ

キー名

header

追加のHTTPリクエストヘッダを指定する場合、“ヘッダ名:値”の形式で指定します。以下のようにヘッダ名と値はheaderオブジェクト内で複数指定可能です。

header: {
  ヘッダ名1:値1,
  ヘッダ名2:値2,
  …
}

リクエストヘッダの値にjobschsetauthinfoコマンドで設定した任意のキーの値を設定したい場合は、以下のように値を“@任意のキー名@”の形式で指定することで、設定した値に置きかかわります。

header: {
  ヘッダ名:@任意のキー名@
}

ヘッダ名および値は1024バイト以内で指定してください。

省略した場合、リクエストヘッダを追加しません。

object

デフォルト値

なし

HTTPリクエストメッセージボディ

キー名

body

HTTPリクエストメッセージボディとして指定するファイルをフルパスで指定します。

ファイルパスの長さは256バイト以内で指定してください。ファイルパスには、半角英数字、“/”、“: ”、“\”、“. ”、“_”(半角アンダーバー)、“-”(半角ハイフン)のみ指定可能です。

jobschsetauthinfoコマンドで設定した任意のキーの値をリクエストメッセージボディに設定する場合、“@任意のキー名@”の形式で指定することで、リクエスト時に設定した値に置き換わります。

省略した場合、リクエストメッセージボディは設定されません。

string

デフォルト値

なし

HTTPレスポンスヘッダ

キー名

resHeader

HTTPレスポンスのヘッダ情報を保存するファイルをフルパスで指定します。

ファイルパスの長さは256バイト以内で指定してください。ファイルパスには、半角英数字、“/”、“: ”、“\”、“. ”、“_”(半角アンダーバー)、“-”(半角ハイフン)のみ指定可能です。

指定ファイルが存在していた場合は上書きします。

本パラメタの指定を変更せず一意のファイル名で出力したい場合は、ファイル名に<date>の文字列を含めることで、出力時に<date>がYYYYMMDDhhmmssの日時情報に置換されて出力されます。この場合、置換後のファイルパス長が256バイトを超えないようにしてください。超えた場合、結果は出力されません。

省略した場合、ヘッダ情報のファイル出力は行いません。

string

デフォルト値

なし

HTTPレスポンスボディ

キー名

resBody

HTTPレスポンスのボディ情報を保存するファイルをフルパスで指定します。

ファイルパスの長さは256バイト以内で指定してください。ファイルパスには、半角英数字、“/”、“: ”、“\”、“. ”、“_”(半角アンダーバー)、“-”(半角ハイフン)のみ指定可能です。

指定ファイルが存在していた場合は上書きします。

本パラメタの指定を変更せず一意のファイル名で出力したい場合は、ファイル名に<date>の文字列を含めることで、出力時に<date>がYYYYMMDDhhmmssの日時情報に置換されて出力されます。この場合、置換後のファイルパス長が256バイトを超えないようにしてください。超えた場合、結果は出力されません。

省略した場合、ボディ情報のファイル出力は行いません。

string

デフォルト値

なし

接続タイムアウト時間

キー名

timeout

HTTPリクエストの接続タイムアウト時間を1~1800(秒)で指定します。

省略した場合デフォルトの10(秒)が設定されます。

number

デフォルト値

10

監視、強制終了リクエストに引継ぐキー

キー名

takeoverKeys

monitoringオブジェクトで指定する監視リクエストや、terminationオブジェクトで指定する強制終了リクエストのURLやリクエストメッセージボディに本HTTPリクエストの結果を引継ぎたい場合、引き継ぐレスポンス結果のキーを指定することでそのキーの値を引き継ぐことができます。

監視リクエストの場合、監視の終了判定キーおよび正常終了判定キーにも引き継ぐことができます。

引継ぎ先のURLやリクエストメッセージボディには本パラメタで指定した置き換え変数名を“<置き換え変数名>”の形式で記載しておくことで、抽出したキーの値に変換されます。

本パラメタは“置き換え変数名:抽出するキー”の形式で指定します。以下のように置き換え変数名と抽出するキーはtakeoverKeysオブジェクト内で複数指定可能です。

takeoverKeys: {
  置き換え変数名1:抽出するキー1(※),
  置き換え変数名2:抽出するキー2,
  …
}

置き換え変数名は64バイト以内の半角英数字で指定してください。

(※)抽出するキーの指定方法の詳細は、“抽出するキーの指定方法”を参照してください。

object

デフォルト値

なし

ジョブネット変数に設定するキー

キー名

jobnetValKeys

本HTTPレスポンスの結果をジョブネット変数に設定して後続ジョブと連携したい場合、本パラメタでレスポンスのキーを指定することでそのキーの値をジョブネット変数に設定することができます。

本パラメタで指定したキーは“ジョブネット変数名=キーの値”の形式で標準出力に出力されます。

リスト形式で複数のキーを指定することが可能です。

本パラメタは“ジョブネット変数名:抽出するキー”の形式で指定します。以下のようにジョブネット変数名と抽出するキーはjobnetValKeysオブジェクト内で複数指定可能です。

jobnetValKeys: {
  ジョブネット変数名1:抽出するキー1(※),
  ジョブネット変数名2:抽出するキー2,
  …
}

(※)抽出するキーの指定方法の詳細は、“抽出するキーの指定方法”を参照してください。

ジョブの設定でジョブネット変数を利用する設定になっていない場合、本パラメタを指定していても、ジョブネット変数には設定されません。ジョブネット変数を利用する手順およびジョブネット変数で定義可能な文字列、制限値については“Systemwalker Operation Manager 運用ガイド”の“ジョブネット変数をジョブ間で利用する”を参照してください。

ジョブネット変数名はREST実行ジョブの出力結果で出力される他のキー名と重複しないようにしてください。重複した場合、パラメタエラーとなります。

object

デフォルト値

なし

TCP Keep-Aliveの有効化

キー名

tcpKeepAlive

REST実行ジョブで実行されるすべてのHTTP通信でTCP Keep-Aliveを有効にします。

tcpKeepAliveオブジェクト内には以下のキー名のみ指定可能です。

  • idelTime

  • probeInterval

  • probeCount

TCP Keep-Aliveの各パラメタの詳細は、“request.tcpKeepAliveオブジェクトのパラメタ”を参照してください。

本パラメタを省略した場合、TCP Keep-Aliveは無効になります。

object

デフォルト値

なし

(*):必須のパラメタ


request.tcpKeepAliveオブジェクトのパラメタ

TCP Keep-Aliveを有効化することで、REST実行ジョブがHTTPリクエストを送信してから連携先のクラウドサービスからHTTPレスポンスを受信するまでの間、REST実行ジョブからクラウドサービスに対して、定期的にTCP Keep-Aliveパケットを送信させることができます。AWS Network FirewallやAzure Firewallなどのサービスを利用してTCP/IP通信のアイドル時間のタイムアウトを設けている場合、タイムアウト時間内にTCP Keep-Aliveパケットを送信することで、TCP/IP通信を継続させることが可能です。上記のタイムアウト時間を超える時間のジョブを実行する場合、この設定が無効であるとタイムアウトによる通信遮断でジョブが異常終了するため、この設定を有効化することを推奨します。

requestオブジェクトでtcpKeepAliveを指定した場合、tcpKeepAliveオブジェクト内で下記TCP Keep-Aliveのパラメタが指定可能となります。

パラメタ

キー名・型・デフォルト値

説明

TCP Keep-Aliveパケットを送信するまでの時間

キー名

idleTime

クラウドサービスに対してTCP/IP通信のパケットを送信してから、TCP Keep-Aliveパケットを送信するまでの時間を、30~7200(秒)で設定します。

この設定により、AWS Network FirewallやAzure Firewallなどのサービスによるアイドル時間のタイムアウト時間を、idleTimeの時間分延長させることができ、タイムアウトによる通信遮断を回避することが可能です。

省略した場合、デフォルトの60(秒)が設定されます。

number

デフォルト値

60

TCP Keep-Aliveパケットを再送するまでの時間

キー名

probeInterval

REST実行ジョブが送信したTCP Keep-Aliveパケットに対して、連携先のクラウドサービスから応答がなかった場合に、再度リトライ通信としてTCP Keep-Aliveパケットを再送するまでの時間を、10~75(秒)で設定します。

省略した場合、デフォルトの10(秒)が設定されます。

number

デフォルト値

10

TCP Keep-Aliveパケットの最大送信回数

キー名

probeCount

リトライ通信として送信するTCP Keep-Aliveパケットの最大送信回数を、1~9(回)で設定します。

TCP Keep-Aliveパケットの最大送信回数を超えて応答がなかった場合、ジョブは異常終了します。

省略した場合、デフォルトの9(回)が設定されます。

number

デフォルト値

9

monitoringオブジェクトのパラメタ

requestオブジェクトで指定した接続URLのAPIの処理の完了を待ち合わせる場合に、monitoringオブジェクトで実行APIの処理結果取得用APIのパラメタを指定します。

本オブジェクトで指定した接続先URLに指定のポーリング間隔、ポーリング回数でHTTPリクエストを送信します。

指定した終了判定キーの値がレスポンス結果の値と一致するか、指定したポーリング回数分のリクエストを送信するとREST実行ジョブは終了します。

monitoringオブジェクトで処理の完了を待ち合わせる場合、正常終了判定キーで指定した値とレスポンス結果の値が一致したときにREST実行ジョブは正常終了となります。それ以外の場合、REST実行ジョブは異常終了となります。

送信されるすべてのリクエストに対してパラメタは共通です。

レスポンス結果は最後のリクエスト分のみ出力されます。

monitoringオブジェクトは省略可能です。省略した場合、APIの完了の待ち合わせは行いません。

パラメタ

キー名・型・デフォルト値

説明

接続URL (*)

キー名

url

接続先のURLを以下の形式で指定します。

  • httpsを使用する場合

    https://ホスト[:ポート番号]/リソースパス

  • httpを使用する場合

    http://ホスト[:ポート番号]/リソースパス

URLは2083バイト以内で指定します。URL内で利用可能な文字については接続先のクラウドサービスの規約に従ってください。

requestオブジェクトで“監視、強制終了リクエストに引継ぐキー”のパラメタで指定したキーの値を本URLに設定する場合、“<置き換え変数名>”の形式で記載することで、リクエスト時に置き換わります。

string

デフォルト値

なし

HTTPメソッド (*)

キー名

method

HTTPメソッドを設定します。

GET/PUT/POST/DELETEのいずれかを指定します。

string

デフォルト値

なし

クエリパラメタ

キー名

query

接続先URLにクエリパラメタを指定する場合、“パラメタ名:値”の形式で指定します。以下のようにパラメタ名と値はqueryオブジェクト内で複数指定可能です。

query: {
  パラメタ名1:値1,
  パラメタ名2:値2,
  …
}

クエリパラメタの値にjobschsetauthinfoコマンドで設定した任意のキーの値を設定したい場合は、以下のように値を“@任意のキー名@”の形式で指定することで、設定した値に置きかわります。

query: {
  パラメタ名:@任意のキー名@
}

パラメタ名および値は1024バイト以内で指定してください。

省略した場合、URLにクエリパラメタを追加しません。

object

デフォルト値

なし

HTTPリクエストヘッダ

キー名

header

追加のHTTPリクエストヘッダを指定する場合、“ヘッダ名:値”の形式で指定します。以下のようにヘッダ名と値はheaderオブジェクト内で複数指定可能です。

header: {
  ヘッダ名1:値1,
  ヘッダ名2:値2,
  …
}

リクエストヘッダの値にjobschsetauthinfoコマンドで設定した任意のキーの値を設定したい場合は、以下のように値を“@任意のキー名@”の形式で指定することで、設定した値に置きかわります。

header: {
  ヘッダ名:@任意のキー名@
}

ヘッダ名および値は1024バイト以内で指定してください。

省略した場合、リクエストヘッダを追加しません。

object

デフォルト値

なし

HTTPリクエストメッセージボディ

キー名

body

HTTPリクエストメッセージボディとして指定するファイルをフルパスで指定します。

ファイルパスの長さは256バイト以内で指定してください。ファイルパスには、半角英数字、“/”、“: ”、“\”、“. ”、“_”(半角アンダーバー)、“-”(半角ハイフン)のみ指定可能です。

requestオブジェクトで“監視、強制終了リクエストに引継ぐキー”のパラメタで指定したキーの値をリクエストメッセージボディに設定する場合、“<置き換え変数名>”の形式で記載することで、リクエスト時に置き換わります。

jobschsetauthinfoコマンドで設定した任意のキーの値をリクエストメッセージボディに設定する場合、“@任意のキー名@”の形式で指定することで、リクエスト時に設定した値に置き換わります。

省略した場合、リクエストメッセージボディは設定されません。

string

デフォルト値

なし

HTTPレスポンスヘッダ

キー名

resHeader

HTTPレスポンスのヘッダ情報を保存するファイルをフルパスで指定します。

ファイルパスの長さは256バイト以内で指定してください。ファイルパスには、半角英数字、“/”、“: ”、“\”、“. ”、“_”(半角アンダーバー)、“-”(半角ハイフン)のみ指定可能です。

指定ファイルが存在していた場合は上書きします。

本パラメタの指定を変更せず一意のファイル名で出力したい場合は、ファイル名に<date>の文字列を含めることで、出力時に<date>がYYYYMMDDhhmmssの日時情報に置換されて出力されます。この場合、置換後のファイルパス長が256バイトを超えないようにしてください。超えた場合、結果は出力されません。

監視の最後のHTTPリクエストに対するHTTPレスポンス結果のみ出力します。

省略した場合、ヘッダ情報のファイル出力は行いません。

string

デフォルト値

なし

HTTPレスポンスボディ

キー名

resBody

HTTPレスポンスのボディ情報を保存するファイルをフルパスで指定します。

ファイルパスの長さは256バイト以内で指定してください。ファイルパスには、半角英数字、“/”、“: ”、“\”、“. ”、“_”(半角アンダーバー)、“-”(半角ハイフン)のみ指定可能です。

指定ファイルが存在していた場合は上書きします。

本パラメタの指定を変更せず一意のファイル名で出力したい場合は、ファイル名に<date>の文字列を含めることで、出力時に<date>がYYYYMMDDhhmmssの日時情報に置換されて出力されます。この場合、置換後のファイルパス長が256バイトを超えないようにしてください。超えた場合、結果は出力されません。

監視の最後のHTTPリクエストに対するHTTPレスポンス結果のみ出力します。

省略した場合、ボディ情報のファイル出力は行いません。

string

デフォルト値

なし

監視のポーリング間隔

キー名

pollingInterval

リクエストのポーリング間隔を1~600(秒)で指定します。

省略した場合、デフォルトの60(秒)が設定されます。

number

デフォルト値

60

監視のポーリング回数

キー名

pollingCount

リクエストのポーリング回数を指定します。

0が指定された場合、無制限に待ち合わせます。

省略した場合、デフォルトの0が設定されます。

number

デフォルト値

0

初回の監視リクエスト実行までの間隔

キー名

firstMonitorInterval

requestオブジェクトで指定したリクエスト実行から初回の監視リクエストを実行するまでの間隔を1~600(秒)で指定します。

省略した場合、デフォルトの10(秒)が設定されます。

number

デフォルト値

10

監視の終了判定キー (*)

キー名

pollingEndKey

実行APIが完了したことを判定するためのレスポンス結果のキーを指定します。

キーの指定方法の詳細は、“抽出するキーの指定方法”を参照してください。

requestオブジェクトの“監視、強制終了リクエストに引継ぐキー”パラメタで指定したキーの値を監視の終了判定キーに設定する場合、“<置き換え変数名>”の形式で記載することで、リクエスト時に置き換わります。

string

デフォルト値

なし

監視の終了判定の値 (*)

キー名

pollingEndVal

実行APIが完了したことを判定するためのレスポンス結果のキーの値を指定します。

終了判定するための値をリスト形式で指定します。

["値1","値2","値3", …]

値は1024バイト以内で指定してください。

array

デフォルト値

なし

正常終了判定キー (*)

キー名

checkResultKey

実行APIが終了した後に、APIが正常終了したかどうかを判定するためのレスポンス結果のキーを指定します。

ジョブの待ち合わせが完了した時に正常終了判定キーで指定した値と合致しなければ、REST実行ジョブは異常終了となります。

キーの指定方法の詳細は、“抽出するキーの指定方法”を参照してください。

requestオブジェクトの“監視、強制終了リクエストに引継ぐキー”パラメタで指定したキーの値を監視の終了判定キーに設定する場合、“<置き換え変数名>”の形式で記載することで、リクエスト時に置き換わります。

string

デフォルト値

なし

正常終了判定の値

キー名

checkResultVal

実行APIが終了した後に、APIが正常終了したかどうかを判定するためのレスポンス結果のキーの値を指定します。

正常終了判定するための値をリスト形式で指定します。

["値1","値2","値3", …]

値は1024バイト以内で指定してください。

array

デフォルト値

なし

ジョブネット変数に設定するキー

キー名

jobnetValKeys

本HTTPレスポンスの結果をジョブネット変数に設定して後続ジョブと連携したい場合に、本パラメタでレスポンスのキーを指定することで、そのキーの値をジョブネット変数に設定できます。

本パラメタで指定したキーは“ジョブネット変数名=キー”の値の形式で標準出力に出力されます。

本パラメタはジョブネット変数名:抽出するキーの形式で指定します。以下のようにジョブネット変数名と抽出するキーはjobnetValKeysオブジェクト内で複数指定可能です。

jobnetValKeys: {
  ジョブネット変数名1:抽出するキー1(※),
  ジョブネット変数名2:抽出するキー2,
  …
}

(※)抽出するキーの指定方法の詳細は、“抽出するキーの指定方法”を参照してください。

ジョブの設定でジョブネット変数を利用する設定になっていない場合、本パラメタを指定していても、ジョブネット変数には設定されません。ジョブネット変数を利用する手順およびジョブネット変数で定義可能な文字列、制限値については“Systemwalker Operation Manager 運用ガイド”の“ジョブネット変数をジョブ間で利用する”を参照してください。

ジョブネット変数名はREST実行ジョブの出力結果で出力される他のキー名と重複しないようにしてください。重複した場合、パラメタエラーとなります。

object

デフォルト値

なし

(*):必須のパラメタ

terminationオブジェクトのパラメタ

REST実行ジョブの強制終了時に、強制終了リクエストをrequestオブジェクトで指定した接続URLのAPIの処理に送りたい場合は、terminationオブジェクトで以下のパラメタを指定します。

terminationオブジェクトは省略可能です。省略した場合、APIの強制終了リクエストは送りません。

パラメタ

キー名・型・デフォルト値

説明

接続URL (*)

キー名

url

接続先のURLを以下の形式で指定します。

  • httpsを使用する場合

    https://ホスト[:ポート番号]/リソースパス

  • httpを使用する場合

    http://ホスト[:ポート番号]/リソースパス

URLは2083バイト以内で指定します。URL内で利用可能な文字については接続先のクラウドサービスの規約に従ってください。

requestオブジェクトで“監視、強制終了リクエストに引継ぐキー”のパラメタで指定したキーの値を本URLに設定する場合、“<置き換え変数名>”の形式で記載することで、リクエスト時に置き換わります。

string

デフォルト値

なし

HTTPメソッド (*)

キー名

method

HTTPメソッドを設定します。

GET/PUT/POST/DELETEのいずれかを指定します。

string

デフォルト値

なし

クエリパラメタ

キー名

query

接続先URLにクエリパラメタを指定する場合、“パラメタ名:値”の形式で指定します。以下のようにパラメタ名と値はqueryオブジェクト内で複数指定可能です。

query: {
  パラメタ名1:値1,
  パラメタ名2:値2,
  …
}

クエリパラメタの値にjobschsetauthinfoコマンドで設定した任意のキーの値を設定したい場合は、以下のように値を“@任意のキー名@”の形式で指定することで、設定した値に置きかわります。

query: {
  パラメタ名:@任意のキー名@
}

パラメタ名および値は1024バイト以内で指定してください。

省略した場合、URLにクエリパラメタを追加しません。

object

デフォルト値

なし

HTTPリクエストヘッダ

キー名

header

追加のHTTPリクエストヘッダを指定する場合、“ヘッダ名:値”の形式で指定します。以下のようにヘッダ名と値はheaderオブジェクト内で複数指定可能です。

header: {
  ヘッダ名1:値1,
  ヘッダ名2:値2,
  …
}

リクエストヘッダの値にjobschsetauthinfoコマンドで設定した任意のキーの値を設定したい場合は、以下のように値を“@任意のキー名@”の形式で指定することで、設定した値に置きかわります。

header: {
  ヘッダ名:@任意のキー名@
}

ヘッダ名および値は1024バイト以内で指定してください。

省略した場合、リクエストヘッダを追加しません。

object

デフォルト値

なし

HTTPリクエストメッセージボディ

キー名

body

HTTPリクエストメッセージボディとして指定するファイルをフルパスで指定します。

ファイルパスの長さは256バイト以内で指定してください。ファイルパスには、半角英数字、“/”、“: ”、“\”、“. ”、“_”(半角アンダーバー)、“-”(半角ハイフン)のみ指定可能です。

requestオブジェクトで“監視、強制終了リクエストに引継ぐキー”のパラメタで指定したキーの値をリクエストメッセージボディに設定する場合、“<置き換え変数名>”の形式で記載することで、リクエスト時に置き換わります。

jobschsetauthinfoコマンドで設定した任意のキーの値をリクエストメッセージボディに設定する場合、“@任意のキー名@”の形式で指定することで、リクエスト時に設定した値に置き換わります。

省略した場合、リクエストメッセージボディは設定されません。

string

デフォルト値

なし

HTTPレスポンスヘッダ

キー名

resHeader

HTTPレスポンスのヘッダ情報を保存するファイルをフルパスで指定します。

ファイルパスの長さは256バイト以内で指定してください。ファイルパスには、半角英数字、“/”、“: ”、“\”、“. ”、“_”(半角アンダーバー)、“-”(半角ハイフン)のみ指定可能です。

指定ファイルが存在していた場合は上書きします。

本パラメタの指定を変更せず一意のファイル名で出力したい場合は、ファイル名に<date>の文字列を含めることで、出力時に<date>がYYYYMMDDhhmmssの日時情報に置換されて出力されます。この場合、置換後のファイルパス長が256バイトを超えないようにしてください。超えた場合、結果は出力されません。

省略した場合、ヘッダ情報のファイル出力は行いません。

string

デフォルト値

なし

HTTPレスポンスボディ

キー名

resBody

HTTPレスポンスのボディ情報を保存するファイルをフルパスで指定します。

ファイルパスの長さは256バイト以内で指定してください。ファイルパスには、半角英数字、“/”、“: ”、“\”、“. ”、“_”(半角アンダーバー)、“-”(半角ハイフン)のみ指定可能です。

指定ファイルが存在していた場合は上書きします。

本パラメタの指定を変更せず一意のファイル名で出力したい場合は、ファイル名に<date>の文字列を含めることで、出力時に<date>がYYYYMMDDhhmmssの日時情報に置換されて出力されます。この場合、置換後のファイルパス長が256バイトを超えないようにしてください。超えた場合、結果は出力されません。

省略した場合、ボディ情報のファイル出力は行いません。

string

デフォルト値

なし

(*):必須のパラメタ

抽出するキーの指定方法

takeoverKeys、jobnetValKeys、pollingEndKey、checkResultKeyで、レスポンス結果から抽出するキーを指定する方法について以下に示します。

なお、抽出するキーは、1024バイト以内で指定してください。

なお、レスポンス結果がXML形式の場合は、JSON形式に読み替えて指定してください。XML形式からJSON形式への読み替えは、以降に記載の「レスポンス結果の例(XML形式の場合)」を参考にしてください。


レスポンス結果の例(JSON形式の場合)

{
    "id": "id001",
    "info": {
        "testKey": "testValue"
     },
    "properties": [
            {
                "name": "aaa",
                "rc": 2
            },
            {
                "name": "bbb",
                "rc": 0
            }
    ]
}

レスポンス結果の例(XML形式の場合)

<?xml version="1.0" encoding="UTF-8" ?>
 <root>
     <id>id002</id>
     <info>
         <testTag>test1</testTag>
     </info>
     <properties>
         <name>ccc</name>
         <rc>2</rc>
     </properties>
     <properties>
         <name>ddd</name>
         <rc>1</rc>
     </properties>
</root>

抽出するキーの指定方法は、XML形式のレスポンス結果を以下のJSON形式に読み替えた上で、レスポンス結果がJSON形式の場合の指定方法と同様に指定してください。

{
  "root": {
      "id": "id002",
      "info": {
          "testTag": "test1"
       },
      "properties": [
              {
                  "name": "ccc",
                  "rc": 2
              },
              {
                  "name": "ddd",
                  "rc": 1
              }
      ]
  }
}

ジョブ定義変数の利用について

下記のパラメタの値には、ジョブ定義変数を利用することができます。パラメタの値(全体または一部)を、“@ジョブ定義変数名@”の形式で指定することで、登録済のジョブ定義変数で置き換えることができます。

なお、値に“@任意のキー名@”の指定が可能なパラメタの場合、「任意のキー名」と「ジョブ定義変数名」が同一であった場合は、任意のキー名が優先され置き換えられます。任意のキー名で置き換えられた値に“@ジョブ定義変数名@”の指定がある場合、その部分は登録済のジョブ定義変数で置き換えられます。

また、ジョブ定義変数の置き換え後の値に“<置き換え変数名>”の指定がある場合は、その部分は抽出したキーの値で置き換えられます。


ジョブ定義変数の詳細については、“Systemwalker Operation Manager 運用ガイド”の“ジョブ定義変数を利用してジョブ登録情報を一括置換する場合”を参照してください。


ジョブ定義変数の指定例

ジョブ定義変数“JOBDEF”で置き換える場合、以下のように指定します。

変数の置き換えができない指定方法について

パラメタの値に変数を利用する場合、指定方法によっては置き換えができません。置き換わる前の文字列がパラメタに残ることで、ジョブのエラーにつながる可能性があり注意が必要です。

変数の置き換えができない指定方法について以下に示します。

注意事項

使用例

連携可能なクラウドサービスと対象となる操作は、以下のとおりです。

サービス名

操作

AWS Batch

Batch処理を実行します。

AWS Lambda

Lambda関数を実行します。

AWS Step Functions

ワークフローを実行します。

Amazon Simple Storage Service (Amazon S3)

ファイルの待ち合わせを行います。

AWS Backup

リソースのバックアップを実行します。

Amazon Relational Database Service (Amazon RDS)

データベースインスタンスの起動/停止を行います。

Amazon Elastic Compute Cloud (Amazon EC2)

仮想マシンの起動/停止を行います。

Amazon Elastic Kubernetes Service (Amazon EKS)

ワーカーノードの起動/停止を行います。

Azure Batch

Batch処理を実行します。

Azure Functions

Functions関数を実行します。

Azure Logic Apps

ワークフローを実行します。

Azure Blob Storage

ファイルの待ち合わせを行います。

Azure Backup

リソースのバックアップを実行します。

Azure SQL Managed Instance

データベースインスタンスの起動/停止を行います。

Azure Virtual Machines

仮想マシンの起動/停止を行います。

Azure Kubernetes Service (AKS)

クラスタの起動/停止を行います。

以降の小項では、各サービスと連携する場合の接続情報ファイルの例を掲載しています。

リソース情報や認証情報、ファイルパスなどは具体的な値を記載しているため(例.“test1.txt”など)、実際のリソース情報や認証情報、ファイルパスなどに合わせて変更してください。

20.9.1.1 AWS Batchサービスと連携する例

AWS Batchサービス(API Version 2016-08-10)のジョブを実行、監視、強制終了する場合の例を示します。

{
  "request": {
    "url": "https://batch.ap-northeast-1.amazonaws.com/v1/submitjob",
    "method": "POST",
    "authName": "Aws_Batch",
    "proxyAuthName": "Proxy1",
    "body": "/paramfiles/aws_batch_main_body.json",
    "resHeader": "/response/aws_batch_main_header_<date>.json",
    "resBody": "/response/aws_batch_main_body_<date>.txt",
    "takeoverKeys": {
      "JOBID": "jobId"
    },
  "timeout": 60
  },
  "monitoring": {
    "url": "https://batch.ap-northeast-1.amazonaws.com/v1/describejobs",
    "method": "POST",
    "body": "/paramfiles/aws_batch_moni_body.json",
    "resHeader": "/response/aws_batch_moni_header_<date>.json",
    "resBody": "/response/aws_batch_moni_body_<date>.txt",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "jobs.[?\"jobId\"==\"<JOBID>\"].status",
    "pollingEndVal": ["SUCCEEDED", "FAILED"],
    "checkResultKey": "jobs.[?\"jobId\"==\"<JOBID>\"].status",
    "checkResultVal": ["SUCCEEDED"]
  },
  "termination": {
    "url": "https://batch.ap-northeast-1.amazonaws.com/v1/terminatejob",
    "method": "POST",
    "body": "/paramfiles/aws_batch_term_body.json",
    "resHeader": "/response/aws_batch_term_header_<date>.json",
    "resBody": "/response/aws_batch_term_body_<date>.txt"
  }
}

上記のrequestオブジェクトで指定するリクエストメッセージボディ(aws_batch_main_body.json)の例

{
  "jobName": "testjob1",
  "jobQueue": "testjob-queue",
  "jobDefinition": "testjob-def1"
}

上記のmonitoringオブジェクトで指定するリクエストメッセージボディ(aws_batch_moni_body.json)の例

{
  "jobs": [ "<JOBID>" ] 
}

上記のterminationオブジェクトで指定するリクエストメッセージボディ(aws_batch_term_body.json)の例

{
  "reason": "Terminating job.",
  "jobId": "<JOBID>"
}

20.9.1.2 AWS Lambdaサービスと連携する例

AWS Lambdaサービス(API Version 2015-03-31)の関数を実行する場合の例を示します。

{
  "request": {
    "url": "https://lambda.ap-northeast-1.amazonaws.com/2015-03-31/functions/testfunc/invocations",
    "method": "POST",
    "authName": "Aws_Lambda",
    "proxyAuthName": "Proxy1",
    "resHeader": "/response/aws_lambda_main_header_<date>.json",
    "resBody": "/response/aws_lambda_main_body_<date>.json",
    "timeout": 60,
    "tcpKeepAlive": {
      "idleTime": 60,
      "probeInterval": 10,
      "probeCount": 9
    }
  }
}

注意

例に従って接続情報を記載してREST実行ジョブを実行した場合、Lambda関数でエラーが発生してもREST実行ジョブは正常終了します。

Lambda関数の結果が正常終了/異常終了であるかの判断を行いたい場合は、Lambda関数と接続情報、ジョブネットに変更を行ってください。以下にそれぞれの設定の例を示します。

  • Lambda関数の復帰値にエラーを判別するための情報を付与します。

    以下は、Lambda関数の復帰値にある“statusCode”でエラーを判別する場合の例です。

    def lambda_handler(event, context):
    (途中省略)
        return {
          'statusCode': 400,
          'body': 'job failed'
        }
  • 接続情報ファイルに、requestオブジェクトのパラメタであるジョブネット変数に設定するキーを定義し、HTTPレスポンスの結果内にある“statusCode”の値をジョブネット変数に設定します。

    ジョブネット変数に設定するキー“jobnetValKeys”を追記した接続情報ファイルの例は、以下のとおりです。

    {
      "request": {
        "url": "https://lambda.ap-northeast-1.amazonaws.com/2015-03-31/functions/testfunc/invocations",
        "method": "POST",
        "authName": "Aws_Lambda",
        "proxyAuthName": "Proxy1",
        "resHeader": "/response/aws_lambda_main_header_<date>.json",
        "resBody": "/response/aws_lambda_main_body_<date>.json",
        "timeout": 60,
        "jobnetValKeys": {
            "StatusCode": "statusCode"
        },
        "tcpKeepAlive": {
          "idleTime": 60,
          "probeInterval": 10,
          "probeCount": 9
        }
      }
    }
  • REST実行ジョブの後続にジョブネット変数判定ジョブを配置し、ジョブネット変数の値(StatusCode)から正常・異常を判断します。

20.9.1.3 AWS Step Functionsサービスと連携する例

AWS API Gateway経由でAWS Step Functionsサービス(API Version 2016-11-23)のジョブを実行、監視、強制終了する場合の例を示します。

AWS Step FunctionsのAPIのエンドポイントは外部に公開されていないため、AWS API Gatewayを経由する必要があります。AWS API Gatewayの設定方法は、AWSの公式ドキュメントを参照してください。

{
  "request": {
    "url": "https://a1b2c3d4e5.execute-api.ap-northeast-1.amazonaws.com/step-functions-stage/startexecution",
    "method": "POST",
    "authName": "Aws_Step_Functions",
    "proxyAuthName": "Proxy1",
    "takeoverKeys": {
      "executionId": "executionArn"
    },
    "body": "/paramfiles/aws_stepFunctions_main_body.json",
    "resHeader": "/response/aws_stepFunctions_main_header_<date>.json",
    "resBody": "/response/aws_stepFunctions_main_body_<date>.json",
    "timeout": 60
  },
  "monitoring": {
    "url": "https://a1b2c3d4e5.execute-api.ap-northeast-1.amazonaws.com/step-functions-stage/describeexecution",
    "method": "POST",
    "body": "/paramfiles/aws_stepFunctions_moni_body.json",
    "resHeader": "/response/aws_stepFunctions_moni_header_<date>.json",
    "resBody": "/response/aws_stepFunctions_moni_body_<date>.json",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "status",
    "pollingEndVal": ["SUCCEEDED","FAILED","TIMED_OUT","ABORTED"],
    "checkResultKey": "status",
    "checkResultVal": ["SUCCEEDED"]
  },
  "termination": {
    "url": "https://a1b2c3d4e5.execute-api.ap-northeast-1.amazonaws.com/step-functions-stage/stopexecution",
    "method": "POST",
    "body": "/paramfiles/aws_stepFunctions_term_body.json",
    "resHeader": "/response/aws_stepFunctions_term_header_<date>.json",
    "resBody": "/response/aws_stepFunctions_term_body_<date>.json"
   }
}

上記のrequestオブジェクトで指定するリクエストメッセージボディ(aws_stepFunctions_main_body.json)の例

{
    "input": "{}",
    "name": "Sleep60 ",
    "stateMachineArn": "arn:aws:states:ap-northeast-1:123456789012:stateMachine:sleep60"
}

上記のmonitoringオブジェクトで指定するリクエストメッセージボディ(aws_stepFunctions_moni_body.json)の例

{
    "executionArn": "<executionId>"
}

上記のterminationオブジェクトで指定するリクエストメッセージボディ(aws_stepFunctions_term_body.json)の例

{
    "executionArn": "<executionId>"
}

20.9.1.4 Amazon Simple Storage Service (Amazon S3)サービスと連携する例

Amazon Simple Storage Service (Amazon S3)サービスのファイル待ち合わせをするLambda関数(API Version 2015-03-31)を実行、監視する場合の例を示します。

Amazon S3サービスを対象としたファイル待ち合わせでは、作成、削除、更新、サイズ更新を待ち合わせることができます。待ち合わせ方法は、monitoringオブジェクト内で指定します。

Amazon S3サービスを対象とした上記のファイル待ち合わせをする場合は、Lambda関数を介して行います。

注意

AWS Lambdaを介して連携するサービスの使用例を利用する場合

本使用例を利用する際は、セキュリティを考慮し、以下を実施してください。

  • 関数をデプロイする際は、適切な認証の設定、およびアクセス制限をしてください。

  • 関数で指定する引数のチェックは必要に応じて追加してください。

ファイルが存在しない場合、作成されるまで待つまたはファイルが削除されるまで待つ場合の例

{
  "request": {
    "url": "https://3abcdef7argst12345xs66kja0nmvss.lambda-url.ap-northeast-1.on.aws/",
    "method": "POST",
    "authName": "Aws_S3_Lambda",
    "proxyAuthName": "Proxy1",
    "body": "/paramfiles/amazon_s3_main_body.json",
    "resHeader": "/response/amazon_s3_main_header_<date>.json",
    "resBody": "/response/amazon_s3_main_body_<date>.json",
    "timeout": 60,
    "tcpKeepAlive": {
       "idleTime": 60,
       "probeInterval": 10,
       "probeCount": 9
    }
  },
  "monitoring": {
    "url": "https://3abcdef7argst12345xs66kja0nmvss.lambda-url.ap-northeast-1.on.aws/",
    "method": "POST",
    "body": "/paramfiles/amazon_s3_moni_body.json",
    "resHeader": "/response/amazon_s3_moni_header_<date>.json",
    "resBody": "/response/amazon_s3_moni_body_<date>.json",
    "firstMonitorInterval": 3,
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "result",
    "pollingEndVal": ["SUCCEEDED"],
    "checkResultKey": "result",
    "checkResultVal": ["SUCCEEDED"]
  }
}

上記のファイルが存在しない場合、作成されるまで待つ場合のrequestオブジェクトで指定するリクエストメッセージボディ(amazon_s3_main_body.json)の例

{
    "bucketName": "test-bucket1",
    "fileName": "test1.txt",
    "option": "wait"
}

上記のファイルが存在しない場合、作成されるまで待つ場合のmonitoringオブジェクトで指定するリクエストメッセージボディ(amazon_s3_moni_body.json)の例

{
    "bucketName": "test-bucket1",
    "fileName": "test1.txt",
    "option": "wait"
}

上記のファイルが削除されるまで待つ場合のrequestオブジェクトで指定するリクエストメッセージボディ(amazon_s3_main_body.json)の例

{
    "bucketName": "test-bucket1",
    "fileName": "test1.txt",
    "option": "delete"
}

上記のファイルが削除されるまで待つ場合のmonitoringオブジェクトで指定するリクエストメッセージボディ(amazon_s3_moni_body.json)の例

{
    "bucketName": "test-bucket1",
    "fileName": "test1.txt",
    "option": "delete"
}

ファイルが更新されるまで待つ場合の

{
  "request": {
    "url": "https://3abcdef7argst12345xs66kja0nmvss.lambda-url.ap-northeast-1.on.aws/",
    "method": "POST",
    "authName": "Aws_S3_Lambda",
    "proxyAuthName": "Proxy1",
    "takeoverKeys": {
      "firstState": "status",
      "firstUpdateDate": "updateDate"
    },
    "body": "/paramfiles/amazon_s3_main_body.json",
    "resHeader": "/response/amazon_s3_main_header_<date>.json",
    "resBody": "/response/amazon_s3_main_body_<date>.json",
    "timeout": 60,
    "tcpKeepAlive": {
      "idleTime": 60,
       "probeInterval": 10,
       "probeCount": 9
    }
  },
  "monitoring": {
    "url": "https://3abcdef7argst12345xs66kja0nmvss.lambda-url.ap-northeast-1.on.aws/",
    "method": "POST",
    "body": "/paramfiles/amazon_s3_moni_body.json",
    "resHeader": "/response/amazon_s3_moni_header_<date>.json",
    "resBody": "/response/amazon_s3_moni_body_<date>.json",
    "firstMonitorInterval": 3,
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "result",
    "pollingEndVal": ["SUCCEEDED"],
    "checkResultKey": "result",
    "checkResultVal": ["SUCCEEDED"]
  }
}

上記のファイルが更新されるまで待つ場合のrequestオブジェクトで指定するリクエストメッセージボディ(amazon_s3_main_body.json)の例

{
    "bucketName": "test-bucket1",
    "fileName": "test1.txt",
    "option": "update",
    "activity": "request"
}

上記のファイルが更新されるまで待つ場合のmonitoringオブジェクトで指定するリクエストメッセージボディ(amazon_s3_moni_body.json)の例

{
    "bucketName": "test-bucket1",
    "fileName": "test1.txt",
    "reqStatus": "<firstState>",
    "reqUpdateDate": "<firstUpdateDate>",
    "option": "update",
    "activity": "monitoring"
}

呼び出すLambda関数(API Version 2015-03-31)の例

使用言語はpython v3.12です。

import json
import base64
import boto3
import botocore.exceptions

class ParameterError(Exception):
    pass

def lambda_handler(event, context):
    try:
        # リクエストメッセージボディから各パラメタを取得
        arg = base64.b64decode(event["body"]).decode()
        arg = json.loads(arg)
        bucket_name = arg.get("bucketName", None)
        file_name = arg.get("fileName", None)
        option = arg.get("option", None)

        # パラメタのチェック
        if bucket_name is None or file_name is None or option is None:
            raise ParameterError("The request body does not contain the required parameters.")

        # S3のクライアントオブジェクトを作成
        s3_client = boto3.client('s3')

        # バケットの存在確認
        try:
            s3_client.head_bucket(Bucket=bucket_name)
        except botocore.exceptions.ClientError as e:
            if e.response['Error']['Code'] == '404':
                raise ParameterError("The specified bucket does not exist.") from e

            raise

        res = {}

        # ファイル作成待ち合わせの場合
        if option == "wait":
            result, status = chk_object_exists(s3_client, bucket_name, file_name)

        # ファイル削除待ち合わせの場合
        elif option == "delete":
            result, status = chk_object_delete(s3_client, bucket_name, file_name)

        # ファイル更新待ち合わせの場合
        elif option == "update":
            activity = arg.get("activity", None)
            if activity is None:
                raise ParameterError("The request body does not contain the required parameters.")
            req_status = arg.get("reqStatus", None)
            req_update_date = arg.get("reqUpdateDate", None)

            if activity == "request":
                pass
            elif activity == "monitoring":
                if req_status is None or req_update_date is None:
                    raise ParameterError("The request body does not contain the required parameters.")
            else:
                raise ParameterError("Invalid parameter for activity.")

            result, status, update_date = chk_object_update(s3_client, bucket_name, file_name, req_status, req_update_date)
            res['updateDate'] = update_date

        else:
            raise ParameterError("Invalid parameter for option.")

        res['result'] = result
        res['status'] = status

        return {
            'statusCode': 200,
            'body': json.dumps(res, indent=4),
            'headers': {
                'Content-Type': 'application/json'
            }
        }

    # パラメタエラー発生時の処理
    except ParameterError as e:
        result = {"error": str(e)}
        return {
            'statusCode': 400,
            'body': json.dumps(result, indent=4),
            'headers': {
                'Content-Type': 'application/json'
            }
        }

    # その他のエラー発生時の処理
    except Exception as e:
        result = {"error": str(e)}
        return {
            'statusCode': 500,
            'body': json.dumps(result, indent=4),
            'headers': {
                'Content-Type': 'application/json'
            }
        }


# ファイル作成待ち合わせ用関数
def chk_object_exists(s3_client, bucket_name, file_name):
    try:
        s3_client.head_object(Bucket=bucket_name, Key=file_name)
        result = 'SUCCEEDED'
        status = 'EXIST'
    except botocore.exceptions.ClientError as e:
        if e.response["Error"]["Code"] == "404":
            result = 'WAITING'
            status = 'NOT_EXIST'
        else:
            raise
    return result, status


# ファイル削除待ち合わせ用関数
def chk_object_delete(s3_client, bucket_name, file_name):
    try:
        s3_client.head_object(Bucket=bucket_name, Key=file_name)
        result = 'WAITING'
        status = 'EXIST'
    except botocore.exceptions.ClientError as e:
        if e.response['Error']['Code'] == '404':
            result = 'SUCCEEDED'
            status = 'NOT_EXIST'
        else:
            raise
    return result, status


# ファイル更新待ち合わせ用関数
def chk_object_update(s3_client, bucket_name, file_name, req_status, req_update_date):
    try:
        response = s3_client.head_object(Bucket=bucket_name, Key=file_name)
        current_update_date = response['LastModified'].strftime('%Y/%m/%d %H:%M:%S')

        if req_status == "WAITING_FOR_UPDATE":
            if current_update_date != req_update_date:
                result = 'SUCCEEDED'
                status = 'UPDATED'
            else:
                result = 'WAITING'
                status = 'WAITING_FOR_UPDATE'
            return result, status, current_update_date

        if req_status == "WAITING_FOR_CREATE":
            result = 'SUCCEEDED'
            status = 'FILE_CREATED'
            return result, status, current_update_date

        result = 'WAITING'
        status = 'WAITING_FOR_UPDATE'
        return result, status, current_update_date

    except botocore.exceptions.ClientError as e:
        if e.response['Error']['Code'] == '404':
            result = 'WAITING'
            status = 'WAITING_FOR_CREATE'
            update_date = ''
            return result, status, update_date

        raise

20.9.1.5 AWS Backupサービスと連携する例

AWS Backupサービス(API Version 2023-12-06)のジョブ(Amazon S3のオブジェクトのバックアップ)を実行、監視、強制終了する場合の例を示します。

{
  "request": {
    "url": "https://backup.ap-northeast-1.amazonaws.com/backup-jobs/",
    "method": "PUT",
    "authName": "Aws_backup",
    "proxyAuthName": "Proxy1",
    "body": "/paramfiles/aws_backup_main_body.json",
    "resHeader": "/response/aws_backup_main_header_<date>.json",
    "resBody": "/response/aws_backup_main_body_<date>.json",
    "timeout": 60,
    "takeoverKeys": {
      "BACKUPJOBID": "BackupJobId"
    }
  },
  "monitoring": {
    "url": "https://backup.ap-northeast-1.amazonaws.com/backup-jobs/<BACKUPJOBID>",
    "method": "GET",
    "resHeader": "/response/aws_backup_moni_header_<date>.json",
    "resBody": "/response/aws_backup_moni_body_<date>.json",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "State",
    "pollingEndVal": ["COMPLETED","FAILED","ABORTED", "EXPIRED"],
    "checkResultKey": "State",
    "checkResultVal": ["COMPLETED"]
  },
  "termination": {
    "url": "https://backup.ap-northeast-1.amazonaws.com/backup-jobs/<BACKUPJOBID>",
    "method": "POST",
    "resHeader": "/response/aws_backup_term_header_<date>.json",
    "resBody": "/response/aws_backup_term_body_<date>.json"
  }
}

上記のrequestオブジェクトで指定するリクエストメッセージボディ(aws_backup_main_body.json)の例

{
  "BackupVaultName": "test",
  "ResourceArn": "arn:aws:s3:::test-backup",
  "IamRoleArn": "arn:aws:iam::123456789012:role/test_backup",
  "Lifecycle": {
        "DeleteAfterDays": 1
    }
}

20.9.1.6 Amazon Relational Database Service (Amazon RDS)サービスと連携する例

Amazon Relational Database Service (Amazon RDS)サービス(API Version 2014-10-31)のジョブ(RDSインスタンスの起動)を実行、監視する場合の例

{
  "request": {
    "url": "https://rds.ap-northeast-1.amazonaws.com/",
    "method": "POST",
    "authName": "Aws_rds",
    "proxyAuthName": "Proxy1",
    "resHeader": "/response/amazon_rds_main_header_<date>.json",
    "resBody": "/response/amazon_rds_main_body_<date>.json",
    "query": {
      "DBInstanceIdentifier": "rs-rds-database-1",
      "Action": "StartDBInstance",
      "Version": "2014-10-31"
    },
    "timeout": 60
  },
  "monitoring": {
    "url": "https://rds.ap-northeast-1.amazonaws.com/",
    "method": "GET",
    "resHeader": "/response/amazon_rds_moni_header_<date>.json",
    "resBody": "/response/amazon_rds_moni_body_<date>.json",
    "query": {
      "DBInstanceIdentifier": "rs-rds-database-1",
      "Action": "DescribeDBInstances",
      "Version": "2014-10-31"
    },
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "DescribeDBInstancesResponse.DescribeDBInstancesResult.DBInstances.DBInstance.DBInstanceStatus",
    "pollingEndVal": ["available","failed"],
    "checkResultKey": "DescribeDBInstancesResponse.DescribeDBInstancesResult.DBInstances.DBInstance.DBInstanceStatus",
    "checkResultVal": ["available"]
  }
}

Amazon Relational Database Service (Amazon RDS)サービス(API Version 2014-10-31)のジョブ(RDSインスタンスの停止)を実行、監視する場合の例

{
  "request": {
    "url": "https://rds.ap-northeast-1.amazonaws.com/",
    "method": "POST",
    "authName": "Aws_rds",
    "proxyAuthName": "Proxy1",
    "resHeader": "/response/amazon_rds_main_header_<date>.json",
    "resBody": "/response/amazon_rds_main_body_<date>.json",
    "query": {
      "DBInstanceIdentifier": "rs-rds-database-1",
      "Action": "StopDBInstance",
      "Version": "2014-10-31"
    },
    "timeout": 60
  },
  "monitoring": {
    "url": "https://rds.ap-northeast-1.amazonaws.com/",
    "method": "GET",
    "resHeader": "/response/amazon_rds_moni_header_<date>.json",
    "resBody": "/response/amazon_rds_moni_body_<date>.json",
    "query": {
      "DBInstanceIdentifier": "rs-rds-database-1",
      "Action": "DescribeDBInstances",
      "Version": "2014-10-31"
    },
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "DescribeDBInstancesResponse.DescribeDBInstancesResult.DBInstances.DBInstance.DBInstanceStatus",
    "pollingEndVal": ["stopped","failed"],
    "checkResultKey": "DescribeDBInstancesResponse.DescribeDBInstancesResult.DBInstances.DBInstance.DBInstanceStatus",
    "checkResultVal": ["stopped"]
  }
}

20.9.1.7 Amazon Elastic Compute Cloud (Amazon EC2)サービスと連携する例

Amazon Elastic Compute Cloud (Amazon EC2)サービス(API Version 2016-11-15)のジョブ(インスタンス起動)を実行、監視する場合の例を示します。

{
  "request": {
    "url": "https://ec2.ap-northeast-1.amazonaws.com/",
    "method": "POST",
    "authName": "Aws_ec2",
    "proxyAuthName": "Proxy1",
    "resHeader": "/response/amazon_ec2_main_header_<date>.json",
    "resBody": "/response/amazon_ec2_main_body_<date>.json",
    "query": {
      "Action": "StartInstances",
      "InstanceId.1": "i-1234567890abcdef0",
      "Version": "2016-11-15"
    },
    "timeout": 60
  },
  "monitoring": {
    "url": "https://ec2.ap-northeast-1.amazonaws.com/",
    "method": "GET",
    "resHeader": "/response/amazon_ec2_moni_header_<date>.json",
    "resBody": "/response/amazon_ec2_moni_body_<date>.json",
    "query": {
      "Action": "DescribeInstances",
      "InstanceId.1": "i-1234567890abcdef0",
      "Version": "2016-11-15"
    },
    "pollingEndKey": "DescribeInstancesResponse.reservationSet.item.instancesSet.item.instanceState.name",
    "pollingEndVal": ["running", "terminated"],
    "checkResultKey": "DescribeInstancesResponse.reservationSet.item.instancesSet.item.instanceState.name",
    "checkResultVal": ["running"]
  }
}

Amazon Elastic Compute Cloud (Amazon EC2)サービス(API Version 2016-11-15)のジョブ(インスタンス停止)を実行、監視する場合の例

{
  "request": {
    "url": "https://ec2.ap-northeast-1.amazonaws.com/",
    "method": "POST",
    "authName": "Aws_ec2",
    "proxyAuthName": "Proxy1",
    "resHeader": "/response/amazon_ec2_main_header_<date>.json",
    "resBody": "/response/amazon_ec2_main_body_<date>.json",
    "query": {
      "Action": "StopInstances",
      "InstanceId.1": "i-1234567890abcdef0",
      "Version": "2016-11-15"
    },
    "timeout": 60
  },
  "monitoring": {
    "url": "https://ec2.ap-northeast-1.amazonaws.com/",
    "method": "GET",
    "resHeader": "/response/amazon_ec2_moni_header_<date>.json",
    "resBody": "/response/amazon_ec2_moni_body_<date>.json",
    "query": {
      "Action": "DescribeInstances",
      "InstanceId.1": "i-1234567890abcdef0",
      "Version": "2016-11-15"
    },
    "pollingEndKey": "DescribeInstancesResponse.reservationSet.item.instancesSet.item.instanceState.name",
    "pollingEndVal": ["stopped", "terminated"],
    "checkResultKey": "DescribeInstancesResponse.reservationSet.item.instancesSet.item.instanceState.name",
    "checkResultVal": ["stopped"]
  }
}

20.9.1.8 Amazon Elastic Kubernetes Service (Amazon EKS)サービスと連携する例

Amazon Elastic Kubernetes Service (Amazon EKS)サービス(API Version 2011-01-01)のジョブ(ワーカーノード起動)を実行、監視する場合の例を示します。

{
  "request": {
    "url": "https://autoscaling.ap-northeast-1.amazonaws.com/",
    "method": "POST",
    "authName": "Aws_eks",
    "proxyAuthName": "Proxy1",
    "resHeader": "/response/amazon_eks_main_header_<date>.json",
    "resBody": "/response/amazon_eks_main_body_<date>.json",
    "query": {
      "Action": "UpdateAutoScalingGroup",
      "AutoScalingGroupName": "AutoScalingGrp1",
      "MinSize": "10",
      "MaxSize": "20",
      "DesiredCapacity": "20",
      "Version": "2011-01-01"    
    },
    "timeout": 60
  },
  "monitoring": {
    "url": "https://autoscaling.ap-northeast-1.amazonaws.com/",
    "method": "GET",
    "resHeader": "/response/amazon_eks_moni_header_<date>.json",
    "resBody": "/response/amazon_eks_moni_body_<date>.json",
    "query": {
      "Action": "DescribeScalingActivities",
      "AutoScalingGroupName": "AutoScalingGrp1",
      "MaxRecords": "1",
      "Version": "2011-01-01"    
    },
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "DescribeScalingActivitiesResponse.DescribeScalingActivitiesResult.Activities.member.StatusCode",
    "pollingEndVal": ["Successful", "Failed", "Cancelled"],
    "checkResultKey": "DescribeScalingActivitiesResponse.DescribeScalingActivitiesResult.Activities.member.StatusCode",
    "checkResultVal": ["Successful"]
  }
}

Amazon Elastic Kubernetes Service (Amazon EKS)サービス(API Version 2011-01-01)のジョブ(ワーカーノード停止)を実行、監視、強制終了する場合の例

{
  "request": {
    "url": "https://autoscaling.ap-northeast-1.amazonaws.com/",
    "method": "POST",
    "authName": "Aws_eks",
    "proxyAuthName": "Proxy1",
    "resHeader": "/response/amazon_eks_main_header_<date>.json",
    "resBody": "/response/amazon_eks_main_body_<date>.json",
    "query": {
      "Action": "UpdateAutoScalingGroup",
      "AutoScalingGroupName": "AutoScalingGrp1",
      "MinSize": "0",
      "MaxSize": "0",
      "DesiredCapacity": "0",
      "Version": "2011-01-01"    
    },
    "timeout": 60
  },
  "monitoring": {
    "url": "https://autoscaling.ap-northeast-1.amazonaws.com/",
    "method": "GET",
    "resHeader": "/response/amazon_eks_moni_header_<date>.json",
    "resBody": "/response/amazon_eks_moni_body_<date>.json",
    "query": {
      "Action": "DescribeScalingActivities",
      "AutoScalingGroupName": "AutoScalingGrp1",
      "MaxRecords": "1",
      "Version": "2011-01-01"    
    },
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "DescribeScalingActivitiesResponse.DescribeScalingActivitiesResult.Activities.member.StatusCode",
    "pollingEndVal": ["Successful", "Failed", "Cancelled"],
    "checkResultKey": "DescribeScalingActivitiesResponse.DescribeScalingActivitiesResult.Activities.member.StatusCode",
    "checkResultVal": ["Successful"]
  }
}

20.9.1.9 Azure Batchサービスと連携する例

Azure Batchサービス(API Version 2023-05-01.17.0)のジョブを実行、監視、強制終了する場合の例を示します。

{
  "request": {
    "url": "https://testbatch112233.japaneast.batch.azure.com/jobs/testJob/tasks",
    "method": "POST",
    "authName": "Azure-Batch",
    "proxyAuthName": "Proxy1",
    "query": {
      "api-version": "2023-05-01.17.0"
    },
    "header": {
      "Content-Type": "application/json;odata=minimalmetadata"
    },
    "body": "/paramfiles/azure_batch_main_body.json",
    "resHeader": "/response/azure_batch_main_header_<date>.json",
    "resBody": "/response/azure_batch_main_body_<date>.json",
    "timeout": 60
  },
  "monitoring": {
    "url": "https://testbatch112233.japaneast.batch.azure.com/jobs/testJob/tasks/testTask",
    "method": "GET",
    "query": {
      "api-version": "2023-05-01.17.0"
    },
    "resHeader": "/response/azure_batch_moni_header_<date>.json",
    "resBody": "/response/azure_batch_moni_body_<date>.json",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "state",
    "pollingEndVal": ["completed"],
    "checkResultKey": "executionInfo.result",
    "checkResultVal": ["success"]
  },
  "termination": {
    "url": "https://testbatch112233.japaneast.batch.azure.com/jobs/testJob/tasks/testTask/terminate",
    "method": "POST",
    "query": {
      "api-version": "2023-05-01.17.0"
    },
    "resHeader": "/response/azure_batch_term_header_<date>.json",
    "resBody": "/response/azure_batch_term_body_<date>.json"
  }
}

上記のrequestオブジェクトで指定するリクエストメッセージボディ(azure_batch_main_body.json)の例

{
  "id": "testTask",
  "commandLine": "cmd /c \"set AZ_BATCH & timeout /t 90 > NUL\""
}

20.9.1.10 Azure Functionsサービスと連携する例

Azure Functionsサービス(ランタイムバージョン4)の関数を実行する場合の例を示します。

{
  "request": {
    "url": "https://testfunc123456.azurewebsites.net/api/HttpTrigger1",
    "method": "GET",
    "authName":  "Azure-Functions",
    "proxyAuthName": "Proxy1",
    "query": {
      "name": "Function"
    },
    "resHeader": "/response/azure_func_main_header_<date>.json",
    "resBody": "/response/azure_func_main_body_<date>.json",
    "timeout": 60,
    "tcpKeepAlive": {
      "idleTime": 60,
       "probeInterval": 10,
       "probeCount": 9
    }
  }
}

20.9.1.11 Azure Logic Appsサービスと連携する例

Azure Logic Appsサービス(API Version 2016-06-01)のジョブを実行、監視、強制終了する場合の例を示します。

{
  "request": {
    "url": "https://prod-27.japaneast.logic.azure.com:443/workflows/abcd1234-5678-90ef-ghij-klmnopqrstuv /triggers/manual/paths/invoke",
    "method": "POST",
    "authName": "Azure-Logic-Apps",
    "proxyAuthName": "Proxy1",
    "query": {
      "api-version": "2016-06-01"
    },
    "resHeader": "/response/azure_logicApps_main_header_<date>.json",
    "resBody": "/response/azure_logicApps_main_body_<date>.json",
    "takeoverKeys": {
      "RunId": "name"
    },
    "timeout": 60
  },
  "monitoring": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/testLogicApps/providers/Microsoft.Logic/workflows/testlogicapps/runs/<RunId>",
    "method": "GET",
    "query": {
      "api-version": "2016-06-01"
    },
    "resHeader": "/response/azure_logicApps_moni_header_<date>.json",
    "resBody": "/response/azure_logicApps_moni_body_<date>.json",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "properties.status",
    "pollingEndVal": ["Succeeded","Failed","Aborted","Cancelled","Timed out"],
    "checkResultKey": "properties.status",
    "checkResultVal": ["Succeeded"]
  },
  "termination": {
     "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/testLogicApps/providers/Microsoft.Logic/workflows/testlogicapps/runs/<RunId>/cancel",
     "method": "POST",
     "query": {
       "api-version": "2016-06-01"
     },
     "resHeader": "/response/azure_logicApps_term_header_<date>.json",
     "resBody": "/response/azure_logicApps_term_body_<date>.json"
   }
}

20.9.1.12 Azure Blob Storageサービスと連携する例

Azure Blob Storageサービスのファイル待ち合わせをするAzure Functions関数(ランタイムバージョン4)を実行、監視する場合の例を示します。

Azure Blob Storageサービスを対象としたファイル待ち合わせでは、作成、削除、更新、サイズ更新を待ち合わせることができます。待ち合わせ方法は、monitoringオブジェクト内で指定します。

Azure Blob Storageサービスを対象とした上記のファイル待ち合わせをする場合はFunctions関数を介して行います。

注意

Azure Functionsを介して連携するサービスの使用例を利用する場合

本使用例を利用する際は、セキュリティを考慮し、以下を実施してください。

  • 関数をデプロイする際は、適切な認証の設定、およびアクセス制限をしてください。

  • 関数で指定する引数のチェックは必要に応じて追加してください。

ファイルが存在しない場合、作成されるまで待つ、または、ファイルが削除されるまで待つ場合の例

{
  "request": {
    "url": "https://test-blob-function.azurewebsites.net/api/chkfile_blob",
    "method": "POST",
    "authName":  "Azure-Blob-Functions",
    "proxyAuthName": "Proxy1",
    "body": "/paramfiles/azure_blobStorage_main_body.json",
    "resHeader": "/response/azure_blobStorage_main_header_<date>.json",
    "resBody": "/response/azure_blobStorage_main_body_<date>.json",
    "timeout": 60,
    "tcpKeepAlive": {
      "idleTime": 60,
      "probeInterval": 10,
      "probeCount": 9
    }
},
"monitoring": {
    "url": "https://test-blob-function.azurewebsites.net/api/chkfile_blob",
    "method": "POST",
    "body": "/paramfiles/azure_blobStorage_moni_body.json",
    "resHeader": "/response/azure_blobStorage_moni_header_<date>.json",
    "resBody": "/response/azure_blobStorage_moni_body_<date>.json",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "result",
    "pollingEndVal": ["SUCCEEDED"],
    "checkResultKey": "result",
    "checkResultVal": ["SUCCEEDED"]
  }
}

上記のファイルが存在しない場合、作成されるまで待つ場合のrequestオブジェクトで指定するリクエストメッセージボディ(amazon_blobStorage_main_body.json)の例

{
    "storageAccountName": "test-storage-account1",
    "containerName": "test-container1",
    "fileName": "test1.txt",
    "option": "wait"
}

上記のファイルが存在しない場合、作成されるまで待つ場合のmonitoringオブジェクトで指定するリクエストメッセージボディ(amazon_blobStorage_moni_body.json)の例

{
    "storageAccountName": "test-storage-account1",
    "containerName": "test-container1",
    "fileName": "test1.txt",
    "option": "wait"
}

上記のファイルが削除されるまで待つ場合のrequestオブジェクトで指定するリクエストメッセージボディ(amazon_blobStorage_main_body.json)の例

{
    "storageAccountName": "test-storage-account1",
    "containerName": "test-container1",
    "fileName": "test1.txt",
    "option": "delete"
}

上記のファイルが削除されるまで待つ場合のmonitoringオブジェクトで指定するリクエストメッセージボディ(amazon_blobStorage_moni_body.json)の例

{
    "storageAccountName": "test-storage-account1",
    "containerName": " test-container1",
    "fileName": "test1.txt",
    "option": "delete"
}

ファイルが更新されるまで待つ場合の

{
  "request": {
    "url": " https://test-blob-function.azurewebsites.net/api/chkfile_blob",
    "method": "POST",
    "authName":  "Azure-Blob-Functions",
    "proxyAuthName": "Proxy1",
    "takeoverKeys": {
      "firstState": "status",
      "firstUpdateDate": "updateDate"
    },
    "body": "/paramfiles/azure_blobStorage_main_body.json",
    "resHeader": "/response/azure_blobStorage_main_header_<date>.json",
    "resBody": "/response/azure_blobStorage_main_body_<date>.json",
    "timeout": 60,
    "tcpKeepAlive": {
      "idleTime": 60,
      "probeInterval": 10,
      "probeCount": 9
    }
},
"monitoring": {
    "url": "https://test-blob-function.azurewebsites.net/api/chkfile_blob",
    "method": "POST",
    "body": "/paramfiles/azure_blobStorage_moni_body.json",
    "resHeader": "/response/azure_blobStorage_moni_header_<date>.json",
    "resBody": "/response/azure_blobStorage_moni_body_<date>.json",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "result",
    "pollingEndVal": ["SUCCEEDED"],
    "checkResultKey": "result",
    "checkResultVal": ["SUCCEEDED"]
    }
}

上記のファイルが更新されるまで待つ場合のrequestオブジェクトで指定するリクエストメッセージボディ(amazon_blobStorage_main_body.json)の例

{
    "storageAccountName": "test-storage-account1",
    "containerName": "test-container1",
    "fileName": "test1.txt",
    "option": "update",
    "activity": "request"
}

上記のファイルが更新されるまで待つ場合のmonitoringオブジェクトで指定するリクエストメッセージボディ(amazon_blobStorage_moni_body.json)の例

{
    "storageAccountName": "test-storage-account1",
    "containerName": "test-container1",
    "fileName": "test1.txt",
    "option": "update",
    "reqStatus": "<firstState>",
    "reqUpdateDate": "<firstUpdateDate>",
    "activity": "monitoring"
}

呼び出すFunctions関数(ランタイムバージョン4)の例

使用言語はpython v3.11です。

import json
import azure.functions as func
from azure.identity import ManagedIdentityCredential
from azure.storage.blob import BlobServiceClient

class ParameterError(Exception):
    pass

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.route(route="chkfile_blob")
def chkfile_blob(req: func.HttpRequest) -> func.HttpResponse:
    try:
        # リクエストメッセージボディから各パラメタを取得
        req_body = req.get_json()
        account_name = req_body.get("storageAccountName", None)
        container_name = req_body.get("containerName", None)
        file_name = req_body.get("fileName", None)
        option = req_body.get("option", None)

        # パラメタのチェック
        if account_name is None or container_name is None or file_name is None or option is None:
            raise ParameterError("The request body does not contain the required parameters.")

        # マネージドIDを使用して資格情報を取得
        credential = ManagedIdentityCredential()

        # Blob Storageのクライアントオブジェクトを作成
        blob_service_client = BlobServiceClient(
            account_url=f"https://{account_name}.blob.core.windows.net/",
            credential=credential
        )

        # コンテナの存在確認
        container_client = blob_service_client.get_container_client(container_name)
        if not container_client.exists():
            raise ParameterError("The specified container does not exist.")

        res = {}

        # ファイル作成待ち合わせの場合
        if option == "wait":
            result, status = chk_object_exists(blob_service_client, container_name, file_name)

        # ファイル削除待ち合わせの場合
        elif option == "delete":
            result, status = chk_object_delete(blob_service_client, container_name, file_name)

        # ファイル更新待ち合わせの場合
        elif option == "update":
            activity = req_body.get("activity", None)
            if activity is None:
                raise ParameterError("The request body does not contain the required parameters.")
            req_status = req_body.get("reqStatus", None)
            req_update_date = req_body.get("reqUpdateDate", None)

            if activity == "request":
                pass
            elif activity == "monitoring":
                if req_status is None or req_update_date is None:
                    raise ParameterError("The request body does not contain the required parameters.")
            else:
                raise ParameterError("Invalid parameter for activity.")

            result, status, update_date = chk_object_update(blob_service_client, container_name, file_name, req_status, req_update_date)
            res['updateDate'] = update_date

        else:
            raise ParameterError("Invalid parameter for option.")

        res['result'] = result
        res['status'] = status

        return func.HttpResponse(
            json.dumps(res, indent=4),
            status_code=200,
            headers={"Content-Type": "application/json"}
        )

    # パラメタエラー発生時の処理
    except ParameterError as e:
        result = {"error": str(e)}
        return func.HttpResponse(
            json.dumps(result, indent=4),
            status_code=400,
            headers={"Content-Type": "application/json"}
        )

    # その他のエラー発生時の処理
    except Exception as e:
        result = {"error": str(e)}
        return func.HttpResponse(
            json.dumps(result, indent=4),
            status_code=500,
            headers={"Content-Type": "application/json"}
        )


# ファイル作成待ち合わせ用関数
def chk_object_exists(blob_service_client, container_name, file_name):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=file_name)   
    exists = blob_client.exists()

    if exists:
        result = 'SUCCEEDED'
        status = 'EXIST'
    else:
        result = 'WAITING'
        status = 'NOT_EXIST'

    return result, status


# ファイル削除待ち合わせ用関数
def chk_object_delete(blob_service_client, container_name, file_name):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=file_name)
    exists = blob_client.exists()

    if exists:
        result = 'WAITING'
        status = 'EXIST'
    else:
        result = 'SUCCEEDED'
        status = 'NOT_EXIST'

    return result, status


# ファイル更新待ち合わせ用関数
def chk_object_update(blob_service_client, container_name, file_name, req_status, req_update_date):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=file_name)
    exists = blob_client.exists()

    if exists:
        properties = blob_client.get_blob_properties()
        current_update_date = properties.last_modified.strftime('%Y/%m/%d %H:%M:%S')

        if req_status == "WAITING_FOR_UPDATE":
            if current_update_date != req_update_date:
                result = 'SUCCEEDED'
                status = 'UPDATED'
            else:
                result = 'WAITING'
                status = 'WAITING_FOR_UPDATE'
            return result, status, current_update_date

        if req_status == "WAITING_FOR_CREATE":
            result = 'SUCCEEDED'
            status = 'FILE_CREATED'
            return result, status, current_update_date

        result = 'WAITING'
        status = 'WAITING_FOR_UPDATE'
        return result, status, current_update_date

    result = 'WAITING'
    status = 'WAITING_FOR_CREATE'
    update_date = ''
    return result, status, update_date

20.9.1.13 Azure Backupサービスと連携する例

Azure Backupサービスのジョブ(Azure Blob Storageのオブジェクトのバックアップ)を実行、監視、強制終了する場合の例を示します。

Azure Backupサービスのジョブの監視は、Functions関数を介して行います。

注意

Azure Functionsを介して連携するサービスの使用例を利用する場合

本使用例を利用する際は、セキュリティを考慮し、以下を実施してください。

  • 関数をデプロイする際は、適切な認証の設定、およびアクセス制限をしてください。

  • 関数で指定する引数のチェックは必要に応じて追加してください。

{
  "request": {
    "url": "https://test-backup-function.azurewebsites.net/api/backup",
    "method": "POST",
    "authName": "Azure-Backup-Functions",
    "proxyAuthName": "Proxy1",
    "takeoverKeys": {
        "BACKUPJOBID": "backupJobId"
    },
    "body": "/paramfiles/azure_batch_main_body.json",
    "resHeader": "/response/azure_backup_main_header_<date>.json",
    "resBody": "/response/azure_backup_main_body_<date>.json",
    "timeout": 60,
    "tcpKeepAlive": {
      "idleTime": 60,
       "probeInterval": 10,
       "probeCount": 9
    }
  },
  "monitoring": {
    "url": "https://test-backup-function.azurewebsites.net/api/backup",
    "method": "POST",
    "body": "/paramfiles/azure_batch_moni_body.json",
    "resHeader": "/response/azure_backup_moni_header_<date>.json",
    "resBody": "/response/azure_backup_moni_body_<date>.json",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "properties.status",
    "pollingEndVal": ["Completed","Failed","CompletedWithWarnings","Cancelled"],
    "checkResultKey": "properties.status",
    "checkResultVal": ["Completed"],
  },
  "termination": {
    "url": "https://test-backup-function.azurewebsites.net/api/backup",
    "method": "POST",
    "body": "/paramfiles/azure_batch_term_body.json",
    "resHeader": "/response/azure_backup_term_header_<date>.json",
    "resBody": "/response/azure_backup_term_body_<date>.json"
  }
}

上記のrequestオブジェクトで指定するリクエストメッセージボディ(azure_backup_main_body.json)の例

{
    "activity": "request",
    "subscriptionId": "12345678-1234-1234-1234-123456789abc",
    "resourceGroupName": "test-grp1",
    "containerName": "test-container1",
    "vmName": "test-vm1"
}

上記のmonitoringオブジェクトで指定するリクエストメッセージボディ(azure_backup_moni_body.json)の例

{
    "activity": "monitoring",
    "subscriptionId": "12345678-1234-1234-1234-123456789abc",
    "resourceGroupName": "test-grp1",
    "containerName": "test-container1",
    "backupJobId": "<BACKUPJOBID>"
}

上記のterminationオブジェクトで指定するリクエストメッセージボディ(azure_backup_term_body.json)の例

{
    "activity": "termination",
    "subscriptionId": "12345678-1234-1234-1234-123456789abc",
    "resourceGroupName": "test-grp1",
    "containerName": "test-container1",
    "backupJobId": "<BACKUPJOBID>"
}

呼び出すFunctions関数(ランタイムバージョン4)の例

使用言語はpython v3.11です。

import json
import time
import re
import azure.functions as func
import requests
from azure.identity import ManagedIdentityCredential

class ParameterError(Exception):
    pass

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.route(route="backup", auth_level=func.AuthLevel.ANONYMOUS)
def backup(req: func.HttpRequest) -> func.HttpResponse:
    try:
        # リクエストメッセージボディから各パラメタを取得
        req_body = req.get_json()
        activity = req_body.get('activity', None)
        subscription_id = req_body.get('subscriptionId', None)
        resource_group = req_body.get('resourceGroupName', None)
        vault_name = req_body.get('containerName', None)

        # 正規表現パターン
        valid_param_pattern = re.compile(r'^[a-zA-Z0-9-_]+$')

        # パラメタのチェック
        if activity is None or subscription_id is None or resource_group is None or vault_name is None:
            raise ParameterError("The request body does not contain the required parameters.")

        if not (valid_param_pattern.match(subscription_id) and valid_param_pattern.match(resource_group) and valid_param_pattern.match(vault_name)):
            raise ParameterError("The parameter format is incorrect.")

        # Azure認証情報を取得
        credential = ManagedIdentityCredential()
        token = credential.get_token('https://management.azure.com/.default')
        headers = {
            'Authorization': 'Bearer ' + token.token,
            'Content-Type': 'application/json'
        }

        # バックアップの実行処理
        if activity == 'request':
            # パラメタのチェック
            vm_name = req_body.get('vmName', None)
            if vm_name is None:
                raise ParameterError("The request body does not contain the required parameters.")
            if not valid_param_pattern.match(vm_name):
                raise ParameterError("The parameter format is incorrect.")

            # バックアップ開始
            url = f"https://management.azure.com/Subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.RecoveryServices/vaults/{vault_name}/backupFabrics/Azure/protectionContainers/iaasvmcontainer;iaasvmcontainerv2;{resource_group};{vm_name}/protectedItems/VM;iaasvmcontainerv2;{resource_group};{vm_name}/backup?api-version=2024-04-01"
            req_body = {
                "properties": {
                    "objectType": "IaasVMBackupRequest"
                }
            }
            response = requests.post(url, headers=headers, json=req_body, timeout=60)
            response.raise_for_status()

            # バックアップジョブIDの取得
            url_id = response.headers['Azure-AsyncOperation']
            # ループ回数は必要に応じて適宜変更可能
            for _ in range(30):
                response = requests.get(url_id, headers=headers, timeout=60)
                response.raise_for_status()
                response_json = response.json()
                if 'properties' in response_json and 'jobId' in response_json['properties']:
                    break
                time.sleep(1)
            else:
                raise Exception("A timeout occurred while waiting for a response.")
            return func.HttpResponse(
                json.dumps({"backupJobId": response_json['properties']['jobId']}, indent=4),
                status_code=200,
                headers={"Content-Type": "application/json"}
            )

        # バックアップジョブの状態取得処理
        if activity == 'monitoring':
            # パラメタのチェック
            job_id = req_body.get('backupJobId', None)
            if job_id is None:
                raise ParameterError("The request body does not contain the required parameters.")
            if not valid_param_pattern.match(job_id):
                raise ParameterError("The parameter format is incorrect.")

            # バックアップジョブの状態取得
            url = f"https://management.azure.com/Subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.RecoveryServices/vaults/{vault_name}/backupJobs/{job_id}?api-version=2024-04-01"
            response = requests.get(url, headers=headers, timeout=60)
            response.raise_for_status()
            return func.HttpResponse(
                json.dumps(response.json(), indent=4),
                status_code=200,
                headers={"Content-Type": "application/json"}
            )

        # バックアップジョブ停止処理
        if activity == 'termination':
            # パラメタのチェック
            job_id = req_body.get('backupJobId', None)
            if job_id is None:
                raise ParameterError("The request body does not contain the required parameters.")
            if not valid_param_pattern.match(job_id):
                raise ParameterError("The parameter format is incorrect.")

            # バックアップの中止
            url = f"https://management.azure.com/Subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.RecoveryServices/vaults/{vault_name}/backupJobs/{job_id}/cancel?api-version=2024-04-01"
            response = requests.post(url, headers=headers, timeout=60)
            response.raise_for_status()
            return func.HttpResponse(
                status_code=200
            )

        raise ParameterError("Invalid parameter for activity.")


    # パラメタエラー発生時の処理
    except ParameterError as e:
        result = {"error": str(e)}
        return func.HttpResponse(
            json.dumps(result, indent=4),
            status_code=400,
            headers={"Content-Type": "application/json"}
        )

    # その他のエラー発生時の処理
    except Exception as e:
        result = {"error": str(e)}
        return func.HttpResponse(
            json.dumps(result, indent=4),
            status_code=500,
            headers={"Content-Type": "application/json"}
        )

20.9.1.14 Azure SQL Managed Instanceサービスと連携する例

Azure SQL Managed Instanceサービス(API Version 2021-11-01)のジョブ(インスタンスを起動)を実行、監視する場合の例を示します。

{
  "request": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/test_group/providers/Microsoft.Sql/managedInstances/rs-sqlmi/start",
    "method": "POST",
    "authName": "Azure-SQL-Mi",
    "proxyAuthName": "Proxy1",
    "query": {
      "api-version": "2021-11-01"
    },
    "resHeader": "/response/azure_sql_mi_main_header_<date>.json",
    "resBody": "/response/azure_sql_mi_main_body_<date>.json",
    "timeout": 60
  },
  "monitoring": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/test_group/providers/Microsoft.Sql/managedInstances/rs-sqlmi",
    "query": {
      "api-version": "2021-11-01"
    },
    "method": "GET",
    "resHeader": "/response/azure_sql_mi_moni_header_<date>.json",
    "resBody": "/response/azure_sql_mi_moni_body_<date>.json",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "properties.status",
    "pollingEndKey": "properties.provisioningState",
    "pollingEndVal": ["Succeeded","Failed","Cancelled","Deleted","TimedOut"],
    "checkResultKey": "properties.provisioningState",
    "checkResultVal": ["Succeeded"]
  }
}

Azure SQL Managed Instanceサービス(API Version 2021-11-01)のジョブ(インスタンスを停止)を実行、監視する場合の例を示します。

{
  "request": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/test_group/providers/Microsoft.Sql/managedInstances/rs-sqlmi/stop",
    "method": "POST",
    "authName": "Azure-SQL-Mi",
    "proxyAuthName": "Proxy1",
    "query": {
      "api-version": "2021-11-01"
    },
    "resHeader": "/response/azure_sql_mi_main_header_<date>.json",
    "resBody": "/response/azure_ sql_mi_main_body_<date>.json",
    "timeout": 60
  },
  "monitoring": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/test_group/providers/Microsoft.Sql/managedInstances/rs-sqlmi",
    "query": {
      "api-version": "2021-11-01"
    },
    "method": "GET",
    "resHeader": "/response/azure_sql_mi_moni_header_<date>.json",
    "resBody": "/response/azure_sql_mi_moni_body_<date>.json",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "properties.provisioningState",
    "pollingEndVal": ["Succeeded","Failed","Cancelled","Deleted","TimedOut"],
    "checkResultKey": "properties.provisioningState",
    "checkResultVal": ["Succeeded"]
  }
}

20.9.1.15 Azure Virtual Machinesサービスと連携する例

Azure Virtual Machinesサービス(API Version 2024-03-01)のジョブ(インスタンス起動)を実行、監視する場合の例を示します。

{
  "request": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/test -group/providers/Microsoft.Compute/virtualMachines/vm-test/start",
    "method": "POST",
    "authName": "Azure-VM",
    "proxyAuthName": "Proxy1",
    "query": {
      "api-version": "2024-03-01"
    },
    "resHeader": "/response/azure_vm_main_header_<date>.json",
    "resBody": "/response/azure_vm_main_body_<date>.json",
    "timeout": 60
  },
  "monitoring": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/test- group/providers/Microsoft.Compute/virtualMachines/vm-test/instanceView",
    "query": {
      "api-version": "2024-03-01"
    },
    "method": "GET",
    "resHeader": "/response/azure_vm_moni_header_<date>.json",
    "resBody": "/response/azure_vm_moni_body_<date>.json",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "statuses.[0].displayStatus",
    "pollingEndVal": ["Provisioning succeeded", "Provisioning failed"],
    "checkResultKey": "statuses.[0].displayStatus",
    "checkResultVal": ["Provisioning succeeded"]
  }
}

Azure Virtual Machinesサービス(API Version 2024-03-01)のジョブ(インスタンス停止)を実行、監視する場合の例を示します。

{
  "request": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/test-group/providers/Microsoft.Compute/virtualMachines/vm-test/deallocate",
    "method": "POST",
    "authName": "Azure-VM",
    "proxyAuthName": "Proxy1",
    "query": {
      "api-version": "2024-03-01"
    },
    "resHeader": "/response/azure_vm_main_header_<date>.json",
    "resBody": "/response/azure_vm_main_body_<date>.json",
    "timeout": 60
  },
  "monitoring": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/test- group/providers/Microsoft.Compute/virtualMachines/vm-test/instanceView",
    "query": {
      "api-version": "2024-03-01"
    },
    "method": "GET",
    "resHeader": "/response/azure_vm_moni_header_<date>.json",
    "resBody": "/response/azure_vm_moni_body_<date>.json",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "statuses.[0].displayStatus",
    "pollingEndVal": ["Provisioning succeeded", "Provisioning failed"],
    "checkResultKey": "statuses.[0].displayStatus",
    "checkResultVal": ["Provisioning succeeded"]
  }
}

20.9.1.16 Azure Kubernetes Service (AKS)サービスと連携する例

Azure Kubernetes Service (AKS)サービス(API Version 2024-02-01)のジョブ(クラスタの起動)を実行、監視、強制終了する場合の例を示します。

{
  "request": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourcegroups/test-group/providers/Microsoft.ContainerService/managedClusters/testcluster/start",
    "method": "POST",
    "authName": "Azure-AKS",
    "proxyAuthName": "Proxy1",
    "query": {
      "api-version": "2024-02-01"
    },
    "resHeader": "/response/azure_aks_main_header_<date>.json",
    "resBody": "/response/azure_aks_main_body_<date>.json",
    "timeout": 60
  },
  "monitoring": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourcegroups/test-group/providers/Microsoft.ContainerService/managedClusters/testcluster",
    "query": {
      "api-version": "2024-02-01"
    },
    "method": "GET",
    "resHeader": "/response/azure_aks_moni_header_<date>.json",
    "resBody": "/response/azure_aks_moni_body_<date>.json",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "properties.provisioningState",
    "pollingEndVal": ["Succeeded","Failed","Canceled"],
    "checkResultKey": "properties.provisioningState",
    "checkResultVal": ["Succeeded"]
  },
  "termination": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourcegroups/test-group/providers/Microsoft.ContainerService/managedClusters/testcluster/abort",
    "method": "POST",
    "query": {
      "api-version": "2024-02-01"
    },
    "resHeader": "/response/azure_aks_term_header_<date>.json",
    "resBody": "/response/azure_aks_term_body_<date>.json"
  }
}

Azure Kubernetes Service (AKS)サービス(API Version 2024-02-01)のジョブ(クラスタの停止)を実行、監視、強制終了する場合の例を示します。

{
  "request": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourcegroups/test-group/providers/Microsoft.ContainerService/managedClusters/testcluster/stop",
    "method": "POST",
    "authName": "Azure-AKS",
    "proxyAuthName": "Proxy1",
    "query": {
      "api-version": "2024-02-01"
    },
    "resHeader": "/response/azure_aks_main_header_<date>.json",
    "resBody": "/response/azure_aks_main_body_<date>.json",
    "timeout": 60
  },
  "monitoring": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourcegroups/test-group/providers/Microsoft.ContainerService/managedClusters/testcluster",
    "query": {
      "api-version": "2024-02-01"
    },
    "method": "GET",
    "resHeader": "/response/azure_aks_moni_header_<date>.json",
    "resBody": "/response/azure_aks_moni_body_<date>.json",
    "pollingInterval": 60,
    "pollingCount": 5,
    "pollingEndKey": "properties.provisioningState",
    "pollingEndVal": ["Succeeded","Failed","Canceled"],
    "checkResultKey": "properties.provisioningState",
    "checkResultVal": ["Succeeded"]
  },
  "termination": {
    "url": "https://management.azure.com/subscriptions/12345678-1234-1234-1234-123456789abc/resourcegroups/test-group/providers/Microsoft.ContainerService/managedClusters/testcluster/abort",
    "method": "POST",
    "query": {
      "api-version": "2024-02-01"
    },
    "resHeader": "/response/azure_aks_term_header_<date>.json",
    "resBody": "/response/azure_aks_term_body_<date>.json"
  }
}