Workflows β APIドキュメント (1.0.0)

Download OpenAPI specification:Download


「Workflows」が提供するAPIの利用方法とサンプルを公開しております。

基本的な使い方

APIキーの利用

認証には「APIキー」が利用できます。事前にキーを発行しておきます。 APIキーは「ユーザーID」「パスワード」に相当する「トークン」と呼ばれる認証情報で構成されています。

項目名 APIキー発行時の項目名 このドキュメント内での例
ユーザーID アクセストークン(UUID) 01234567-89ab-cdef-0123-456789abcdef
パスワード アクセストークンシークレット SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM

出力結果と応答コード(HTTPステータスコード)

APIからの結果は、「応答コード(HTTPステータスコード)」と、「JSON形式(UTF-8)の結果」として出力されます。

応答コードは、リクエストが成功したのか、失敗したのか大まかな情報を判断することができるもので、例えば失敗したときには、なぜこのような結果になったのかなど、具体的な情報は応答コードと主に返された本文を見ることで把握することができます。

結果 応答コード/status レスポンス
成功(要求を受け付けた) 2xx "is_ok": true
失敗(要求が受け付けられなかった) 4xx, 5xx "is_fatal": true
# 出力結果サンプル(成功時)
{
  "is_ok": true,
  "Total": 0,
  "From": 0,
  "Count": 0,
  "Log": []
}
# 出力結果サンプル(失敗時)
{
  "is_fatal": true,
  "serial": "e0f36f2b4e056e2aefc3bc1242b36f1e",
  "status": "500 Internal Server Error",
  "error_code": "internal_server_error",
  "error_msg": "サーバ内部エラーが発生しました。このエラーが繰り返し発生する場合は、メンテナンス情報、サポートサイトをご確認ください。"
}

Runbookのコードサンプル

エラトステネスの篩

meta:
  description: エラトステネスの篩
args:
  maxNumber:
    type: number
    description: 素数を求める最大の数
steps:
  setup:
    assign:
      sieve: ${array.fill(array.range(args.maxNumber), true)}
      primes: []
  initial:
    assign:
      _a: ${array.set(sieve, 0, false)}
      _b: ${array.set(sieve, 1, false)}
  loop:
    for:
      in: ${array.range(2, math.ceil(math.sqrt(args.maxNumber)))}
      as: index
      steps:
        if:
          switch:
            # falseだったら飛ばす
            - condition: ${sieve[index] == false}
              next: continue
            # trueだったら素数
            - condition: ${sieve[index] != false}
              steps:
                # 素数の倍数を篩にかける
                updateSieve:
                  for:
                    in: ${array.range(index * 2, args.maxNumber, index)}
                    as: n
                    steps:
                      set:
                        assign:
                          _a: ${array.set(sieve, n, false)}
        continue:
  printPrimes:
    for:
      in: ${array.range(2, args.maxNumber)}
      as: index
      steps:
        if:
          switch:
            - condition: ${sieve[index] == true}
              steps:
                push:
                  assign:
                    _a: ${array.push(primes, index)}
                log:
                  assign:
                    log: '${"素数: " + index}'
  done:
    return: ${primes}

住所検索

meta:
  description: 住所検索
args:
  address:
    type: string
    description: "住所を取得するための郵便番号"
steps:
  set:
    switch:
      - condition: ${args.address}
        steps:
          x:
            assign:
              address: ${args.address}
      - condition: ${!args.address}
        steps:
          x:
            assign:
              address: "1000001"
  get:
    call: http.get
    args:
      url: ${"https://zipcloud.ibsnet.co.jp/api/search"}
      headers:
        Accept: application/json
      query:
        zipcode: ${address}
    result: atomBody
  parse:
    assign:
      jsonData: ${json.decode(atomBody.body)}
  done:
    return: ${jsonData.results[0].address1 + jsonData.results[0].address2 + jsonData.results[0].address3}

利用例

上記で取得したユーザーIDトークンを利用してAPIの利用が可能になります。

ワークフローの作成

ワークフローを作成するには、以下のような入力を行います。

ワークフロー作成前にRunbookの作成が必要になります。 詳しくは構文リファレンスを参照してください。

Runbookをパラメータに設定する

JSON内にYAMLを格納するために必要なこと

  • Runbookの改行を \n に変換する。
  • YAML内にあるダブルクォーテーションをエスケープする。 convertYaml.sh
#!/bin/bash

# Runbookファイルを読み込み、文字列に変換
# 改行は\nに変換し、ダブルクォーテーションはエスケープする
# gsedはMacのsedで改行を含む文字列を扱うために使用
# Mac環境でのみ動作確認済み

# runbook_to_string 関数を定義
function runbook_to_string() {
    local file_path="$1"
    local runbook

    if [ ! -f "$file_path" ]; then
        echo "Error: File not found." >&2
        return 1
    fi

    runbook=$(gsed ':a;N;$!ba;s/\n/\\n/g' "$file_path" | gsed 's/"/\\"/g')
    echo "$runbook"
}

# コマンドラインからの引数をチェック
if [ $# -eq 0 ]; then
    echo "Usage: $0 <file_path>"
    exit 1
fi

# 引数からファイルパスを取得
file_path="$1"

# runbook_to_string 関数を呼び出し、結果を表示
runbook_to_string "$file_path"

上記で作成したbashに実行権限を付け、yamlをリクエストパラメータで使えるよう文字列に変換します。

chmod +x convertYaml.sh
./convertYaml.sh sample.yaml

ワークフローの作成

# 入力サンプル
vi request_body.json

cat request_body.json
{
    "Runbook": "[上記bashで出力した文字列]",
    "Name": "Workflowの名前",
    "Description": "ワークフローの説明",
    "Publish": true,
    "Logging": true,
}

curl -u '01234567-89ab-cdef-0123-456789abcdef:sampletokensampletokensampletoke' \
     -X POST \
     -H 'Content-Type: application/json' \
     -H 'X-Requested-With: XMLHttpRequest' \
     -d '@request_body.json' \
     https://secure.sakura.ad.jp/cloud-test/zone/is1z/api/workflow/1.0/workflows/ | jq .
{
  "is_ok": true,
  "Workflow": {
    "Id": "uhqybrbehx8lnpo9x8hd8ikt", <- workflowID
    "Name": "Workflowの名前",
    "Description": "ワークフローの説明",
    "Publish": true,
    "Logging": true,
    "Tags": [
      {
        "Name": null
      }
    ],
    "CreatedAt": "2025-01-30T17:54:28.710Z",
    "UpdatedAt": "2025-01-30T17:54:28.710Z"
  }
}

ワークフローの実行

ワークフローを実行するには、以下のような入力を行います。

urlには上記で取得したworkflowIDを使います。

# 入力サンプル
vi request_body.json

cat request_body.json
{}

curl -u '01234567-89ab-cdef-0123-456789abcdef:sampletokensampletokensampletoke' \
     -X POST \
     -H 'Content-Type: application/json' \
     -H 'X-Requested-With: XMLHttpRequest' \
     -d '@request_body.json' \
     https://secure.sakura.ad.jp/cloud-test/zone/is1z/api/workflow/1.0/workflows/[workflowId]/executions | jq .
{
  "is_ok": true,
  "Execution": {
    "ExecutionId": "bcohwmnwlhpkhowhn80k3ird", <- executionId
    "Name": "Workflowの名前",
    "Workflow": {
      "Id": "uhqybrbehx8lnpo9x8hd8ikt", <- workflowID
      "Name": "Workflowの名前",
      "Description": "Workflowの説明",
      "Publish": true,
      "Logging": true,
      "Tags": [
        {
          "Name": null
        }
      ],
      "CreatedAt": "2025-01-30T17:54:28.710Z",
      "UpdatedAt": "2025-01-30T17:54:28.710Z"
    },
    "Status": "Queued",
    "Revision": 1,
    "RevisionAlias": "string",
    "Args": "null",
    "Result": "null",
    "Error": "null",
    "CreatedAt": "2025-01-30T18:09:34.810Z",
    "UpdatedAt": "2025-01-30T18:09:34.810Z"
  }
}

ワークフローの実行の履歴を取得

ワークフローの実行の履歴を取得するには、以下のような入力を行います。

urlには上記で取得したworkflowIDexecutionIdを使います。

# 入力サンプル
curl -u '01234567-89ab-cdef-0123-456789abcdef:sampletokensampletokensampletoke' \
     -X GET \
     -H 'Content-Type: application/json' \
     -H 'X-Requested-With: XMLHttpRequest' \
     https://secure.sakura.ad.jp/cloud-test/zone/is1z/api/workflow/1.0/workflows/[workflowId]/executions/[executionId]/exec_history | jq .

ワークフローの管理

ワークフローを作成する

ワークフローを作成する

Request Body schema: application/json
Name
required
string [ 1 .. 64 ] characters ^[a-zA-Z0-9_\-ーぁ-んァ-ヶ一-龠]+$
Description
string [ 1 .. 1024 ] characters
Runbook
required
string
Publish
required
boolean
Logging
required
boolean
Array of objects
RevisionAlias
string [ 1 .. 64 ] characters ^[a-zA-Z0-9_\-ーぁ-んァ-ヶ一-龠]+$
ServicePrincipalId
string^[0-9]{12}$

Responses

Request samples

Content type
application/json
{
  • "Name": "sampleString",
  • "Description": "sampleString",
  • "Runbook": "sampleString",
  • "Publish": true,
  • "Logging": true,
  • "Tags": [
    ],
  • "RevisionAlias": "sampleString",
  • "ServicePrincipalId": "sampleString"
}

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Workflow": {
    }
}

ワークフローの一覧を取得する

ワークフローの一覧を取得する

query Parameters
Page
number >= 1
Default: 1
Example: Page=1

ページ番号

PageLimit
number [ 5 .. 500 ]
Default: 20
Example: PageLimit=20

1ページあたりのリソースの取得数

SortBy
any
Enum: "createdAt" "updatedAt" "id"
Example: SortBy=createdAt

Workflowのソートに利用するプロパティ

Order
any
Enum: "asc" "desc"
Example: Order=asc

ソートの順序

Published
boolean
Example: Published=true

公開状態の絞り込み

Responses

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Total": 123,
  • "From": 123,
  • "Count": 123,
  • "Workflows": [
    ]
}

ワークフローを取得する

ワークフローを取得する

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

Responses

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Workflow": {
    }
}

ワークフローを更新する

ワークフローを更新する

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

Request Body schema: application/json
Name
string [ 1 .. 64 ] characters ^[a-zA-Z0-9_\-ーぁ-んァ-ヶ一-龠]+$
Description
string [ 1 .. 1024 ] characters
Publish
boolean
Logging
boolean
Array of objects

Responses

Request samples

Content type
application/json
{
  • "Name": "sampleString",
  • "Description": "sampleString",
  • "Publish": true,
  • "Logging": true,
  • "Tags": [
    ]
}

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Workflow": {
    }
}

ワークフローを削除する

ワークフローを削除する

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

Responses

Response samples

Content type
application/json
{
  • "is_ok": true
}

ワークフローのリビジョンを追加する

ワークフローのリビジョンを追加する

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

Request Body schema: application/json
Runbook
required
string
RevisionAlias
string [ 1 .. 64 ] characters ^[a-zA-Z0-9_\-ーぁ-んァ-ヶ一-龠]+$

Responses

Request samples

Content type
application/json
{
  • "Runbook": "sampleString",
  • "RevisionAlias": "sampleString"
}

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Revision": {
    }
}

ワークフローのリビジョンの一覧を取得する

ワークフローのリビジョンの一覧を取得する

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

query Parameters
Page
number >= 1
Default: 1
Example: Page=1

ページ番号

PageLimit
number [ 5 .. 500 ]
Default: 20
Example: PageLimit=20

1ページあたりのリソースの取得数

SortBy
any
Enum: "createdAt" "updatedAt" "id"
Example: SortBy=createdAt

Workflowのソートに利用するプロパティ

Order
any
Enum: "asc" "desc"
Example: Order=asc

ソートの順序

Published
boolean
Example: Published=true

公開状態の絞り込み

Responses

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Total": 123,
  • "From": 123,
  • "Count": 123,
  • "Revisions": [
    ]
}

ワークフローのリビジョンを取得する

ワークフローのリビジョンを取得する

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

revisionId
required
number
Example: 123

Revision ID

Responses

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Revision": {
    }
}

ワークフローのリビジョンエイリアスを更新する

ワークフローのリビジョンエイリアスを更新する

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

revisionId
required
number
Example: 123

Revision ID

Request Body schema: application/json
RevisionAlias
required
string [ 1 .. 64 ] characters ^[a-zA-Z0-9_\-ーぁ-んァ-ヶ一-龠]+$

Responses

Request samples

Content type
application/json
{
  • "RevisionAlias": "sampleString"
}

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Revision": {
    }
}

ワークフローのリビジョンエイリアスを削除する

ワークフローのリビジョンエイリアスを削除する

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

revisionId
required
number
Example: 123

Revision ID

Responses

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Workflow": {
    }
}

ワークフローの実行

ワークフローを実行する

ワークフローを実行する

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

Request Body schema: application/json
RevisionId
number
RevisionAlias
string [ 1 .. 64 ] characters ^[a-zA-Z0-9_\-ーぁ-んァ-ヶ一-龠]+$
Args
string [ 1 .. 65536 ] characters
Name
string [ 1 .. 64 ] characters ^[a-zA-Z0-9_\-ーぁ-んァ-ヶ一-龠]+$

Responses

Request samples

Content type
application/json
{
  • "RevisionId": 123,
  • "RevisionAlias": "sampleString",
  • "Args": "sampleString",
  • "Name": "sampleString"
}

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Execution": {
    }
}

ワークフローの実行の一覧を取得する

ワークフローの実行の一覧を取得する

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

query Parameters
Page
number >= 1
Default: 1
Example: Page=1

ページ番号

PageLimit
number [ 5 .. 500 ]
Default: 20
Example: PageLimit=20

1ページあたりのリソースの取得数

Order
any
Enum: "asc" "desc"
Example: Order=asc

ソートの順序

Responses

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Total": 123,
  • "From": 123,
  • "Count": 123,
  • "Executions": [
    ]
}

ワークフローの実行をキャンセルする

ワークフローの実行をキャンセルする

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

executionId
required
string [ 1 .. 36 ] characters
Example: sampleString

Execution ID

Responses

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Execution": {
    }
}

ワークフローの実行を取得する

ワークフローの実行を取得する

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

executionId
required
string [ 1 .. 36 ] characters
Example: sampleString

Execution ID

Responses

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Execution": {
    }
}

ワークフローの実行を削除する

ワークフローの実行を削除する

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

executionId
required
string [ 1 .. 36 ] characters
Example: sampleString

Execution ID

Responses

Response samples

Content type
application/json
{
  • "is_ok": true
}

ワークフローの実行履歴を取得する

ワークフローの実行履歴を取得する

path Parameters
id
required
string [ 1 .. 36 ] characters
Example: sampleString

Workflow ID

executionId
required
string [ 1 .. 36 ] characters
Example: sampleString

Execution ID

query Parameters
Page
number >= 1
Default: 1
Example: Page=1

ページ番号

PageLimit
number [ 5 .. 500 ]
Default: 20
Example: PageLimit=20

1ページあたりのリソースの取得数

SortOrder
any
Enum: "asc" "desc"
Example: SortOrder=asc

ソートの順序

Responses

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Total": 123,
  • "From": 123,
  • "Count": 123,
  • "Histories": [
    ]
}

エラーコード

認証・認可の不正:A-xxxx

エラーコード 説明 メッセージ
A-0000 (汎用) 認証に失敗した Authentication failed.
A-0010 認証ヘッダーがなかった No HTTP request header X-Sakura-Internal-Credential.
A-0020 システム内部のエラー X-Sakura-Internal-Credential header decoding failed.
A-0030 認証JSONのバリデーションに失敗した Authentication JSON validation failed.
A-0040 auth_methodが不正だった The auth_method must not be 0.
A-1000 (汎用) 認可に失敗した Authorization failed.
A-1010 課金状態に問題があるのでリソースを作成できない Unable to create resource due to billing status issues. operation_penalty = %d.
A-1020 アカウントIDが異なるのでリソースにアクセスできない Unable to access resources because accountid is different.

さくらインターネットの運用ツールとの連携時のエラー:S-xxxx

エラーコード 説明 メッセージ
S-1001 契約の作成に失敗した Failed to create a contract.
S-1002 契約の廃止に失敗した Failed to cancel the contract.
S-2001 サービスプリンシパルの登録に失敗した Failed to register service principal.
S-2002 サービスプリンシパルの削除に失敗した Failed to delete service principal.

URLの不正:U-xxxx

エラーコード 説明 メッセージ
U-0000 (汎用) リソースが見つからない Resource not found.
U-0010 ワークフローが見つからない Workflow not found.
U-0020 リビジョンが見つからない Revision not found.
U-0030 実行が見つからない Execution not found.

値の不正:P-xxxx

エラーコード 説明 メッセージ
P-0000 (汎用) リクエストBodyの処理/Validationに失敗した Bad request error
P-0001 (汎用) クエリ(?xxx)のバリデーションに失敗した Bad URL query error
P-0002 (汎用) パスのバリデーションに失敗した Bad path parameter error
P-1010 RunbookのParseに失敗した RunbookValidationError
P-1011 Runbookの実行に失敗した Runbook Runtime Error
P-1012 ブロックされているURLにアクセスしようとした This URL is blocked

操作の不正:C-xxxx

エラーコード 説明 メッセージ
C-0000 (汎用) 操作が不正だった Operation was incorrect.
C-0010 revisionAliasが重複している Duplicate revisionAlias
C-0020 指定されたrevisionまたはrevisionAliasが正しくない The specified revision or revisionAlias is incorrect.
C-0030 このワークフローは実行できない This workflow is not executable.
C-0040 このワークフローは削除できない This workflow cannot be deleted.
C-0050 この実行はキャンセルできない This execution cannot be canceled.
C-0060 この実行は削除できない This execution cannot be deleted.

リソース上限超過:Q-xxxx

エラーコード 説明 メッセージ
Q-1001 1つのSwitchでの最大分岐数を超えている The number of branches on the Switch has exceeded.
Q-1002 1つのRunbookでの最大ステップ数を超えている Runbook step length has exceeded.
Q-1003 1つのWorkflowでの最大分岐数を超えている The number of branches has exceeded.
Q-1004 1つのWorkflowでの最大並列ネスト数を超えている The number of parallel nest level has exceeded.
Q-1005 RunbookのYAMLでの最大サイズを超えている Runbook size has exceeded.
Q-1006 Runbook内に書く式の最大長を超えている Expression size has exceeded.
Q-1007 HTTP レスポンスのサイズを超えている HTTP response size has exceeded.
Q-1008 変数、StackTraceなどを含むWflExec.stateの最大サイズを超えている Workflow execution state size has exceeded.
Q-1009 Workflowの最大実行可能時間を超過した Workflow execution time in secs has exceeded.
Q-1010 Workflowの最大実行可能ステップ数を超過した The maximum number of Workflow executable steps has been exceeded.
Q-2001 最大ワークフロー数を超えている The number of workflows has exceeded.
Q-2002 最大同時実行数を超えている The number of concurrent executions has exceeded.
Q-0010 実行メモリの上限を超過した Execution memory limit exceeded.
Q-0020 実行時間の上限を超過した Execution time limit exceeded
Q-0030 並列処理の上限を超過した Parallel processing limit exceeded

システムエラー(一時的):T-xxxx

エラーコード 説明 メッセージ
T-0000 (汎用) 一時的なシステムエラー Temporary system error
T-1000 (汎用) 一時的なDBエラー Temporary DB error
T-1001 DBがデッドロックした Service Unavailable: deadlock found. please try again.

フレームワークエラー:H-xxxx

エラーコード 説明 メッセージ
H-0000 (汎用) 処理中に予期しないエラー

システムエラー(恒久的):F-xxxx

エラーコード 説明 メッセージ
F-0000 (汎用) 恒久的なシステムエラー Permanent system error
F-0001 現在この操作には対応していない Not implemented error
F-0002 システム内部で予期しないエラー Internal Inconsistency Error
F-0003 Ipv6未サポートエラー IPv6 is not supported.
F-1000 システム内部のエラー The environment variable is not defined.
F-1001 システム内部のエラー The environment variable is not a number.
F-1101 価格マスタが見つからない Price master not found for the specified date.
F-1102 システム内部のエラー Price master format is invalid.
F-2000 (汎用) 恒久的なDBエラー Permanent DB error
F-2010 DB接続に失敗した DB connection failed.