さくらのクラウドでつくるワークフロー: Workflowsをやってみよう(2) 外部API呼び出しと、ワークフローのAPIによる起動

はじめに
本連載では、さくらのクラウドの新サービス「Workflows」を使ってワークフローを作成する方法を紹介しています。前回の記事ではさくらのクラウドのWorkflowsの基本機能を見てきました。今日は第二弾として以下の2つを見ていきます。
- ワークフロー内部での外部API呼び出し
- ワークフローのAPIによる起動
ワークフロー内部での外部API呼び出し
https://manual.sakura.ad.jp/cloud/appliance/workflows/reference-call.html
上記リンク先が公式ドキュメントとなっています。call
ステップの中でhttpエンドポイントに対して以下のオペレーションが可能となっています。
- get
- post
- put
- delete
- patch
その他のオペレーションとしては以下が用意されています。
- sakuraCloud : さくらのクラウドAPIを呼び出します。
- sys :
sleep
,sleep until
により処理を一時停止させます。例えば、ある程度時間のかかる処理を外部API呼び出しで行った場合、処理を待って再開させる、などのケースに用います。 - feed : 外部からhttp.getしたxmlデータを
parse
によりJSONへ変換します。
今日はhttp.get
, http.post
を見ていきます。
さっそくやってみる
まずは Request Catcher
というサイトを使ってテスト用RESTエンドポイントを作成します。登録不要でsakuraworkflows
と入力して Get started
ボタンをクリックするだけです。
次に前回作成したワークフローのRunbookを以下に置き換えます。
meta:
description: サンプルワークフロー(HTTP POST)
args:
sample:
type: number
description: サンプル引数
steps:
calc:
assign:
doubled: ${args.sample * 2}
post:
call: http.post
args:
url: ${"https://sakuraworkflows.requestcatcher.com/"} # 任意に変更可
timeout: 10
headers:
"Content-Type": application/json
body:
sample: ${args.sample}
doubled: ${doubled}
note: "sent from Sakura Cloud Workflows"
result: resp
result:
return: ${resp.statusCode}
ワークフローのコンソールでリビジョンを作成
をクリックします。
上記のyaml
を貼り付けて保存
をクリックします。リビジョンは自動で採番されていきますので指定は行わなくても問題ありません。
次に 最新のリビジョンで実行
をクリックすれば実行されます。
実行結果としてHTTP Statusコードの200
、つまりpost
成功が戻ってきています。
Request Catcher 側でも以下の通りworkflowsから値がpostされていることがわかります。
ワークフローのAPIによる起動
では次に作成したワークフローをAPI経由で起動します。下記のドキュメントも参考にしてください。
さくらのクラウド API キーの発行
まずさくらのクラウドのコントロールパネル左ペインから APIキー
を選択し APIキーの作成
をクリックします。
アクセスレベルは アクセス不可
以外を選択し ワークフロー
にチェックを付けて作成
をクリックします。
画面に表示されるアクセストークン
とアクセストークンシークレット
を手元にメモしておきます。
テスト環境で環境変数の設定
ZONE=tk1b
BASE="https://secure.sakura.ad.jp/cloud/zone/${ZONE}/api/workflow/1.0"
TOKEN="1b028010-9169-42c9-xxxx-4b39db061750"
SECRET="09xX6xaJm5jeICSjtTRsLlxxxxpMbaa03zcIdeYyqAuVHemON6rvXZsJpBQcyzpf"
WorkflowsのAPIはcurl経由で実行を行います。curlコマンドをシンプルに保つために上記4つの環境変数を設定しておきます。TOKEN
,SECRET
は先ほど発行したAPIキーのそれぞれの値をセットします。
次に設定済ワークフローの一覧を取得します。
curl -s -u "$TOKEN:$SECRET" \
-X GET -H 'Content-Type: application/json' -H 'X-Requested-With: XMLHttpRequest' \
"$BASE/workflows/" | jq '.Workflows[] | {id: .Id, name: .Name}'
{
"id": "113702027864",
"name": "sample"
}
{
"id": "113702027501",
"name": "条件テスト"
}
{
"id": "113702027485",
"name": "並列テスト"
}
sample
のワークフローIDを環境変数にセットします。
WORKFLOW_ID="取得したID"
ワークフローの引数用JSONを作成します。
ARGS_JSON=$(jq -c -n --argjson v 123 '{sample:$v}')
jq -n --arg args "$ARGS_JSON" '{Args:$args}' > exec_body.json
いよいよ実行です。
curl -s -u "$TOKEN:$SECRET" \
-X POST -H 'Content-Type: application/json' -H 'X-Requested-With: XMLHttpRequest' \
-d @exec_body.json \
"$BASE/workflows/${WORKFLOW_ID}/executions" | tee exec_resp.json
実行履歴は以下のコマンドで取得可能です。
EXEC_ID=$(jq -r '.Execution.ExecutionId' exec_resp.json)
curl -s -u "$TOKEN:$SECRET" \
-X GET -H 'Content-Type: application/json' -H 'X-Requested-With: XMLHttpRequest' \
"$BASE/workflows/${WORKFLOW_ID}/executions/${EXEC_ID}/exec_history" | jq .
コンソールを見ると実行履歴が増えていることがわかります。
まとめ
今回は作成したワークフローからの外部API呼出しと、ワークフローそのもののAPI呼び出しを試してみました。第3回はAPIキーと対をなすサービスプリンシパルという新しい認証認可メカニズムを用いたワークフローの実行を見ていきます。