さくらのクラウド さくらのクラウド API ポータル クラウドマニュアルへ

Workflows APIドキュメント (1.1.0)

Download OpenAPI specification:Download OpenAPI Spec (YAML)Download OpenAPI Spec (JSON)


「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": false
# 出力結果サンプル(成功時)
{
  "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": "サーバ内部エラーが発生しました。このエラーが繰り返し発生する場合は、メンテナンス情報、サポートサイトをご確認ください。"
}
# 出力結果サンプル(ワークフロー内で失敗時)
{
  "is_ok": false,
  "Code": "H-0000",
  "Message": "Malformed JSON in request body",
  "Cause": []
}

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の利用が可能になります。

プランの設定

プランを設定しワークフローを利用するには、以下のような入力を行います。

プラン一覧の確認

# 入力サンプル
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/zone/tk1b/api/workflow/1.0/plans | jq .
{
  "is_ok": true,
  "Plans": [
    {
      "id": 1,
      "name": "200Kプラン",
      "grade": 200,
      "basePrice": 4000,
      "includedSteps": 200000,
      "overageStepUnit": 1000,
      "overagePricePerUnit": 80,
      ...
    },
    {
      "id": 2,
      "name": "600Kプラン",
      "grade": 300,
      "basePrice": 10000,
      "includedSteps": 600000,
      "overageStepUnit": 1000,
      "overagePricePerUnit": 80,
      ...
    }
  ],
  "TaxRate": 10
}

プランの設定

上記で取得した任意のプランID(Plans[].id)を利用して、プランを設定します。

# 入力サンプル
curl -u '01234567-89ab-cdef-0123-456789abcdef:sampletokensampletokensampletoke' \
     -X POST \
     -H 'Content-Type: application/json' \
     -H 'X-Requested-With: XMLHttpRequest' \
     -d '{"PlanId": 1}' \
     https://secure.sakura.ad.jp/cloud/zone/tk1b/api/workflow/1.0/subscription | jq .

上記プラン設定完了後、ワークフローが利用可能になります。

ワークフローの作成

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

ワークフロー作成前に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/zone/tk1b/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/zone/tk1b/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/zone/tk1b/api/workflow/1.0/workflows/[workflowId]/executions/[executionId]/exec_history | jq .

ワークフローの管理

ワークフローを作成する

ワークフローを作成する

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
Name
required
string [ 1 .. 64 ] characters ^[a-zA-Z0-9_\-ーぁ-んァ-ヶ一-龠]+$
Description
string [ 0 .. 1024 ] characters
Runbook
required
string
Publish
required
boolean
Logging
required
boolean
Array of objects
RevisionAlias
string [ 0 .. 64 ] characters ^[a-zA-Z0-9_\-ーぁ-んァ-ヶ一-龠]*$
string or number
ConcurrencyMode
string
Enum: "parallel" "lock" "queue"

Responses

Request samples

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

Response samples

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

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

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

Authorizations:
ApiKeyAuth
query Parameters
Page
integer >= 1
Default: 1
Example: Page=1

ページ番号

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

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

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

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

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

ソートの順序

Published
boolean
Example: Published=true

公開状態の絞り込み

Name
string [ 1 .. 64 ] characters ^[a-zA-Z0-9_\-ーぁ-んァ-ヶ一-龠]+$
Example: Name=sampleString

ワークフロー名の絞り込み

NameMatchType
string
Enum: "partial" "prefix"
Example: NameMatchType=partial

ワークフロー名の絞り込み方法

Responses

Response samples

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

ワークフローのサジェストを取得する

ワークフローのサジェストを取得する

Authorizations:
ApiKeyAuth
query Parameters
Name
required
string [ 1 .. 64 ] characters ^[a-zA-Z0-9_\-ーぁ-んァ-ヶ一-龠]+$
Example: Name=sampleString

ワークフロー名の絞り込み

Page
integer >= 1
Default: 1
Example: Page=1

ページ番号

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

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

SortBy
string
Enum: "name" "count"
Example: SortBy=name

サジェストのソートに利用するプロパティ

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

ソートの順序

Responses

Response samples

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

ワークフローを取得する

ワークフローを取得する

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

Workflow ID

Responses

Response samples

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

ワークフローを更新する

ワークフローを更新する

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

Workflow ID

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

Responses

Request samples

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

Response samples

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

ワークフローを削除する

ワークフローを削除する

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

Workflow ID

Responses

Response samples

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

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

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

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

Workflow ID

Request Body schema: application/json
required
Runbook
required
string
RevisionAlias
string [ 0 .. 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": {
    }
}

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

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

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

Workflow ID

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

ページ番号

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

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

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

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

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

ソートの順序

Published
boolean
Example: Published=true

公開状態の絞り込み

Responses

Response samples

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

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

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

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

Workflow ID

revisionId
required
integer
Example: 123

Revision ID

Responses

Response samples

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

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

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

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

Workflow ID

revisionId
required
integer
Example: 123

Revision ID

Request Body schema: application/json
required
RevisionAlias
required
string [ 0 .. 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": {
    }
}

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

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

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

Workflow ID

revisionId
required
integer
Example: 123

Revision ID

Responses

Response samples

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

ワークフローの実行

ワークフローを実行する

ワークフローを実行する

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

Workflow ID

Request Body schema: application/json
RevisionId
integer
RevisionAlias
string [ 0 .. 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": {
    }
}

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

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

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

Workflow ID

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

ページ番号

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

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

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

ソートの順序

Responses

Response samples

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

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

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

Authorizations:
ApiKeyAuth
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": {
    }
}

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

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

Authorizations:
ApiKeyAuth
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": {
    }
}

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

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

Authorizations:
ApiKeyAuth
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
}

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

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

Authorizations:
ApiKeyAuth
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
integer >= 1
Default: 1
Example: Page=1

ページ番号

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

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

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

ソートの順序

Responses

Response samples

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

プラン

プラン一覧を取得する

現在契約可能な Workflows の料金プランの一覧を取得します。

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "is_ok": true,
  • "Plans": [
    ],
  • "TaxRate": 10
}

サブスクリプション

ワークフローの課金プランの取得をする

ワークフローの課金プランの取得をする

Authorizations:
ApiKeyAuth

Responses

Response samples

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

ワークフローの課金プランの設定をする

ワークフローの課金プランの設定をする

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
PlanId
required
integer >= 1

Responses

Request samples

Content type
application/json
{
  • "PlanId": 123
}

Response samples

Content type
application/json
{
  • "is_ok": false,
  • "Message": "Bad Request"
}

ワークフローの課金プランの削除をする

ワークフローの課金プランの削除をする

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "is_ok": false,
  • "Message": "Bad Request"
}