2017.05.23

ScriptRunner for AmazonSQS -時間のかかるスクリプトを外部実行する

外部システムからのアクセスによりSkyOnDemand連携サーバーのスクリプトを実行する場合、
HTTPトリガー/Webサービストリガーを使用する方法がよく用いられます。
(HTTPトリガー/Webサービストリガーについては、以前の記事をご参照ください)

HTTPトリガーを利用する上では、タイムアウトに注意する必要があります。
SkyOnDemandにおけるトリガーのタイムアウトは290秒です。
スクリプトの実行時間が290秒を超えた場合、呼び出し側はスクリプトの実行結果を知ることができません。

今回ご紹介するScriptRunner for AmazonSQSを利用すれば、
スクリプトの実行に時間がかかる場合でも、タイムアウトを回避することが可能です。

ScriptRunner for AmazonSQSとは

ScriptRunner for AmazonSQS(以下ScriptRunnerSQS)は、連携サーバーのスクリプトをAmazon SQSを経由して実行するためのインターフェースです。

ScriptRunnerSQSには以下のような特徴があります。

  • リクエストの送信は専用のクライアントツールにより実行します。
  • 利用するためには、Amazon SQSのキューが2つ必要です。
  • リクエスト内容は設定ファイルに記述し、起動パラメータで指定します。

HTTPトリガーとScriptRunnerSQSを比較すると、以下のような違いがあります。

HTTPトリガー ScriptRunner for AmazonSQS
実行方式 HTTP(S)リクエスト 専用のコマンドラインツール
パラメータの指定方法 HTTPパラメータ 設定ファイル

応答の待機 同期 非同期
タイムアウト 290秒 1秒単位の任意の値 (デフォルトは3600秒=1時間)

  

要求が実行されるまでの手順・イメージ図

ScriptRunnerSQSの処理はおおよそ以下の手順で処理されます。

  • クライアントは、実行要求用キューに要求を送信し、実行結果用キューの監視を開始する。
  • マネージャは、実行要求キューを受信し、スクリプトを実行する。
  • スクリプトが終了したら、マネージャは実行結果用キューに結果を送信する。
  • クライアントは実行結果を取得し、終了する。

ScriptRunner for AmazonSQS 実行イメージ



ScriptRunnerSQSから連携スクリプトを起動する

それでは実際にスクリプトを起動してみましょう。
最初にAmazon SQSのキューを取得する必要がありますが、この手順は省略します。

連携サーバーの設定

WebStudioにログインし、コントロールパネル=>ScriptRunner for AmazonSQS 設定を開きます。

WebStudio 設定

ScriptRunnerSQS for AmazonSQSを有効化し、
クレデンシャル、キューの情報を入力して「接続テスト」ボタンを押下します。
接続に成功したら、「適用」ボタンを押下して設定を保存します。

続いて、スクリプト作成・サービス登録を行います。
今回は、10分待機した後に応答コード9999を返すスクリプトを作成しました。

サンプルのスクリプト


リクエスト内容の設定

ScriptRunner for AmazonSQS クライアントが読み込むファイルをxml形式で記述します。
なお、タイムアウトのデフォルト値は3600秒(1時間)となりますが、設定ファイルで指定することが可能です。

client設定

実行

コマンドプロンプトからクライアントを起動します。引数に、先ほど記述した設定ファイルのパスを指定します。
10分経過後、期待通りの結果が返ってきました。

コマンド実行結果

WebStudioの「マイログ」からも、スクリプトが実行されたことが確認できます。

マイログ

おわりに

タイムアウトはHTTPトリガーにおける大きな課題ですが、ScriptRunnerSQSによって解決できる場面もあるのではないでしょうか。

ScriptRunnerSQSはコマンドラインツールのため、運用監視ツールからの呼び出しも可能です。また、クレデンシャル情報、アカウント情報に関しては、設定ファイルを暗号化して保存することも可能です。

実行クライアントはWindows/Linuxの両方のバージョンを用意しています。
SkyOnDemandユーザーの方には無償で配布しておりますので、お気軽にお問い合わせください。

1 件
     
  • banner
  • banner

関連する記事