外部システムからのアクセスにより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 設定を開きます。
ScriptRunnerSQS for AmazonSQSを有効化し、
クレデンシャル、キューの情報を入力して「接続テスト」ボタンを押下します。
接続に成功したら、「適用」ボタンを押下して設定を保存します。
続いて、スクリプト作成・サービス登録を行います。
今回は、10分待機した後に応答コード9999を返すスクリプトを作成しました。
リクエスト内容の設定
ScriptRunner for AmazonSQS クライアントが読み込むファイルをxml形式で記述します。
なお、タイムアウトのデフォルト値は3600秒(1時間)となりますが、設定ファイルで指定することが可能です。
実行
コマンドプロンプトからクライアントを起動します。引数に、先ほど記述した設定ファイルのパスを指定します。
10分経過後、期待通りの結果が返ってきました。
WebStudioの「マイログ」からも、スクリプトが実行されたことが確認できます。
おわりに
タイムアウトはHTTPトリガーにおける大きな課題ですが、ScriptRunnerSQSによって解決できる場面もあるのではないでしょうか。
ScriptRunnerSQSはコマンドラインツールのため、運用監視ツールからの呼び出しも可能です。また、クレデンシャル情報、アカウント情報に関しては、設定ファイルを暗号化して保存することも可能です。
実行クライアントはWindows/Linuxの両方のバージョンを用意しています。
SkyOnDemandユーザーの方には無償で配布しておりますので、お気軽にお問い合わせください。