ファイル名
nnnnn.json |
※nnnnは任意の文字
使用用途
REST実行ジョブがクラウドサービスに接続するために必要なパラメタを記載する接続情報ファイルです。REST実行ジョブを利用する場合には必須です。REST実行ジョブ登録時には、本ファイルをフルパスで指定します。
格納場所
任意
ファイル形式
本ファイルはJSON形式、文字コードはUTF-8で記載します。string型の値にダブルクォーテーションやバックスラッシュ、および、制御文字などを含める場合、JSONのフォーマットに従いエスケープした文字列を指定してください。
requestオブジェクト
実行するAPIに接続するためのパラメタを指定します。
monitoringオブジェクト
APIの処理の完了を待ち合わせるために、監視リクエストを送る場合のパラメタを指定します。
terminationオブジェクト
REST実行ジョブ強制終了時に、実行中のAPIに強制終了リクエストを送る場合のパラメタを指定します。
{
"request": {
"url": "接続URL",
"method": "HTTPメソッド",
"authName": "認証情報名",
"proxyAuthName": "プロキシサーバの認証情報名",
"query": {クエリパラメタ},
"header": {HTTPリクエストヘッダ},
"body": "HTTPリクエストメッセージボディ",
"resHeader": "HTTPレスポンスヘッダ",
"resBody": "HTTPレスポンスボディ",
"timeout": 接続タイムアウト時間,
"takeoverKeys": {監視、強制終了リクエストに引継ぐキー},
"jobnetValKeys": {ジョブネット変数に設定するキー},
"tcpKeepAlive": {
"idleTime": TCP Keep-Aiveパケットを送信するまでの時間,
"probeInterval": TCP Keep-Aliveパケットを再送するまでの時間,
"probeCount": TCP Keep-Aliveパケットの最大送信回数
}
},
"monitoring": {
"url": "接続URL",
"method": "HTTPメソッド",
"query": {クエリパラメタ},
"header": {HTTPリクエストヘッダ},
"body": "HTTPリクエストメッセージボディ",
"resHeader": "HTTPレスポンスヘッダ",
"resBody": "HTTPレスポンスボディ",
"pollingInterval": 監視のポーリング間隔,
"pollingCount": 監視のポーリング回数,
"firstMonitorInterval": 初回の監視リクエスト実行までの間隔,
"pollingEndKey": "監視の終了判定キー",
"pollingEndVal": [監視の終了判定の値],
"checkResultKey": "正常終了判定キー",
"checkResultVal": [正常終了判定の値],
"jobnetValKeys": {ジョブネット変数に設定するキー}
},
"termination": {
"url": "接続URL",
"method": "HTTPメソッド",
"query": {クエリパラメタ},
"header": {HTTPリクエストヘッダ},
"body": "HTTPリクエストメッセージボディ",
"resHeader": "HTTPレスポンスヘッダ",
"resBody": "HTTPレスポンスボディ"
}
}パラメタ
requestオブジェクトのパラメタ
requestオブジェクトの指定は必須です。
パラメタ | キー名・型・デフォルト値 | 説明 | |
|---|---|---|---|
接続URL (*) | キー名 | url | 接続先のURLを以下の形式で指定します。
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オブジェクト内には以下のキー名のみ指定可能です。
TCP Keep-Aliveの各パラメタの詳細は、“request.tcpKeepAliveオブジェクトのパラメタ”を参照してください。 本パラメタを省略した場合、TCP Keep-Aliveは無効になります。 |
型 | object | ||
デフォルト値 | なし | ||
(*):必須のパラメタ
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を以下の形式で指定します。
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を以下の形式で指定します。
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バイト以内で指定してください。
第1階層のキーの場合
キー名をそのまま指定します。
キー名に“.”が含まれている場合は指定できません。
第N階層のキーの場合
階層ごとに“.”を入れて指定します。
キー名に“.”が含まれている場合は指定できません。
第1階層のキー名.第2階層のキー名.…. 第N階層のキー名 |
リスト内のキーの場合
抽出するキーを含むオブジェクトを以下のいずれかの方法で指定します。
他のキーの値を指定
[?"他のキー名"==他のキー名の値].抽出するキー名 |
他のキー名、他のキー名の値、抽出するキー名に、“.”または“=”が含まれている場合は指定できません。
他のキー名の値は、string型とnumber型が指定可能です。string型を指定する場合は、他のキー名の値をダブルクォーテーションで囲んでください。
指定した他のキー名がリスト内に複数ある場合、リストの先頭から最初に条件に一致したものを抽出します。
インデックスを指定
[インデックス番号].抽出するキー名 |
リストの先頭のオブジェクトのインデックス番号は0になります。
キー名に“.”が含まれている場合は指定できません。
なお、レスポンス結果がXML形式の場合は、JSON形式に読み替えて指定してください。XML形式からJSON形式への読み替えは、以降に記載の「レスポンス結果の例(XML形式の場合)」を参考にしてください。
レスポンス結果の例(JSON形式の場合)
{
"id": "id001",
"info": {
"testKey": "testValue"
},
"properties": [
{
"name": "aaa",
"rc": 2
},
{
"name": "bbb",
"rc": 0
}
]
}抽出するキーが"id"の場合: "id"
抽出するキーが"info"配下の"testKey"の場合: "info.testKey"
抽出するキーが"properties"配下の"name"キーの値が"bbb"のオブジェクトの"rc"の場合:
"properties.[?\"name\"==\"bbb\"].rc"
"properties.[1].rc"
レスポンス結果の例(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
}
]
}
}ジョブ定義変数の利用について
下記のパラメタの値には、ジョブ定義変数を利用することができます。パラメタの値(全体または一部)を、“@ジョブ定義変数名@”の形式で指定することで、登録済のジョブ定義変数で置き換えることができます。
接続URLの値に含まれる先頭の"https://"以外の文字
クエリパラメタに指定したパラメタの値に含まれる文字
HTTPリクエストヘッダに指定したヘッダの値に含まれる文字
HTTPリクエストメッセージボディの値に含まれる文字
なお、値に“@任意のキー名@”の指定が可能なパラメタの場合、「任意のキー名」と「ジョブ定義変数名」が同一であった場合は、任意のキー名が優先され置き換えられます。任意のキー名で置き換えられた値に“@ジョブ定義変数名@”の指定がある場合、その部分は登録済のジョブ定義変数で置き換えられます。
また、ジョブ定義変数の置き換え後の値に“<置き換え変数名>”の指定がある場合は、その部分は抽出したキーの値で置き換えられます。
ジョブ定義変数の詳細については、“Systemwalker Operation Manager 運用ガイド”の“ジョブ定義変数を利用してジョブ登録情報を一括置換する場合”を参照してください。
ジョブ定義変数の指定例
ジョブ定義変数“JOBDEF”で置き換える場合、以下のように指定します。
接続URL
"url": "https://@JOBDEF@.azurewebsites.net/api/HttpTrigger1"
クエリパラメタ
"query": {
"パラメタ名": "param@JOBDEF@"
}HTTPリクエストヘッダ
"header": {
"ヘッダ名": "@JOBDEF@"
}HTTPリクエストメッセージボディ
{
"パラメタ1": "@JOBDEF@"
}変数の置き換えができない指定方法について
パラメタの値に変数を利用する場合、指定方法によっては置き換えができません。置き換わる前の文字列がパラメタに残ることで、ジョブのエラーにつながる可能性があり注意が必要です。
変数の置き換えができない指定方法について以下に示します。
ジョブ定義変数が未定義の場合
任意のキーが未定義の場合
置き換え変数が未定義の場合
“@ジョブ定義変数名@”で置き換えられた値に“@任意のキー名@”の指定がある場合
この場合、“@任意のキー名@”が置き換わりません。
“<置き換え変数名>”で置き換えられた値に、“@ジョブ定義変数名@”の指定または“@任意のキー名@”の指定がある場合
この場合、“@ジョブ定義変数名@”の指定または“@任意のキー名@”が置き換わりません。
注意事項
monitoringオブジェクトとterminationオブジェクトの以下のパラメタは、requestオブジェクトと共通です。
認証情報名
プロキシサーバの認証情報名
接続タイムアウト時間
接続情報ファイルの記載内容に誤りがある場合、REST実行ジョブは異常終了となります。
使用例
連携可能なクラウドサービスと対象となる操作は、以下のとおりです。
サービス名 | 操作 |
|---|---|
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”など)、実際のリソース情報や認証情報、ファイルパスなどに合わせて変更してください。
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>"
}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)から正常・異常を判断します。
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>"
}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
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
}
}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"]
}
}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"]
}
}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"]
}
}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\""
}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
}
}
}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"
}
}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
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"}
)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"]
}
}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"]
}
}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"
}
}