{
  "components": {
    "schemas": {
      "ApplicationCurrentContainer": {
        "properties": {
          "applicationID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationID"
              }
            ],
            "description": "アプリケーションID"
          },
          "applicationVersion": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationVersionNumber"
              }
            ],
            "description": "アプリケーションのバージョン"
          },
          "cpuUsagePercent": {
            "description": "コンテナのCPU使用率（単位：%）",
            "format": "float",
            "type": "number"
          },
          "id": {
            "description": "コンテナID",
            "type": "string"
          },
          "image": {
            "description": "イメージ名",
            "type": "string"
          },
          "state": {
            "description": "コンテナのステート（created、running、restarting、removing、paused、exited、dead のうちいずれか）",
            "type": "string"
          },
          "status": {
            "description": "コンテナのステータス",
            "type": "string"
          }
        },
        "required": [
          "id",
          "image",
          "state",
          "status",
          "cpuUsagePercent",
          "applicationID",
          "applicationVersion"
        ],
        "type": "object"
      },
      "ApplicationCurrentContainers": {
        "properties": {
          "collectedAtSec": {
            "description": "状態回収日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          },
          "containers": {
            "items": {
              "$ref": "#/components/schemas/ApplicationCurrentContainer"
            },
            "type": "array"
          }
        },
        "required": [
          "collectedAtSec",
          "containers"
        ],
        "type": "object"
      },
      "ApplicationDesiredContainer": {
        "properties": {
          "applicationID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationID"
              }
            ],
            "description": "デプロイするアプリケーションID"
          },
          "applicationVersion": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationVersionNumber"
              }
            ],
            "description": "デプロイするアプリケーションのバージョン"
          },
          "cpuMillis": {
            "description": "割り当てるCPU（単位：mCPU）",
            "format": "int64",
            "type": "integer"
          },
          "image": {
            "description": "デプロイするコンテナのイメージ名",
            "type": "string"
          },
          "memoryMB": {
            "description": "割り当てるメモリ（単位：MB）",
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "applicationID",
          "applicationVersion",
          "cpuMillis",
          "memoryMB",
          "image"
        ],
        "type": "object"
      },
      "ApplicationDesiredContainers": {
        "properties": {
          "containers": {
            "items": {
              "$ref": "#/components/schemas/ApplicationDesiredContainer"
            },
            "type": "array"
          }
        },
        "required": [
          "containers"
        ],
        "type": "object"
      },
      "ApplicationID": {
        "format": "uuid",
        "type": "string"
      },
      "ApplicationIdentifier": {
        "properties": {
          "applicationID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationID"
              }
            ],
            "description": "ID",
            "readOnly": true
          }
        },
        "required": [
          "applicationID"
        ],
        "type": "object"
      },
      "ApplicationVersionIdentifier": {
        "properties": {
          "version": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationVersionNumber"
              }
            ],
            "readOnly": true
          }
        },
        "required": [
          "version"
        ],
        "type": "object"
      },
      "ApplicationVersionNumber": {
        "example": 3,
        "format": "int32",
        "minimum": 1,
        "type": "integer"
      },
      "ApplicationVersionSummary": {
        "properties": {
          "activeNodeCount": {
            "description": "現在動いているノードの数",
            "format": "int64",
            "readOnly": true,
            "type": "integer"
          },
          "created": {
            "description": "アプリケーションバージョン作成日時：UNIX時間（秒）",
            "format": "unixtime",
            "readOnly": true,
            "type": "integer"
          },
          "image": {
            "example": "nginx:latest",
            "maxLength": 512,
            "type": "string"
          },
          "version": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationVersionNumber"
              }
            ],
            "readOnly": true
          }
        },
        "required": [
          "version",
          "image",
          "activeNodeCount",
          "created"
        ],
        "type": "object"
      },
      "AutoScalingGroupID": {
        "format": "uuid",
        "type": "string"
      },
      "AutoScalingGroupIdentifier": {
        "properties": {
          "autoScalingGroupID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AutoScalingGroupID"
              }
            ],
            "readOnly": true
          }
        },
        "required": [
          "autoScalingGroupID"
        ],
        "type": "object"
      },
      "AutoScalingGroupNodeInterface": {
        "properties": {
          "connectsToLB": {
            "description": "一つのオートスケーリンググループにつき、一つのインターフェースのみがロードバランサ接続対象となる。接続対象になった場合、そのインターフェースに割り当てられた IP アドレスがロードバランサのバックエンドとして登録される。クラスタにロードバランサポートが設定されている場合、一つのインターフェースが true である必要がある。",
            "title": "ロードバランサ接続対象インターフェースかどうか",
            "type": "boolean"
          },
          "defaultGateway": {
            "description": "アップストリームが 'shared' の場合、指定できません。",
            "title": "デフォルトゲートウェイ",
            "type": "string"
          },
          "interfaceIndex": {
            "description": "インターフェース番号。例：eth0→0、eth1→1、eth2→2。0は必須。重複不可。",
            "format": "int16",
            "type": "integer"
          },
          "ipPool": {
            "description": "IPプールは最大20個まで指定可能。アップストリームが 'shared' の場合は指定できません。それ以外の場合は指定必須です。",
            "items": {
              "$ref": "#/components/schemas/IpRange"
            },
            "maxItems": 20,
            "title": "IPアドレスの割り当て範囲",
            "type": "array"
          },
          "netmaskLen": {
            "description": "アップストリームが 'shared' の場合、指定できません。それ以外の場合は指定必須です。",
            "format": "int16",
            "maximum": 29,
            "minimum": 8,
            "title": "ネットマスク長",
            "type": "integer"
          },
          "packetFilterID": {
            "description": "パケットフィルターID",
            "type": "string"
          },
          "upstream": {
            "description": "'shared' にすると共有セグメントに繋がります。ルータ+スイッチ、および共有セグメントにつなげられるのは eth0 のみです。",
            "title": "接続先スイッチ",
            "type": "string"
          }
        },
        "required": [
          "interfaceIndex",
          "upstream",
          "connectsToLB"
        ],
        "type": "object"
      },
      "CertificateID": {
        "example": "13B9EA83-DDB0-4385-9533-3D693A6A310F",
        "format": "uuid",
        "type": "string"
      },
      "CertificateIdentifier": {
        "properties": {
          "certificateID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CertificateID"
              }
            ],
            "description": "証明書ID",
            "readOnly": true
          }
        },
        "required": [
          "certificateID"
        ],
        "type": "object"
      },
      "ClusterID": {
        "description": "クラスタID",
        "example": "13B9EA83-DDB0-4385-9533-3D693A6A310F",
        "format": "uuid",
        "type": "string"
      },
      "ClusterIdentifier": {
        "properties": {
          "clusterID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ClusterID"
              }
            ],
            "readOnly": true
          }
        },
        "required": [
          "clusterID"
        ],
        "type": "object"
      },
      "ClusterLoadBalancerPort": {
        "properties": {
          "port": {
            "description": "外部公開するポート番号。5950-5959は予約されているため指定不可",
            "example": 8080,
            "format": "uint16",
            "maximum": 65535,
            "minimum": 1,
            "type": "integer"
          },
          "protocol": {
            "description": "ポートで扱うプロトコル",
            "enum": [
              "http",
              "https",
              "tcp"
            ],
            "type": "string"
          }
        },
        "required": [
          "port",
          "protocol"
        ],
        "type": "object"
      },
      "ClusterLoadBalancerPortMergePatchCreateOrUpdateReplaceOnly": {
        "properties": {
          "port": {
            "description": "外部公開するポート番号。5950-5959は予約されているため指定不可",
            "example": 8080,
            "format": "uint16",
            "maximum": 65535,
            "minimum": 1,
            "type": "integer"
          },
          "protocol": {
            "description": "ポートで扱うプロトコル",
            "enum": [
              "http",
              "https",
              "tcp"
            ],
            "type": "string"
          }
        },
        "required": [
          "port",
          "protocol"
        ],
        "type": "object"
      },
      "CreateApplicationRequest": {
        "properties": {
          "clusterID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ClusterID"
              }
            ],
            "description": "デプロイ先クラスタ"
          },
          "name": {
            "description": "アプリケーションの名前。クラスタの中ではユニーク。英数字とハイフン、アンダースコアのみ使用可能",
            "example": "bbs",
            "maxLength": 20,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          }
        },
        "required": [
          "name",
          "clusterID"
        ],
        "type": "object"
      },
      "CreateApplicationResponse": {
        "properties": {
          "application": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationIdentifier"
              }
            ],
            "description": "作成されたアプリケーションの情報"
          }
        },
        "required": [
          "application"
        ],
        "type": "object"
      },
      "CreateApplicationVersionRequest": {
        "properties": {
          "cmd": {
            "description": "コンテナ起動時に実行するコマンドと引数",
            "items": {
              "type": "string"
            },
            "maxItems": 20,
            "type": "array"
          },
          "cpu": {
            "example": 500,
            "format": "int64",
            "maximum": 64000,
            "minimum": 100,
            "type": "integer"
          },
          "env": {
            "description": "環境変数",
            "items": {
              "$ref": "#/components/schemas/CreateEnvironmentVariable"
            },
            "maxItems": 50,
            "type": "array"
          },
          "exposedPorts": {
            "description": "アプリケーションが公開するポート番号。同一クラスタ内で、ポートの重複不可。",
            "items": {
              "$ref": "#/components/schemas/ExposedPort"
            },
            "maxItems": 5,
            "type": "array"
          },
          "fixedScale": {
            "format": "int32",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "image": {
            "example": "nginx:latest",
            "maxLength": 512,
            "type": "string"
          },
          "maxScale": {
            "example": 3,
            "format": "int32",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "memory": {
            "example": 1000,
            "format": "int64",
            "maximum": 131072,
            "minimum": 128,
            "type": "integer"
          },
          "minScale": {
            "example": 1,
            "format": "int32",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "registryPassword": {
            "description": "レジストリのパスワード。レスポンスではマスクされる。未設定の場合はnull。",
            "maxLength": 255,
            "nullable": true,
            "type": "string"
          },
          "registryPasswordAction": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RegistryPasswordAction"
              }
            ],
            "description": "レジストリパスワードの設定方法"
          },
          "registryUsername": {
            "description": "レジストリのユーザ名。未設定の場合はnull。",
            "maxLength": 255,
            "nullable": true,
            "type": "string"
          },
          "scaleInThreshold": {
            "example": 30,
            "format": "int32",
            "maximum": 70,
            "minimum": 30,
            "type": "integer"
          },
          "scaleOutThreshold": {
            "example": 95,
            "format": "int32",
            "maximum": 99,
            "minimum": 50,
            "type": "integer"
          },
          "scalingMode": {
            "$ref": "#/components/schemas/ScalingMode"
          }
        },
        "required": [
          "image",
          "cpu",
          "memory",
          "scalingMode",
          "registryUsername",
          "registryPassword",
          "registryPasswordAction",
          "exposedPorts",
          "env"
        ],
        "type": "object"
      },
      "CreateApplicationVersionResponse": {
        "properties": {
          "applicationVersion": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationVersionIdentifier"
              }
            ],
            "description": "作成されたアプリケーションバージョンの情報"
          }
        },
        "required": [
          "applicationVersion"
        ],
        "type": "object"
      },
      "CreateAutoScalingGroupRequest": {
        "properties": {
          "interfaces": {
            "items": {
              "$ref": "#/components/schemas/AutoScalingGroupNodeInterface"
            },
            "maxItems": 5,
            "minItems": 1,
            "title": "ネットワークインターフェース定義",
            "type": "array"
          },
          "maxNodes": {
            "description": "オートスケーリンググループの最大ノード数",
            "format": "int32",
            "maximum": 10,
            "minimum": 1,
            "type": "integer"
          },
          "minNodes": {
            "description": "オートスケーリンググループの最小ノード数",
            "format": "int32",
            "maximum": 10,
            "minimum": 1,
            "type": "integer"
          },
          "name": {
            "description": "オートスケーリンググループの名前。クラスタ内でユニーク。英数字、アンダースコア、ハイフンのみ使用可能",
            "maxLength": 20,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "nameServers": {
            "description": "ネームサーバ設定",
            "items": {
              "$ref": "#/components/schemas/Ipv4"
            },
            "maxItems": 3,
            "minItems": 1,
            "type": "array"
          },
          "workerServiceClassPath": {
            "description": "ワーカノードのサービスクラスパス",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "zone": {
            "description": "オートスケーリンググループのゾーン",
            "type": "string"
          }
        },
        "required": [
          "name",
          "zone",
          "workerServiceClassPath",
          "minNodes",
          "maxNodes",
          "interfaces"
        ],
        "type": "object"
      },
      "CreateAutoScalingGroupResponse": {
        "properties": {
          "autoScalingGroup": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AutoScalingGroupIdentifier"
              }
            ],
            "description": "作成されたオートスケーリンググループの情報"
          }
        },
        "required": [
          "autoScalingGroup"
        ],
        "type": "object"
      },
      "CreateCertificateRequest": {
        "properties": {
          "certificatePem": {
            "description": "証明書のPEM形式の文字列",
            "maxLength": 1000000,
            "type": "string"
          },
          "intermediateCertificatePem": {
            "description": "証明書のチェーン証明書のPEM形式の文字列",
            "maxLength": 1000000,
            "type": "string"
          },
          "name": {
            "description": "証明書の名前。クラスタ内でユニーク。英数字、アンダースコア、ハイフン、ドットのみ使用可能",
            "maxLength": 20,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_.-]+$",
            "type": "string"
          },
          "privatekeyPem": {
            "description": "証明書の秘密鍵のPEM形式の文字列",
            "maxLength": 1000000,
            "type": "string"
          }
        },
        "required": [
          "name",
          "certificatePem",
          "privatekeyPem"
        ],
        "type": "object"
      },
      "CreateCertificateResponse": {
        "properties": {
          "certificate": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CertificateIdentifier"
              }
            ],
            "description": "作成された証明書の情報"
          }
        },
        "required": [
          "certificate"
        ],
        "type": "object"
      },
      "CreateClusterRequest": {
        "properties": {
          "letsEncryptEmail": {
            "description": "Let's Encrypt による証明書発行を有効にするにはここにメールアドレスを設定します。\nLet's Encrypt による証明書発行は HTTP-01 チャレンジになるため、80 番ポートを HTTPプロトコルで外向きに解放する必要があります。",
            "pattern": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$",
            "title": "Let's Encrypt のメールアドレス",
            "type": "string"
          },
          "name": {
            "description": "クラスタの名前。プロジェクト内でユニーク。英数字、アンダースコア、ハイフンのみ使用可能",
            "maxLength": 20,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "ports": {
            "description": "ロードバランサのポート群",
            "items": {
              "$ref": "#/components/schemas/ClusterLoadBalancerPort"
            },
            "maxItems": 5,
            "type": "array"
          },
          "servicePrincipalID": {
            "$ref": "#/components/schemas/ServicePrincipalID"
          }
        },
        "required": [
          "name",
          "ports",
          "servicePrincipalID"
        ],
        "type": "object"
      },
      "CreateClusterResponse": {
        "properties": {
          "cluster": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ClusterIdentifier"
              }
            ],
            "description": "作成されたクラスタの情報"
          }
        },
        "required": [
          "cluster"
        ],
        "type": "object"
      },
      "CreateEnvironmentVariable": {
        "description": "環境変数作成用モデル",
        "properties": {
          "key": {
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "secret": {
            "description": "秘密情報か否か。true の場合、value を API 等で取得することは出来ない。",
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnvironmentVariableValue"
              }
            ],
            "description": "環境変数の値。secret が true で、かつ value が指定されていない場合は前のバージョンの値が利用される。"
          }
        },
        "required": [
          "key",
          "secret"
        ],
        "type": "object"
      },
      "CreateLoadBalancerRequest": {
        "properties": {
          "interfaces": {
            "description": "ロードバランサのインターフェース",
            "items": {
              "$ref": "#/components/schemas/LoadBalancerInterface"
            },
            "maxItems": 5,
            "minItems": 1,
            "type": "array"
          },
          "name": {
            "description": "ロードバランサ名。オートスケーリンググループ内でユニーク。英数字とハイフン、アンダースコアのみ使用可能",
            "maxLength": 20,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "nameServers": {
            "description": "ネームサーバ設定",
            "items": {
              "$ref": "#/components/schemas/Ipv4"
            },
            "maxItems": 3,
            "minItems": 1,
            "type": "array"
          },
          "serviceClassPath": {
            "description": "ロードバランサのサービスクラスパス",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "name",
          "serviceClassPath",
          "interfaces"
        ],
        "type": "object"
      },
      "CreateLoadBalancerResponse": {
        "description": "ロードバランサの作成レスポンス",
        "example": {
          "loadBalancer": {
            "loadBalancerID": "123e4567-e89b-12d3-a456-426614174000"
          }
        },
        "properties": {
          "loadBalancer": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoadBalancerIdentifier"
              }
            ],
            "description": "作成されたロードバランサの情報"
          }
        },
        "required": [
          "loadBalancer"
        ],
        "type": "object"
      },
      "EnoughResources": {
        "properties": {
          "cpu": {
            "description": "CPU不足が原因でアプリケーションがデプロイできない場合はfalse。ASGスケールアウト中もfalse。nullの場合は不明。",
            "nullable": true,
            "type": "boolean"
          },
          "memory": {
            "description": "メモリ不足が原因でアプリケーションがデプロイできない場合はfalse。ASGスケールアウト中もfalse。nullの場合は不明。",
            "nullable": true,
            "type": "boolean"
          }
        },
        "required": [
          "cpu",
          "memory"
        ],
        "type": "object"
      },
      "EnvironmentVariableValue": {
        "maxLength": 4096,
        "type": "string"
      },
      "Error": {
        "properties": {
          "status": {
            "format": "int32",
            "type": "integer"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "status",
          "title"
        ],
        "type": "object"
      },
      "ExposedPort": {
        "properties": {
          "healthCheck": {
            "allOf": [
              {
                "$ref": "#/components/schemas/HealthCheck"
              }
            ],
            "description": "ロードバランサがアプリケーションの正常性を確認するための設定です。ヘルスチェックが有効な場合、指定したパスにアクセスし、HTTPステータスコードが 2xx または 3xx 以外の場合は、そのノードへのトラフィックが停止されます。これにより、異常なノードへのアクセスを自動的に防止できます。",
            "nullable": true,
            "title": "ヘルスチェックの設定",
            "type": "object"
          },
          "host": {
            "description": "- HTTP/HTTPS のロードバランサポートを利用する場合は **必須**（1〜5件）。\n- TCP または loadBalancerPort = null の場合は **指定不可**。",
            "items": {
              "$ref": "#/components/schemas/Hostname"
            },
            "maxItems": 5,
            "title": "ロードバランサでホスト名ルーティングに使用されるホスト名",
            "type": "array"
          },
          "loadBalancerPort": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Port"
              }
            ],
            "description": "公開先となるロードバランサのポート番号。ロードバランサに設定しない場合は null を指定する。",
            "nullable": true,
            "type": "integer"
          },
          "targetPort": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Port"
              }
            ],
            "description": "アプリケーション内部でリッスンするポート番号。このポートがホストでリッスンされます。同一クラスタ内で、ポートの重複不可。"
          },
          "useLetsEncrypt": {
            "description": "Let's Encrypt を利用するかどうか（https の場合のみサポート）",
            "type": "boolean"
          }
        },
        "required": [
          "targetPort",
          "loadBalancerPort",
          "useLetsEncrypt",
          "healthCheck"
        ],
        "type": "object"
      },
      "HealthCheck": {
        "properties": {
          "intervalSeconds": {
            "default": 30,
            "description": "ヘルスチェックの間隔（秒）",
            "format": "int32",
            "maximum": 60,
            "minimum": 3,
            "type": "integer"
          },
          "path": {
            "description": "ヘルスチェックのパス（HTTP の場合）",
            "example": "/healthz",
            "maxLength": 200,
            "type": "string"
          },
          "timeoutSeconds": {
            "default": 5,
            "description": "ヘルスチェックのタイムアウト（秒）",
            "format": "int32",
            "maximum": 60,
            "type": "integer"
          }
        },
        "required": [
          "path",
          "intervalSeconds",
          "timeoutSeconds"
        ],
        "type": "object"
      },
      "Hostname": {
        "description": "ロードバランサでホスト名ルーティングに使用されるホスト名。\nRFC1123 DNS subdomain names に準拠した形式である必要があります。",
        "example": "example.com",
        "format": "hostname",
        "maxLength": 253,
        "minLength": 1,
        "pattern": "^(?=.{1,253}$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$",
        "type": "string"
      },
      "IpRange": {
        "properties": {
          "end": {
            "$ref": "#/components/schemas/Ipv4"
          },
          "start": {
            "$ref": "#/components/schemas/Ipv4"
          }
        },
        "required": [
          "start",
          "end"
        ],
        "type": "object"
      },
      "Ipv4": {
        "pattern": "^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$",
        "type": "string"
      },
      "Limit": {
        "properties": {
          "applicationCount": {
            "description": "アプリケーションの最大数",
            "format": "int64",
            "type": "integer"
          },
          "applicationVersionCountPerApplication": {
            "description": "アプリケーションあたりのバージョンの最大数",
            "format": "int64",
            "type": "integer"
          },
          "autoScalingGroupCount": {
            "description": "オートスケーリンググループの最大数",
            "format": "int64",
            "type": "integer"
          },
          "clusterCount": {
            "description": "クラスタの最大数",
            "format": "int64",
            "type": "integer"
          },
          "loadBalancerNodeCount": {
            "description": "ロードバランサノードの最大数",
            "format": "int64",
            "type": "integer"
          },
          "workerNodeCount": {
            "description": "ワーカノードの最大数",
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "clusterCount",
          "autoScalingGroupCount",
          "workerNodeCount",
          "loadBalancerNodeCount",
          "applicationCount",
          "applicationVersionCountPerApplication"
        ],
        "type": "object"
      },
      "ListApplicationContainersResponse": {
        "example": {
          "nodes": [
            {
              "containersStats": {
                "collectedAtSec": 1721203200,
                "containers": [
                  {
                    "applicationID": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
                    "applicationVersion": 2,
                    "cpuUsagePercent": 12.5,
                    "id": "container-1",
                    "image": "nginx:latest",
                    "state": "running",
                    "status": "Up 5 minutes"
                  }
                ]
              },
              "desired": {
                "containers": []
              },
              "nodeID": "b7e6a1c2-3f4d-4e2a-9b1a-2c3d4e5f6a7b"
            },
            {
              "containersStats": {
                "collectedAtSec": 1721203200,
                "containers": []
              },
              "desired": {
                "containers": [
                  {
                    "applicationID": "9c858901-8a57-4791-81fe-4c455b099bc9",
                    "applicationVersion": 1,
                    "cpuMillis": 250,
                    "image": "redis:alpine",
                    "memoryMB": 128
                  }
                ]
              },
              "nodeID": "c8f7b2d3-4e5f-5a6b-8c2d-3e4f5a6b7c8d"
            }
          ]
        },
        "properties": {
          "nodes": {
            "description": "ノードごとのコンテナ配置情報リスト",
            "items": {
              "$ref": "#/components/schemas/WorkerNodeContainerPlacement"
            },
            "type": "array"
          }
        },
        "required": [
          "nodes"
        ],
        "type": "object"
      },
      "ListApplicationVersionsResponse": {
        "example": {
          "versions": [
            {
              "activeNodeCount": 1,
              "created": 1577836800,
              "image": "nginx:2",
              "version": 3
            },
            {
              "activeNodeCount": 0,
              "created": 1577836800,
              "image": "nginx:2",
              "version": 2
            },
            {
              "activeNodeCount": 0,
              "created": 1577836800,
              "image": "nginx:1",
              "version": 1
            }
          ]
        },
        "properties": {
          "nextCursor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationVersionNumber"
              }
            ],
            "description": "次ページのカーソル。次のリクエストでcursorとして指定する。データが残っていなければnull。"
          },
          "versions": {
            "description": "アプリケーションのバージョン一覧",
            "items": {
              "$ref": "#/components/schemas/ApplicationVersionSummary"
            },
            "type": "array"
          }
        },
        "required": [
          "versions"
        ],
        "type": "object"
      },
      "ListApplicationsResponse": {
        "example": {
          "applications": [
            {
              "activeVersion": 3,
              "applicationID": "A0199B39-B361-45B9-8DF4-FC8BE494D690",
              "clusterID": "13B9EA83-DDB0-4385-9533-3D693A6A310F",
              "clusterName": "mock-cluster",
              "desiredCount": 3,
              "enoughResources": {
                "cpu": true,
                "memory": true
              },
              "name": "my-app",
              "scalingCooldownSeconds": 300
            }
          ]
        },
        "properties": {
          "applications": {
            "description": "アプリケーションの一覧",
            "items": {
              "$ref": "#/components/schemas/ReadApplication"
            },
            "type": "array"
          },
          "nextCursor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationID"
              }
            ],
            "description": "次ページのカーソル。次のリクエストでcursorとして指定する。データが残っていなければnull。"
          }
        },
        "required": [
          "applications"
        ],
        "type": "object"
      },
      "ListAutoScalingGroupsResponse": {
        "example": {
          "autoScalingGroups": [
            {
              "autoScalingGroupID": "123e4567-e89b-12d3-a456-426614174001",
              "deleting": false,
              "interfaces": [
                {
                  "connectsToLB": true,
                  "defaultGateway": "192.0.1.1",
                  "interfaceIndex": 0,
                  "ipPool": [
                    {
                      "end": "192.0.1.255",
                      "start": "192.0.1.0"
                    }
                  ],
                  "netmaskLen": 24,
                  "packetFilterID": "pf-123456",
                  "upstream": "111111111111"
                },
                {
                  "connectsToLB": false,
                  "interfaceIndex": 1,
                  "ipPool": [
                    {
                      "end": "192.0.2.255",
                      "start": "192.0.2.0"
                    }
                  ],
                  "netmaskLen": 24,
                  "upstream": "111111111112"
                }
              ],
              "maxNodes": 10,
              "minNodes": 2,
              "name": "tokyo-asg",
              "workerNodeCount": 3,
              "workerServiceClassPath": "cloud/apprun/dedicated/worker/1vcpu_2gb",
              "zone": "tk1b"
            }
          ]
        },
        "properties": {
          "autoScalingGroups": {
            "description": "オートスケーリンググループの一覧",
            "items": {
              "$ref": "#/components/schemas/ReadAutoScalingGroup"
            },
            "type": "array"
          },
          "nextCursor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AutoScalingGroupID"
              }
            ],
            "description": "次ページのカーソル。次のリクエストでcursorとして指定する。データが残っていなければnull。"
          }
        },
        "required": [
          "autoScalingGroups"
        ],
        "type": "object"
      },
      "ListCertificatesResponse": {
        "example": {
          "certificates": [
            {
              "certificateID": "13B9EA83-DDB0-4385-9533-3D693A6A310F",
              "commonName": "example.com",
              "created": 1577836800,
              "name": "example-certificate",
              "notAfterSec": 1640995200,
              "notBeforeSec": 1577836800,
              "subjectAlternativeNames": [
                "www.example.com",
                "api.example.com"
              ],
              "updated": 1577836800
            }
          ]
        },
        "properties": {
          "certificates": {
            "description": "証明書の一覧",
            "items": {
              "$ref": "#/components/schemas/ReadCertificate"
            },
            "type": "array"
          },
          "nextCursor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CertificateID"
              }
            ],
            "description": "次ページのカーソル。次のリクエストでcursorとして指定する。データが残っていなければnull。"
          }
        },
        "required": [
          "certificates"
        ],
        "type": "object"
      },
      "ListClustersResponse": {
        "example": {
          "clusters": [
            {
              "clusterID": "13B9EA83-DDB0-4385-9533-3D693A6A310F",
              "created": 1577836800,
              "name": "mock-cluster"
            }
          ]
        },
        "properties": {
          "clusters": {
            "description": "クラスタの一覧",
            "items": {
              "$ref": "#/components/schemas/ReadClusterSummary"
            },
            "type": "array"
          },
          "nextCursor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ClusterID"
              }
            ],
            "description": "次ページのカーソル。次のリクエストでcursorとして指定する。データが残っていなければnull。"
          }
        },
        "required": [
          "clusters"
        ],
        "type": "object"
      },
      "ListLoadBalancerNodesResponse": {
        "description": "ロードバランサノードの一覧レスポンス",
        "example": {
          "loadBalancerNodes": [
            {
              "archiveVersion": "2025.1014.1",
              "created": 1577836800,
              "interfaces": [
                {
                  "addresses": [
                    {
                      "address": "10.0.0.8/24",
                      "vip": false
                    },
                    {
                      "address": "10.0.1.2/24",
                      "vip": true
                    }
                  ],
                  "interfaceIndex": 1
                },
                {
                  "addresses": [
                    {
                      "address": "10.0.2.8/24",
                      "vip": false
                    },
                    {
                      "address": "10.0.3.4/24",
                      "vip": true
                    }
                  ],
                  "interfaceIndex": 2
                }
              ],
              "loadBalancerNodeID": "550e8400-e29b-41d4-a716-446655440001",
              "resourceID": "12345678901",
              "status": "healthy"
            },
            {
              "createErrorMessage": "クラスタのサービスプリンシパルにさくらのクラウドの作成・削除権限が付与されているか確認してください",
              "created": 1577836800,
              "interfaces": [
                {
                  "addresses": [
                    {
                      "address": "10.0.0.9/24",
                      "vip": false
                    }
                  ],
                  "interfaceIndex": 1
                }
              ],
              "loadBalancerNodeID": "660e8400-e29b-41d4-a716-446655440001",
              "resourceID": "12345678901",
              "status": "healthy"
            }
          ]
        },
        "properties": {
          "loadBalancerNodes": {
            "description": "ロードバランサノードの一覧",
            "items": {
              "$ref": "#/components/schemas/LoadBalancerNode"
            },
            "type": "array"
          },
          "nextCursor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoadBalancerNodeID"
              }
            ],
            "description": "次ページのカーソル。次のリクエストでcursorとして指定する。データが残っていなければnull。"
          }
        },
        "required": [
          "loadBalancerNodes"
        ],
        "type": "object"
      },
      "ListLoadBalancerServiceClassesResponse": {
        "example": {
          "lbServiceClasses": [
            {
              "name": "1vCPU / 2GB メモリ * 1 (非冗長構成)",
              "nodeCount": 1,
              "path": "cloud/apprun/dedicated/lb/1vcpu_2gb_1"
            },
            {
              "name": "1vCPU / 2GB メモリ * 2 (冗長構成)",
              "nodeCount": 2,
              "path": "cloud/apprun/dedicated/lb/1vcpu_2gb_2"
            },
            {
              "name": "4vCPU / 4GB メモリ * 2 (冗長構成)",
              "nodeCount": 2,
              "path": "cloud/apprun/dedicated/lb/4vcpu_4gb_2"
            }
          ]
        },
        "properties": {
          "lbServiceClasses": {
            "description": "ロードバランササービスクラスの一覧",
            "items": {
              "$ref": "#/components/schemas/LoadBalancerServiceClass"
            },
            "type": "array"
          }
        },
        "required": [
          "lbServiceClasses"
        ],
        "type": "object"
      },
      "ListLoadBalancersResponse": {
        "description": "ロードバランサの一覧レスポンス",
        "example": {
          "loadBalancers": [
            {
              "created": 1577836800,
              "deleting": false,
              "loadBalancerID": "550e8400-e29b-41d4-a716-446655440000",
              "name": "example-lb",
              "serviceClassPath": "cloud/apprun/dedicated/lb/1vcpu_2gb_1"
            },
            {
              "created": 1577836800,
              "deleting": true,
              "loadBalancerID": "550e8400-e29b-41d4-a716-446655440001",
              "name": "another-lb",
              "serviceClassPath": "cloud/apprun/dedicated/lb/1vcpu_2gb_1"
            }
          ]
        },
        "properties": {
          "loadBalancers": {
            "description": "ロードバランサの一覧",
            "items": {
              "$ref": "#/components/schemas/ReadLoadBalancerSummary"
            },
            "type": "array"
          },
          "nextCursor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoadBalancerID"
              }
            ],
            "description": "次ページのカーソル。次のリクエストでcursorとして指定する。データが残っていなければnull。"
          }
        },
        "required": [
          "loadBalancers"
        ],
        "type": "object"
      },
      "ListWorkerNodesResponse": {
        "example": {
          "workerNodes": [
            {
              "archiveVersion": "2025.1014.1",
              "created": 1577836800,
              "draining": false,
              "networkInterfaces": [
                {
                  "addresses": [
                    {
                      "address": "192.168.0.1"
                    }
                  ],
                  "interfaceIndex": 0
                },
                {
                  "addresses": [
                    {
                      "address": "10.0.0.8"
                    }
                  ],
                  "interfaceIndex": 1
                }
              ],
              "resourceID": "worker-node-01",
              "status": "healthy",
              "workerNodeID": "123e4567-e89b-12d3-a456-426614174002"
            },
            {
              "archiveVersion": "2025.1014.2",
              "created": 1577836800,
              "draining": true,
              "networkInterfaces": [
                {
                  "addresses": [
                    {
                      "address": "192.168.0.1"
                    }
                  ],
                  "interfaceIndex": 0
                },
                {
                  "addresses": [
                    {
                      "address": "10.0.0.8"
                    }
                  ],
                  "interfaceIndex": 1
                }
              ],
              "resourceID": "worker-node-02",
              "status": "healthy",
              "workerNodeID": "987f6543-e21a-45c3-b123-554433221101"
            },
            {
              "archiveVersion": "2025.1014.3",
              "createErrorMessage": "クラスタのサービスプリンシパルにさくらのクラウドの作成・削除権限が付与されているか確認してください",
              "created": 1577836800,
              "draining": true,
              "networkInterfaces": [
                {
                  "addresses": [
                    {
                      "address": "192.168.0.1"
                    }
                  ],
                  "interfaceIndex": 0
                },
                {
                  "addresses": [
                    {
                      "address": "10.0.0.8"
                    }
                  ],
                  "interfaceIndex": 1
                }
              ],
              "resourceID": "worker-node-03",
              "status": "creating",
              "workerNodeID": "487f6543-e21a-45c3-b123-554433221101"
            }
          ]
        },
        "properties": {
          "nextCursor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkerNodeID"
              }
            ],
            "description": "次ページのカーソル。次のリクエストでcursorとして指定する。データが残っていなければnull。"
          },
          "workerNodes": {
            "description": "ワーカノードの一覧",
            "items": {
              "$ref": "#/components/schemas/WorkerNodeSummary"
            },
            "type": "array"
          }
        },
        "required": [
          "workerNodes"
        ],
        "type": "object"
      },
      "ListWorkerServiceClassesResponse": {
        "example": {
          "workerServiceClasses": [
            {
              "name": "1vCPU / 2GB メモリ",
              "path": "cloud/apprun/dedicated/worker/1vcpu_2gb"
            },
            {
              "name": "2vCPU / 2GB メモリ",
              "path": "cloud/apprun/dedicated/worker/2vcpu_2gb"
            },
            {
              "name": "2vCPU / 4GB メモリ",
              "path": "cloud/apprun/dedicated/worker/2vcpu_4gb"
            },
            {
              "name": "4vCPU / 8GB メモリ",
              "path": "cloud/apprun/dedicated/worker/4vcpu_8gb"
            }
          ]
        },
        "properties": {
          "workerServiceClasses": {
            "description": "ワーカノードサービスクラスの一覧",
            "items": {
              "$ref": "#/components/schemas/WorkerServiceClass"
            },
            "type": "array"
          }
        },
        "required": [
          "workerServiceClasses"
        ],
        "type": "object"
      },
      "LoadBalancerID": {
        "format": "uuid",
        "type": "string"
      },
      "LoadBalancerIdentifier": {
        "properties": {
          "loadBalancerID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoadBalancerID"
              }
            ],
            "description": "ロードバランサID",
            "readOnly": true
          }
        },
        "required": [
          "loadBalancerID"
        ],
        "type": "object"
      },
      "LoadBalancerInterface": {
        "properties": {
          "defaultGateway": {
            "description": "アップストリームが 'shared' の場合、指定できません。",
            "title": "デフォルトゲートウェイ",
            "type": "string"
          },
          "interfaceIndex": {
            "description": "例：eth0→0、eth1→1、eth2→2。0は必須。重複不可。",
            "format": "int16",
            "title": "インターフェース番号",
            "type": "integer"
          },
          "ipPool": {
            "description": "アップストリームが 'shared' の場合、指定できません。それ以外のときは必須です。",
            "items": {
              "$ref": "#/components/schemas/IpRange"
            },
            "maxItems": 20,
            "title": "IPアドレスの割り当て範囲",
            "type": "array"
          },
          "netmaskLen": {
            "description": "アップストリームが 'shared' の場合、指定できません。それ以外のときは必須です。",
            "format": "int16",
            "maximum": 29,
            "minimum": 8,
            "title": "ネットマスク長",
            "type": "integer"
          },
          "packetFilterID": {
            "description": "パケットフィルターID",
            "type": "string"
          },
          "upstream": {
            "description": "接続先スイッチ",
            "type": "string"
          },
          "vip": {
            "description": "アップストリームが 'shared' の場合、指定できません。",
            "pattern": "^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$",
            "title": "ロードバランサの VIP",
            "type": "string"
          },
          "virtualRouterID": {
            "description": "アップストリームが 'shared' の場合、指定できません。1-255 の値を指定します。ロードバランサの VIP を指定した場合は、virtualRouterID の入力は必須です。",
            "format": "int16",
            "title": "バーチャルルーターID",
            "type": "integer"
          }
        },
        "required": [
          "interfaceIndex",
          "upstream"
        ],
        "type": "object"
      },
      "LoadBalancerNode": {
        "properties": {
          "archiveVersion": {
            "description": "ノードにインストールされているアーカイブのバージョン",
            "type": "string"
          },
          "createErrorMessage": {
            "description": "ノードの作成に関するエラーメッセージ",
            "type": "string"
          },
          "created": {
            "description": "作成日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          },
          "interfaces": {
            "description": "インターフェース情報",
            "items": {
              "$ref": "#/components/schemas/LoadBalancerNodeInterface"
            },
            "type": "array"
          },
          "loadBalancerNodeID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoadBalancerNodeID"
              }
            ],
            "description": "ID"
          },
          "resourceID": {
            "description": "リソースID",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoadBalancerNodeStatus"
              }
            ],
            "description": "ノードの状態"
          }
        },
        "required": [
          "loadBalancerNodeID",
          "resourceID",
          "status",
          "interfaces",
          "created"
        ],
        "type": "object"
      },
      "LoadBalancerNodeID": {
        "format": "uuid",
        "type": "string"
      },
      "LoadBalancerNodeInterface": {
        "properties": {
          "addresses": {
            "description": "ロードバランサノードのアドレス",
            "items": {
              "$ref": "#/components/schemas/LoadBalancerNodeInterfaceAddress"
            },
            "type": "array"
          },
          "interfaceIndex": {
            "description": "インターフェース番号。eth0 なら 0。eth1 なら 1。",
            "format": "int16",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "interfaceIndex",
          "addresses"
        ],
        "type": "object"
      },
      "LoadBalancerNodeInterfaceAddress": {
        "properties": {
          "address": {
            "description": "アドレス",
            "type": "string"
          },
          "vip": {
            "description": "VIPかどうか",
            "type": "boolean"
          }
        },
        "required": [
          "address",
          "vip"
        ],
        "type": "object"
      },
      "LoadBalancerNodeStatus": {
        "description": "ロードバランサノードの状態を表す列挙型",
        "enum": [
          "healthy",
          "unhealthy",
          "creating",
          "starting"
        ],
        "type": "string"
      },
      "LoadBalancerServiceClass": {
        "properties": {
          "name": {
            "description": "サービスクラスの名前",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "nodeCount": {
            "description": "割り当てられるノード数",
            "format": "int16",
            "type": "integer"
          },
          "path": {
            "description": "サービスクラスのパス",
            "type": "string"
          }
        },
        "required": [
          "path",
          "nodeCount",
          "name"
        ],
        "type": "object"
      },
      "PatchClusterLoadBalancerRequest": {
        "properties": {
          "letsEncryptEmail": {
            "description": "Let's Encrypt による証明書発行を有効にするにはここにメールアドレスを設定します。\nLet's Encrypt による証明書発行は HTTP-01 チャレンジになるため、80 番ポートを HTTPプロトコルで外向きに解放する必要があります。",
            "nullable": true,
            "pattern": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$",
            "title": "Let's Encrypt のメールアドレス",
            "type": "string"
          },
          "ports": {
            "description": "ロードバランサのポート群",
            "items": {
              "$ref": "#/components/schemas/ClusterLoadBalancerPortMergePatchCreateOrUpdateReplaceOnly"
            },
            "maxItems": 5,
            "type": "array"
          }
        },
        "type": "object"
      },
      "Port": {
        "example": 8443,
        "format": "uint16",
        "maximum": 65535,
        "minimum": 1,
        "type": "integer"
      },
      "ReadApplication": {
        "description": "アプリケーション",
        "properties": {
          "activeVersion": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationVersionNumber"
              }
            ],
            "description": "利用しているバージョン",
            "example": 3,
            "nullable": true,
            "type": "integer"
          },
          "applicationID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationID"
              }
            ],
            "description": "ID"
          },
          "clusterID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ClusterID"
              }
            ],
            "description": "デプロイ先クラスタ"
          },
          "clusterName": {
            "description": "クラスタ名",
            "example": "開発用",
            "type": "string"
          },
          "desiredCount": {
            "description": "デプロイされているべきコンテナ数。activeVersionが未指定の場合はnull。",
            "format": "int32",
            "nullable": true,
            "type": "integer"
          },
          "enoughResources": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnoughResources"
              }
            ],
            "description": "アプリケーションをデプロイするクラスタのリソースが十分かどうか"
          },
          "name": {
            "description": "アプリケーションの名前。クラスタの中ではユニーク。英数字とハイフン、アンダースコアのみ使用可能",
            "example": "bbs",
            "maxLength": 20,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "scalingCooldownSeconds": {
            "description": "スケーリングのクールダウン時間（秒）",
            "format": "int32",
            "type": "integer"
          }
        },
        "required": [
          "applicationID",
          "name",
          "clusterID",
          "clusterName",
          "activeVersion",
          "desiredCount",
          "scalingCooldownSeconds",
          "enoughResources"
        ],
        "type": "object"
      },
      "ReadApplicationResponse": {
        "example": {
          "application": {
            "activeVersion": 3,
            "applicationID": "A0199B39-B361-45B9-8DF4-FC8BE494D690",
            "clusterID": "13B9EA83-DDB0-4385-9533-3D693A6A310F",
            "clusterName": "mock-cluster",
            "desiredCount": 3,
            "enoughResources": {
              "cpu": true,
              "memory": true
            },
            "name": "my-app",
            "scalingCooldownSeconds": 300
          }
        },
        "properties": {
          "application": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ReadApplication"
              }
            ],
            "description": "アプリケーションの情報"
          }
        },
        "required": [
          "application"
        ],
        "type": "object"
      },
      "ReadApplicationVersion": {
        "example": {
          "activeNodeCount": 0,
          "cpu": 500,
          "created": 1577836800,
          "env": [
            {
              "key": "DB_DSN",
              "secret": false,
              "value": "postgresql://192.168.0.1:5432/foobar"
            },
            {
              "key": "DB_PASSWORD",
              "secret": true,
              "value": "****"
            }
          ],
          "exposedPorts": [
            {
              "healthCheck": {
                "intervalSeconds": 10,
                "path": "/healthz2",
                "timeoutSeconds": 30
              },
              "loadBalancerPort": 8080,
              "targetPort": 8080,
              "useLetsEncrypt": false
            }
          ],
          "fixedScale": 2,
          "image": "nginx:2",
          "memory": 500,
          "registryPassword": null,
          "registryUsername": null,
          "scalingMode": "manual",
          "version": 2
        },
        "properties": {
          "activeNodeCount": {
            "description": "現在動いているノードの数",
            "format": "int64",
            "type": "integer"
          },
          "cmd": {
            "description": "コンテナ起動時に実行するコマンドと引数",
            "items": {
              "type": "string"
            },
            "maxItems": 20,
            "type": "array"
          },
          "cpu": {
            "example": 500,
            "format": "int64",
            "maximum": 64000,
            "minimum": 100,
            "type": "integer"
          },
          "created": {
            "description": "アプリケーションバージョン作成日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          },
          "env": {
            "description": "環境変数",
            "items": {
              "$ref": "#/components/schemas/ReadEnvironmentVariable"
            },
            "maxItems": 50,
            "type": "array"
          },
          "exposedPorts": {
            "description": "アプリケーションが公開するポート番号。同一クラスタ内で、ポートの重複不可。",
            "items": {
              "$ref": "#/components/schemas/ExposedPort"
            },
            "maxItems": 5,
            "type": "array"
          },
          "fixedScale": {
            "format": "int32",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "image": {
            "example": "nginx:latest",
            "maxLength": 512,
            "type": "string"
          },
          "maxScale": {
            "example": 3,
            "format": "int32",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "memory": {
            "example": 1000,
            "format": "int64",
            "maximum": 131072,
            "minimum": 128,
            "type": "integer"
          },
          "minScale": {
            "example": 1,
            "format": "int32",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "registryPassword": {
            "description": "レジストリのパスワード。レスポンスではマスクされる。未設定の場合はnull。",
            "maxLength": 255,
            "nullable": true,
            "type": "string"
          },
          "registryUsername": {
            "description": "レジストリのユーザ名。未設定の場合はnull。",
            "maxLength": 255,
            "nullable": true,
            "type": "string"
          },
          "scaleInThreshold": {
            "example": 30,
            "format": "int32",
            "maximum": 70,
            "minimum": 30,
            "type": "integer"
          },
          "scaleOutThreshold": {
            "example": 95,
            "format": "int32",
            "maximum": 99,
            "minimum": 50,
            "type": "integer"
          },
          "scalingMode": {
            "$ref": "#/components/schemas/ScalingMode"
          },
          "version": {
            "$ref": "#/components/schemas/ApplicationVersionNumber"
          }
        },
        "required": [
          "version",
          "image",
          "activeNodeCount",
          "created",
          "cpu",
          "memory",
          "scalingMode",
          "registryUsername",
          "registryPassword",
          "exposedPorts",
          "env"
        ],
        "type": "object"
      },
      "ReadApplicationVersionResponse": {
        "example": {
          "applicationVersion": {
            "activeNodeCount": 1,
            "cpu": 500,
            "created": 1577836800,
            "env": [
              {
                "key": "ENV_VAR",
                "secret": false,
                "value": "value"
              },
              {
                "key": "DB_PASSWORD",
                "secret": true,
                "value": "****"
              }
            ],
            "exposedPorts": [
              {
                "healthCheck": {
                  "intervalSeconds": 10,
                  "path": "/healthz",
                  "timeoutSeconds": 30
                },
                "loadBalancerPort": 80,
                "targetPort": 8080,
                "useLetsEncrypt": false
              },
              {
                "healthCheck": {
                  "intervalSeconds": 10,
                  "path": "/monitoring/l7check",
                  "timeoutSeconds": 30
                },
                "host": [
                  "example.com"
                ],
                "loadBalancerPort": 443,
                "targetPort": 8084,
                "useLetsEncrypt": true
              }
            ],
            "image": "nginx:2",
            "maxScale": 2,
            "memory": 500,
            "minScale": 1,
            "registryPassword": null,
            "registryUsername": null,
            "scalingMode": "cpu",
            "version": 3
          }
        },
        "properties": {
          "applicationVersion": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ReadApplicationVersion"
              }
            ],
            "description": "アプリケーションのバージョン情報"
          }
        },
        "required": [
          "applicationVersion"
        ],
        "type": "object"
      },
      "ReadAutoScalingGroup": {
        "properties": {
          "autoScalingGroupID": {
            "$ref": "#/components/schemas/AutoScalingGroupID"
          },
          "deleting": {
            "description": "削除中",
            "type": "boolean"
          },
          "interfaces": {
            "items": {
              "$ref": "#/components/schemas/AutoScalingGroupNodeInterface"
            },
            "maxItems": 5,
            "minItems": 1,
            "title": "ネットワークインターフェース定義",
            "type": "array"
          },
          "maxNodes": {
            "description": "オートスケーリンググループの最大ノード数",
            "format": "int32",
            "maximum": 10,
            "minimum": 1,
            "type": "integer"
          },
          "minNodes": {
            "description": "オートスケーリンググループの最小ノード数",
            "format": "int32",
            "maximum": 10,
            "minimum": 1,
            "type": "integer"
          },
          "name": {
            "description": "オートスケーリンググループの名前。クラスタ内でユニーク。英数字、アンダースコア、ハイフンのみ使用可能",
            "maxLength": 20,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "nameServers": {
            "description": "ネームサーバ設定",
            "items": {
              "$ref": "#/components/schemas/Ipv4"
            },
            "maxItems": 3,
            "minItems": 1,
            "type": "array"
          },
          "workerNodeCount": {
            "description": "現在のワーカノードの数",
            "format": "int32",
            "type": "integer"
          },
          "workerServiceClassPath": {
            "description": "ワーカノードのサービスクラスパス",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "zone": {
            "description": "オートスケーリンググループのゾーン",
            "type": "string"
          }
        },
        "required": [
          "autoScalingGroupID",
          "name",
          "zone",
          "workerServiceClassPath",
          "minNodes",
          "maxNodes",
          "workerNodeCount",
          "interfaces",
          "deleting"
        ],
        "type": "object"
      },
      "ReadAutoScalingGroupResponse": {
        "example": {
          "autoScalingGroup": {
            "autoScalingGroupID": "123e4567-e89b-12d3-a456-426614174001",
            "deleting": false,
            "interfaces": [
              {
                "connectsToLB": true,
                "defaultGateway": "192.0.1.1",
                "interfaceIndex": 0,
                "netmaskLen": 24,
                "packetFilterID": "pf-123456",
                "upstream": "111111111111"
              },
              {
                "connectsToLB": false,
                "interfaceIndex": 1,
                "netmaskLen": 24,
                "upstream": "111111111112"
              }
            ],
            "maxNodes": 10,
            "minNodes": 2,
            "name": "tokyo-asg",
            "nameServers": [
              "192.0.2.1"
            ],
            "workerNodeCount": 3,
            "workerServiceClassPath": "cloud/apprun/dedicated/worker/1vcpu_2gb",
            "zone": "tk1b"
          }
        },
        "properties": {
          "autoScalingGroup": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ReadAutoScalingGroup"
              }
            ],
            "description": "オートスケーリンググループの情報"
          }
        },
        "required": [
          "autoScalingGroup"
        ],
        "type": "object"
      },
      "ReadCertificate": {
        "properties": {
          "certificateID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CertificateID"
              }
            ],
            "description": "証明書ID"
          },
          "commonName": {
            "description": "証明書の共通名",
            "maxLength": 255,
            "type": "string"
          },
          "created": {
            "description": "作成日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          },
          "name": {
            "description": "証明書の名前。クラスタ内でユニーク。英数字、アンダースコア、ハイフン、ドットのみ使用可能",
            "maxLength": 20,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_.-]+$",
            "type": "string"
          },
          "notAfterSec": {
            "description": "証明書の有効終了日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          },
          "notBeforeSec": {
            "description": "証明書の有効開始日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          },
          "subjectAlternativeNames": {
            "description": "証明書のサブジェクト代替名（SAN）のリスト",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "updated": {
            "description": "更新日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          }
        },
        "required": [
          "certificateID",
          "name",
          "commonName",
          "subjectAlternativeNames",
          "notBeforeSec",
          "notAfterSec",
          "created",
          "updated"
        ],
        "type": "object"
      },
      "ReadCertificateResponse": {
        "example": {
          "certificate": {
            "certificateID": "83B9EA83-DDB0-4385-9533-3D693A6A310F",
            "commonName": "example.com",
            "created": 1577836800,
            "name": "my-certificate",
            "notAfterSec": 1640995200,
            "notBeforeSec": 1577836800,
            "subjectAlternativeNames": [
              "www.example.com",
              "api.example.com"
            ],
            "updated": 1577836800
          }
        },
        "properties": {
          "certificate": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ReadCertificate"
              }
            ],
            "description": "証明書の情報"
          }
        },
        "required": [
          "certificate"
        ],
        "type": "object"
      },
      "ReadCluster": {
        "properties": {
          "clusterID": {
            "$ref": "#/components/schemas/ClusterID"
          },
          "created": {
            "description": "クラスタの作成日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          },
          "hasLetsEncryptEmail": {
            "description": "Let's Encrypt 用のメールアドレスが設定済みかどうか",
            "type": "boolean"
          },
          "name": {
            "description": "クラスタの名前。プロジェクト内でユニーク。英数字、アンダースコア、ハイフンのみ使用可能",
            "maxLength": 20,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "ports": {
            "description": "ロードバランサのポート群",
            "items": {
              "$ref": "#/components/schemas/ClusterLoadBalancerPort"
            },
            "maxItems": 5,
            "type": "array"
          },
          "servicePrincipalID": {
            "$ref": "#/components/schemas/ServicePrincipalID"
          }
        },
        "required": [
          "clusterID",
          "name",
          "created",
          "hasLetsEncryptEmail",
          "ports",
          "servicePrincipalID"
        ],
        "type": "object"
      },
      "ReadClusterLoadBalancer": {
        "properties": {
          "hasLetsEncryptEmail": {
            "description": "Let's Encrypt 用のメールアドレスが設定済みかどうか",
            "type": "boolean"
          },
          "ports": {
            "description": "ロードバランサのポート群",
            "items": {
              "$ref": "#/components/schemas/ClusterLoadBalancerPort"
            },
            "maxItems": 5,
            "type": "array"
          }
        },
        "required": [
          "hasLetsEncryptEmail",
          "ports"
        ],
        "type": "object"
      },
      "ReadClusterLoadBalancerResponse": {
        "example": {
          "loadBalancer": {
            "hasLetsEncryptEmail": true,
            "ports": [
              {
                "port": 80,
                "protocol": "http"
              },
              {
                "port": 443,
                "protocol": "https"
              }
            ]
          }
        },
        "properties": {
          "loadBalancer": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ReadClusterLoadBalancer"
              }
            ],
            "description": "ロードバランサ設定の情報"
          }
        },
        "required": [
          "loadBalancer"
        ],
        "type": "object"
      },
      "ReadClusterResponse": {
        "example": {
          "cluster": {
            "clusterID": "13B9EA83-DDB0-4385-9533-3D693A6A310F",
            "created": 1577836800,
            "hasLetsEncryptEmail": true,
            "name": "mock-cluster",
            "ports": [
              {
                "port": 80,
                "protocol": "http"
              },
              {
                "port": 443,
                "protocol": "https"
              }
            ],
            "servicePrincipalID": "123456789012"
          }
        },
        "properties": {
          "cluster": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ReadCluster"
              }
            ],
            "description": "クラスタの情報"
          }
        },
        "required": [
          "cluster"
        ],
        "type": "object"
      },
      "ReadClusterSummary": {
        "properties": {
          "clusterID": {
            "$ref": "#/components/schemas/ClusterID"
          },
          "created": {
            "description": "クラスタの作成日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          },
          "name": {
            "description": "クラスタの名前。プロジェクト内でユニーク。英数字、アンダースコア、ハイフンのみ使用可能",
            "maxLength": 20,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          }
        },
        "required": [
          "clusterID",
          "name",
          "created"
        ],
        "type": "object"
      },
      "ReadEnvironmentVariable": {
        "description": "環境変数の取得レスポンス",
        "properties": {
          "key": {
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "secret": {
            "description": "秘密情報か否か。true の場合、value を API 等で取得することは出来ない。",
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnvironmentVariableValue"
              }
            ],
            "description": "環境変数の値。secret が true の場合は null になる。",
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "key",
          "secret",
          "value"
        ],
        "type": "object"
      },
      "ReadLimitsResponse": {
        "example": {
          "limit": {
            "applicationCount": 10,
            "applicationVersionCountPerApplication": 50,
            "autoScalingGroupCount": 6,
            "clusterCount": 10,
            "loadBalancerNodeCount": 6,
            "workerNodeCount": 14
          }
        },
        "properties": {
          "limit": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Limit"
              }
            ],
            "description": "プロジェクトのリソース制限値"
          }
        },
        "required": [
          "limit"
        ],
        "type": "object"
      },
      "ReadLoadBalancer": {
        "properties": {
          "created": {
            "description": "ロードバランサの作成日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          },
          "deleting": {
            "description": "削除中",
            "type": "boolean"
          },
          "interfaces": {
            "description": "ロードバランサのインターフェース",
            "items": {
              "$ref": "#/components/schemas/LoadBalancerInterface"
            },
            "maxItems": 5,
            "minItems": 1,
            "type": "array"
          },
          "loadBalancerID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoadBalancerID"
              }
            ],
            "description": "ロードバランサID"
          },
          "name": {
            "description": "ロードバランサ名。オートスケーリンググループ内でユニーク。英数字とハイフン、アンダースコアのみ使用可能",
            "maxLength": 20,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "nameServers": {
            "description": "ネームサーバ設定",
            "items": {
              "$ref": "#/components/schemas/Ipv4"
            },
            "maxItems": 3,
            "minItems": 1,
            "type": "array"
          },
          "serviceClassPath": {
            "description": "ロードバランサのサービスクラスパス",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "loadBalancerID",
          "name",
          "serviceClassPath",
          "created",
          "deleting",
          "interfaces"
        ],
        "type": "object"
      },
      "ReadLoadBalancerNodeResponse": {
        "description": "ロードバランサノードの詳細取得レスポンス",
        "example": {
          "loadBalancerNode": {
            "archiveVersion": "2025.1014.1",
            "createErrorMessage": "クラスタのサービスプリンシパルにさくらのクラウドの作成・削除権限が付与されているか確認してください",
            "created": 1577836800,
            "interfaces": [
              {
                "addresses": [
                  {
                    "address": "10.0.0.2/24",
                    "vip": false
                  },
                  {
                    "address": "10.0.1.2/24",
                    "vip": true
                  }
                ],
                "interfaceIndex": 1
              },
              {
                "addresses": [
                  {
                    "address": "10.0.2.8/24",
                    "vip": false
                  },
                  {
                    "address": "10.0.3.4/24",
                    "vip": true
                  }
                ],
                "interfaceIndex": 2
              }
            ],
            "loadBalancerNodeID": "550e8400-e29b-41d4-a716-446655440001",
            "resourceID": "12345678901",
            "status": "healthy"
          }
        },
        "properties": {
          "loadBalancerNode": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoadBalancerNode"
              }
            ],
            "description": "ロードバランサノードの情報"
          }
        },
        "required": [
          "loadBalancerNode"
        ],
        "type": "object"
      },
      "ReadLoadBalancerResponse": {
        "description": "ロードバランサの詳細取得レスポンス",
        "example": {
          "loadBalancer": {
            "created": 1577836800,
            "deleting": false,
            "interfaces": [
              {
                "defaultGateway": "192.168.1.0/32",
                "interfaceIndex": 1,
                "netmaskLen": 24,
                "packetFilterID": "pf-123456",
                "upstream": "switch1",
                "vip": "192.168.1.100",
                "virtualRouterID": 51
              },
              {
                "interfaceIndex": 2,
                "netmaskLen": 24,
                "upstream": "switch2"
              }
            ],
            "loadBalancerID": "550e8400-e29b-41d4-a716-446655440000",
            "name": "example-lb",
            "serviceClassPath": "cloud/apprun/dedicated/lb/1vcpu_2gb_1"
          }
        },
        "properties": {
          "loadBalancer": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ReadLoadBalancer"
              }
            ],
            "description": "ロードバランサの情報"
          }
        },
        "required": [
          "loadBalancer"
        ],
        "type": "object"
      },
      "ReadLoadBalancerSummary": {
        "properties": {
          "created": {
            "description": "ロードバランサの作成日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          },
          "deleting": {
            "description": "削除中",
            "type": "boolean"
          },
          "loadBalancerID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoadBalancerID"
              }
            ],
            "description": "ロードバランサID"
          },
          "name": {
            "description": "ロードバランサ名。オートスケーリンググループ内でユニーク。英数字とハイフン、アンダースコアのみ使用可能",
            "maxLength": 20,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "nameServers": {
            "description": "ネームサーバ設定",
            "items": {
              "$ref": "#/components/schemas/Ipv4"
            },
            "maxItems": 3,
            "minItems": 1,
            "type": "array"
          },
          "serviceClassPath": {
            "description": "ロードバランサのサービスクラスパス",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "loadBalancerID",
          "name",
          "serviceClassPath",
          "created",
          "deleting"
        ],
        "type": "object"
      },
      "ReadWorkerNodeResponse": {
        "example": {
          "workerNode": {
            "archiveVersion": "2025.1014.1",
            "createErrorMessage": "クラスタのサービスプリンシパルにさくらのクラウドの作成・削除権限が付与されているか確認してください",
            "created": 1577836800,
            "creating": false,
            "draining": false,
            "healthy": true,
            "networkInterfaces": [
              {
                "addresses": [
                  {
                    "address": "10.0.0.1"
                  }
                ],
                "interfaceIndex": 0
              },
              {
                "addresses": [
                  {
                    "address": "192.168.0.1"
                  }
                ],
                "interfaceIndex": 1
              }
            ],
            "resourceID": "worker-node-01",
            "runningContainers": [
              {
                "applicationID": "A0199B39-B361-45B9-8DF4-FC8BE494D690",
                "applicationVersion": 1,
                "containerID": "container-01",
                "image": "nginx:latest",
                "name": "nginx",
                "startedAt": 1577836800,
                "state": "running",
                "status": "running"
              },
              {
                "applicationID": "A0199B39-B361-45B9-8DF4-FC8BE494D690",
                "applicationVersion": 1,
                "containerID": "container-02",
                "image": "redis:latest",
                "name": "redis",
                "startedAt": 1577836800,
                "state": "running",
                "status": "running"
              }
            ],
            "status": "healthy",
            "workerNodeID": "123e4567-e89b-12d3-a456-426614174002"
          }
        },
        "properties": {
          "workerNode": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkerNode"
              }
            ],
            "description": "ワーカノードの詳細"
          }
        },
        "required": [
          "workerNode"
        ],
        "type": "object"
      },
      "RegistryPasswordAction": {
        "enum": [
          "keep",
          "remove",
          "new"
        ],
        "type": "string"
      },
      "ScalingMode": {
        "enum": [
          "manual",
          "cpu"
        ],
        "type": "string"
      },
      "ServicePrincipalID": {
        "description": "サービスプリンシパルのID",
        "example": "123456789012",
        "maxLength": 12,
        "minLength": 12,
        "type": "string"
      },
      "UpdateApplicationRequest": {
        "properties": {
          "activeVersion": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationVersionNumber"
              }
            ],
            "description": "利用しているバージョン",
            "example": 3,
            "nullable": true,
            "type": "integer"
          }
        },
        "required": [
          "activeVersion"
        ],
        "type": "object"
      },
      "UpdateCertificateRequest": {
        "properties": {
          "certificatePem": {
            "description": "証明書のPEM形式の文字列",
            "maxLength": 1000000,
            "type": "string"
          },
          "intermediateCertificatePem": {
            "description": "証明書のチェーン証明書のPEM形式の文字列",
            "maxLength": 1000000,
            "type": "string"
          },
          "name": {
            "description": "証明書の名前。クラスタ内でユニーク。英数字、アンダースコア、ハイフン、ドットのみ使用可能",
            "maxLength": 20,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_.-]+$",
            "type": "string"
          },
          "privatekeyPem": {
            "description": "証明書の秘密鍵のPEM形式の文字列",
            "maxLength": 1000000,
            "type": "string"
          }
        },
        "required": [
          "name",
          "certificatePem",
          "privatekeyPem"
        ],
        "type": "object"
      },
      "UpdateClusterRequest": {
        "properties": {
          "letsEncryptEmail": {
            "description": "Let's Encrypt による証明書発行を有効にするにはここにメールアドレスを設定します。\nLet's Encrypt による証明書発行は HTTP-01 チャレンジになるため、80 番ポートを HTTPプロトコルで外向きに解放する必要があります。",
            "pattern": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$",
            "title": "Let's Encrypt のメールアドレス",
            "type": "string"
          },
          "ports": {
            "description": "ロードバランサのポート群",
            "items": {
              "$ref": "#/components/schemas/ClusterLoadBalancerPort"
            },
            "maxItems": 5,
            "type": "array"
          },
          "servicePrincipalID": {
            "$ref": "#/components/schemas/ServicePrincipalID"
          }
        },
        "required": [
          "servicePrincipalID"
        ],
        "type": "object"
      },
      "UpdateWorkerNodeDrainingRequest": {
        "description": "ワーカノードのドレイン状態を変更するリクエスト",
        "properties": {
          "draining": {
            "description": "ドレイン状態にするかどうか",
            "type": "boolean"
          }
        },
        "required": [
          "draining"
        ],
        "type": "object"
      },
      "WorkerNode": {
        "properties": {
          "archiveVersion": {
            "description": "ノードにインストールされているアーカイブのバージョン",
            "type": "string"
          },
          "createErrorMessage": {
            "description": "ノード作成に関するエラーメッセージ",
            "type": "string"
          },
          "created": {
            "description": "リソース作成日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          },
          "creating": {
            "description": "ワーカノードが作成中かどうか",
            "type": "boolean"
          },
          "draining": {
            "description": "ドレイン状態かどうか",
            "type": "boolean"
          },
          "healthy": {
            "description": "ヘルシーかどうか",
            "type": "boolean"
          },
          "networkInterfaces": {
            "description": "ネットワークインターフェース情報",
            "items": {
              "$ref": "#/components/schemas/WorkerNodeNetworkInterface"
            },
            "type": "array"
          },
          "resourceID": {
            "description": "アプライアンスリソースID",
            "nullable": true,
            "type": "string"
          },
          "runningContainers": {
            "description": "実行中コンテナ",
            "items": {
              "$ref": "#/components/schemas/WorkerNodeRunningContainer"
            },
            "type": "array"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkerNodeStatus"
              }
            ],
            "description": "ノード状態"
          },
          "workerNodeID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkerNodeID"
              }
            ],
            "description": "ワーカノードID"
          }
        },
        "required": [
          "workerNodeID",
          "resourceID",
          "draining",
          "status",
          "networkInterfaces",
          "created",
          "healthy",
          "creating",
          "runningContainers"
        ],
        "type": "object"
      },
      "WorkerNodeContainerPlacement": {
        "properties": {
          "containersStats": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationCurrentContainers"
              }
            ],
            "description": "現在配置されているコンテナ情報",
            "nullable": true,
            "type": "object"
          },
          "desired": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationDesiredContainers"
              }
            ],
            "description": "desired（目標配置）情報",
            "nullable": true,
            "type": "object"
          },
          "nodeID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkerNodeID"
              }
            ],
            "description": "ワーカノードID"
          }
        },
        "required": [
          "nodeID",
          "containersStats",
          "desired"
        ],
        "type": "object"
      },
      "WorkerNodeID": {
        "format": "uuid",
        "type": "string"
      },
      "WorkerNodeInterfaceAddress": {
        "properties": {
          "address": {
            "description": "アドレス",
            "type": "string"
          }
        },
        "required": [
          "address"
        ],
        "type": "object"
      },
      "WorkerNodeNetworkInterface": {
        "properties": {
          "addresses": {
            "description": "インターフェースに割り当てられたIPアドレスのリスト",
            "items": {
              "$ref": "#/components/schemas/WorkerNodeInterfaceAddress"
            },
            "type": "array"
          },
          "interfaceIndex": {
            "description": "インターフェース番号。eth0 なら 0。eth1 なら 1。",
            "format": "int16",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "interfaceIndex",
          "addresses"
        ],
        "type": "object"
      },
      "WorkerNodeRunningContainer": {
        "properties": {
          "applicationID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationID"
              }
            ],
            "description": "アプリケーションID"
          },
          "applicationVersion": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApplicationVersionNumber"
              }
            ],
            "description": "アプリケーションバージョン"
          },
          "containerID": {
            "description": "コンテナID",
            "type": "string"
          },
          "image": {
            "description": "コンテナのイメージ",
            "type": "string"
          },
          "name": {
            "description": "コンテナ名",
            "type": "string"
          },
          "startedAt": {
            "description": "コンテナの開始日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          },
          "state": {
            "description": "コンテナのステート（created、running、restarting、removing、paused、exited、dead のうちいずれか）",
            "type": "string"
          },
          "status": {
            "description": "コンテナのステータス",
            "type": "string"
          }
        },
        "required": [
          "containerID",
          "name",
          "state",
          "status",
          "image",
          "startedAt",
          "applicationID",
          "applicationVersion"
        ],
        "type": "object"
      },
      "WorkerNodeStatus": {
        "description": "ワーカノードの状態を表す列挙型",
        "enum": [
          "healthy",
          "unhealthy",
          "creating",
          "starting"
        ],
        "type": "string"
      },
      "WorkerNodeSummary": {
        "properties": {
          "archiveVersion": {
            "description": "ノードにインストールされているアーカイブのバージョン",
            "type": "string"
          },
          "createErrorMessage": {
            "description": "ノード作成に関するエラーメッセージ",
            "type": "string"
          },
          "created": {
            "description": "リソース作成日時：UNIX時間（秒）",
            "format": "unixtime",
            "type": "integer"
          },
          "draining": {
            "description": "ドレイン状態かどうか",
            "type": "boolean"
          },
          "networkInterfaces": {
            "description": "ネットワークインターフェース情報",
            "items": {
              "$ref": "#/components/schemas/WorkerNodeNetworkInterface"
            },
            "type": "array"
          },
          "resourceID": {
            "description": "アプライアンスリソースID",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkerNodeStatus"
              }
            ],
            "description": "ノード状態"
          },
          "workerNodeID": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkerNodeID"
              }
            ],
            "description": "ワーカノードID"
          }
        },
        "required": [
          "workerNodeID",
          "resourceID",
          "draining",
          "status",
          "networkInterfaces",
          "created"
        ],
        "type": "object"
      },
      "WorkerServiceClass": {
        "properties": {
          "name": {
            "description": "サービスクラスの名前",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "path": {
            "description": "サービスクラスのパス",
            "type": "string"
          }
        },
        "required": [
          "path",
          "name"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "BasicAuth": {
        "scheme": "Basic",
        "type": "http"
      }
    }
  },
  "externalDocs": {
    "description": "リリースノート | さくらのクラウド マニュアル",
    "url": "https://manual.sakura.ad.jp/cloud/apprun-dedicated/releasenote.html"
  },
  "info": {
    "contact": {
      "name": "SAKURA internet Inc."
    },
    "description": "# 更新履歴\n\n- 2026-07-29 (v1.4.0): クラスタのロードバランサ設定取得・更新エンドポイントを追加\n- 2026-07-15 (v1.3.1): Response samplesを修正\n\n---\n\n「AppRun専有型」が提供する API の利用方法とサンプルを公開しています。\n\n# 基本的な使い方\n\n## APIキーの発行\n\nAPI を利用するには、認証用の「APIキー」が必要です。事前にキーを発行してください。\\\nAPIキーは、「ユーザーID」「パスワード」に相当する「トークン」と呼ばれる認証情報で構成されています。\n\n| 項目名 | APIキー発行時の項目名 | このドキュメント内での例 |\n|--------|----------------------|--------------------------|\n| ユーザーID | アクセストークン (UUID) | 01234567-89ab-cdef-0123-456789abcdef |\n| パスワード | アクセストークンシークレット | SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM |\n\n### 操作マニュアル\n\n[APIキー | さくらのクラウド ドキュメント](https://manual.sakura.ad.jp/cloud/api/apikey.html)\n\n## APIエンドポイント\n\n`https://secure.sakura.ad.jp/cloud/api/apprun-dedicated/1.0/`\n\n---\n",
    "license": {
      "name": "Copyright(C) SAKURA internet Inc. all rights reserved."
    },
    "title": "AppRun専有型 API",
    "version": "1.4.0"
  },
  "openapi": "3.0.0",
  "paths": {
    "/applications": {
      "get": {
        "description": "指定したアカウントに紐づくアプリケーションの一覧を返します。",
        "operationId": "listApplications",
        "parameters": [
          {
            "explode": false,
            "in": "query",
            "name": "clusterID",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "description": "前ページの最後のID。これ以降のデータを取得するためのカーソル。ページネーションに利用します。",
            "explode": false,
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ApplicationID"
            }
          },
          {
            "description": "1ページあたりの最大取得件数。",
            "explode": false,
            "in": "query",
            "name": "maxItems",
            "required": true,
            "schema": {
              "default": 20,
              "format": "int64",
              "maximum": 30,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListApplicationsResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "アカウント内のアプリケーションの一覧を取得",
        "tags": [
          "application"
        ]
      },
      "post": {
        "description": "指定したクラスタに新しいアプリケーションを作成します。1アカウントにつき最大10個まで作成可能です。",
        "operationId": "createApplication",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateApplicationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateApplicationResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "新しいアプリケーションの作成",
        "tags": [
          "application"
        ]
      }
    },
    "/applications/{applicationID}": {
      "delete": {
        "description": "指定したアプリケーションを削除します。\n\n## 前提条件\n\n- 当該アプリケーションに **アクティブなバージョンが存在しない** こと\n- いずれのワーカノードでも当該アプリケーションの **コンテナが稼働していない** こと",
        "operationId": "deleteApplication",
        "parameters": [
          {
            "in": "path",
            "name": "applicationID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ApplicationID"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful. "
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "アプリケーションの削除",
        "tags": [
          "application"
        ]
      },
      "get": {
        "description": "指定したアプリケーションIDの詳細を返します。",
        "operationId": "readApplication",
        "parameters": [
          {
            "in": "path",
            "name": "applicationID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ApplicationID"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadApplicationResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "アプリケーションの詳細を取得",
        "tags": [
          "application"
        ]
      },
      "put": {
        "description": "アプリケーションのactiveVersionなどを更新します。クラスタの変更はできません。activeVersionを変更すると指定したバージョンがデプロイされます。activeVersionをnullにするとアプリケーションは非アクティブ状態になり、デプロイされなくなります。アプリケーション削除前にはactiveVersionをnullにする必要があります。",
        "operationId": "updateApplication",
        "parameters": [
          {
            "in": "path",
            "name": "applicationID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ApplicationID"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateApplicationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful. "
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "アプリケーション情報の更新",
        "tags": [
          "application"
        ]
      }
    },
    "/applications/{applicationID}/containers": {
      "get": {
        "description": "指定したアプリケーションの各ワーカノード上でのコンテナ配置情報を返します。",
        "operationId": "listApplicationContainers",
        "parameters": [
          {
            "in": "path",
            "name": "applicationID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ApplicationID"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListApplicationContainersResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "アプリケーションのノードごとのコンテナ配置情報を取得",
        "tags": [
          "application"
        ]
      }
    },
    "/applications/{applicationID}/versions": {
      "get": {
        "description": "指定されたアプリケーションのバージョン一覧を返します。",
        "operationId": "listApplicationVersions",
        "parameters": [
          {
            "in": "path",
            "name": "applicationID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ApplicationID"
            }
          },
          {
            "description": "前ページの最後のID。これ以降のデータを取得するためのカーソル。",
            "explode": false,
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ApplicationVersionNumber"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "maxItems",
            "required": true,
            "schema": {
              "default": 30,
              "format": "int64",
              "maximum": 30,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListApplicationVersionsResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "アプリケーションバージョンの一覧を取得",
        "tags": [
          "application_version"
        ]
      },
      "post": {
        "description": "アプリケーションバージョンを作成します。アプリケーションバージョンを作成するだけではノードにデプロイされません。アプリケーションのアクティブバージョンに指定するとノードにデプロイされます。",
        "operationId": "createApplicationVersion",
        "parameters": [
          {
            "in": "path",
            "name": "applicationID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ApplicationID"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateApplicationVersionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateApplicationVersionResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "アプリケーションバージョンの作成",
        "tags": [
          "application_version"
        ]
      }
    },
    "/applications/{applicationID}/versions/{version}": {
      "delete": {
        "description": "現在ノードにデプロイされているバージョンおよびアクティブなバージョンは削除できません。",
        "operationId": "deleteApplicationVersion",
        "parameters": [
          {
            "in": "path",
            "name": "applicationID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ApplicationID"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ApplicationVersionNumber"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful. "
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "アプリケーションバージョンの削除",
        "tags": [
          "application_version"
        ]
      },
      "get": {
        "description": "指定されたバージョンの詳細を返します。",
        "operationId": "readApplicationVersion",
        "parameters": [
          {
            "in": "path",
            "name": "applicationID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ApplicationID"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ApplicationVersionNumber"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadApplicationVersionResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "アプリケーションバージョンの詳細を取得",
        "tags": [
          "application_version"
        ]
      }
    },
    "/clusters": {
      "get": {
        "description": "アカウントに紐づくクラスタの一覧を返します。ページネーションに対応します。",
        "operationId": "listClusters",
        "parameters": [
          {
            "explode": false,
            "in": "query",
            "name": "lastClusterID",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "description": "前ページの最後のID。これ以降のデータを取得するためのカーソル。",
            "explode": false,
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "maxItems",
            "required": true,
            "schema": {
              "default": 20,
              "format": "int64",
              "maximum": 30,
              "minimum": 5,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListClustersResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "クラスタの一覧を取得",
        "tags": [
          "cluster"
        ]
      },
      "post": {
        "description": "新しいクラスタを作成します。作成後にクラスタIDを返します。",
        "operationId": "createCluster",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateClusterRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateClusterResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "クラスタの作成",
        "tags": [
          "cluster"
        ]
      }
    },
    "/clusters/{clusterID}": {
      "delete": {
        "description": "指定したクラスタを削除します。",
        "operationId": "deleteCluster",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful. "
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "クラスタの削除",
        "tags": [
          "cluster"
        ]
      },
      "get": {
        "description": "指定したクラスタの詳細を返します。",
        "operationId": "readCluster",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadClusterResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "クラスタの詳細を取得",
        "tags": [
          "cluster"
        ]
      },
      "put": {
        "description": "指定したクラスタの設定を更新します。",
        "operationId": "updateCluster",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateClusterRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful. "
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "クラスタの更新",
        "tags": [
          "cluster"
        ]
      }
    },
    "/clusters/{clusterID}/asg": {
      "get": {
        "description": "クラスタに所属するオートスケーリンググループの一覧を返します。ページネーションに対応します。",
        "operationId": "listAutoScalingGroups",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "lastAutoScalingGroupID",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/AutoScalingGroupID"
            }
          },
          {
            "description": "前ページの最後のID。これ以降のデータを取得するためのカーソル。",
            "explode": false,
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/AutoScalingGroupID"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "maxItems",
            "required": true,
            "schema": {
              "default": 20,
              "format": "int64",
              "maximum": 30,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListAutoScalingGroupsResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "オートスケーリンググループの一覧を取得",
        "tags": [
          "cluster"
        ]
      },
      "post": {
        "description": "新しいオートスケーリンググループを作成します。",
        "operationId": "createAutoScalingGroup",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAutoScalingGroupRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateAutoScalingGroupResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "オートスケーリンググループの作成",
        "tags": [
          "cluster"
        ]
      }
    },
    "/clusters/{clusterID}/asg/{autoScalingGroupID}": {
      "delete": {
        "description": "指定したオートスケーリンググループを削除します。",
        "operationId": "deleteAutoScalingGroup",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "autoScalingGroupID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AutoScalingGroupID"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful. "
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "オートスケーリンググループの削除",
        "tags": [
          "cluster"
        ]
      },
      "get": {
        "description": "指定したオートスケーリンググループの詳細を返します。",
        "operationId": "readAutoScalingGroup",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "autoScalingGroupID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AutoScalingGroupID"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadAutoScalingGroupResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "オートスケーリンググループの詳細を取得",
        "tags": [
          "cluster"
        ]
      }
    },
    "/clusters/{clusterID}/asg/{autoScalingGroupID}/load_balancers": {
      "get": {
        "description": "オートスケーリンググループに属するロードバランサの一覧を返します。ページネーションに対応します。",
        "operationId": "listLoadBalancers",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "autoScalingGroupID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AutoScalingGroupID"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/LoadBalancerID"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "maxItems",
            "required": true,
            "schema": {
              "default": 20,
              "format": "int64",
              "maximum": 30,
              "minimum": 2,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListLoadBalancersResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "ロードバランサの一覧を取得",
        "tags": [
          "cluster"
        ]
      },
      "post": {
        "description": "指定したオートスケーリンググループにロードバランサを作成します。",
        "operationId": "createLoadBalancer",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "autoScalingGroupID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AutoScalingGroupID"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLoadBalancerRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateLoadBalancerResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "ロードバランサの作成",
        "tags": [
          "cluster"
        ]
      }
    },
    "/clusters/{clusterID}/asg/{autoScalingGroupID}/load_balancers/{loadBalancerID}": {
      "delete": {
        "description": "指定したロードバランサを削除します。",
        "operationId": "deleteLoadBalancer",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "autoScalingGroupID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AutoScalingGroupID"
            }
          },
          {
            "in": "path",
            "name": "loadBalancerID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/LoadBalancerID"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful. "
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "ロードバランサを削除する",
        "tags": [
          "cluster"
        ]
      },
      "get": {
        "description": "指定したロードバランサの詳細を返します。",
        "operationId": "readLoadBalancer",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "autoScalingGroupID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AutoScalingGroupID"
            }
          },
          {
            "in": "path",
            "name": "loadBalancerID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/LoadBalancerID"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadLoadBalancerResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "ロードバランサの詳細を取得",
        "tags": [
          "cluster"
        ]
      }
    },
    "/clusters/{clusterID}/asg/{autoScalingGroupID}/load_balancers/{loadBalancerID}/load_balancer_nodes": {
      "get": {
        "description": "指定したロードバランサに属するノードの一覧を返します。",
        "operationId": "listLoadBalancerNodes",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "autoScalingGroupID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AutoScalingGroupID"
            }
          },
          {
            "in": "path",
            "name": "loadBalancerID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/LoadBalancerID"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/LoadBalancerNodeID"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "maxItems",
            "required": true,
            "schema": {
              "default": 20,
              "format": "int64",
              "maximum": 30,
              "minimum": 2,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListLoadBalancerNodesResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "ロードバランサノードの一覧を取得",
        "tags": [
          "cluster"
        ]
      }
    },
    "/clusters/{clusterID}/asg/{autoScalingGroupID}/load_balancers/{loadBalancerID}/load_balancer_nodes/{loadBalancerNodeID}": {
      "get": {
        "description": "指定したロードバランサノードの詳細を返します。",
        "operationId": "readLoadBalancerNode",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "autoScalingGroupID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AutoScalingGroupID"
            }
          },
          {
            "in": "path",
            "name": "loadBalancerID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/LoadBalancerID"
            }
          },
          {
            "in": "path",
            "name": "loadBalancerNodeID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/LoadBalancerNodeID"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadLoadBalancerNodeResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "ロードバランサノードの詳細を取得",
        "tags": [
          "cluster"
        ]
      }
    },
    "/clusters/{clusterID}/asg/{autoScalingGroupID}/worker_nodes": {
      "get": {
        "description": "オートスケーリンググループに所属するワーカノードの一覧を返します。ページネーションに対応します。",
        "operationId": "listWorkerNodes",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "autoScalingGroupID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AutoScalingGroupID"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/WorkerNodeID"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "maxItems",
            "required": true,
            "schema": {
              "default": 20,
              "format": "int64",
              "maximum": 100,
              "minimum": 2,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListWorkerNodesResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "オートスケーリンググループに所属するワーカノードの一覧を取得",
        "tags": [
          "cluster"
        ]
      }
    },
    "/clusters/{clusterID}/asg/{autoScalingGroupID}/worker_nodes/{workerNodeID}": {
      "get": {
        "description": "指定したワーカノードの詳細を返します。",
        "operationId": "readWorkerNode",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "autoScalingGroupID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AutoScalingGroupID"
            }
          },
          {
            "in": "path",
            "name": "workerNodeID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkerNodeID"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadWorkerNodeResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "オートスケーリンググループに所属するワーカノードの詳細を取得",
        "tags": [
          "cluster"
        ]
      }
    },
    "/clusters/{clusterID}/asg/{autoScalingGroupID}/worker_nodes/{workerNodeID}/draining": {
      "put": {
        "description": "指定したワーカノードのドレイン状態を更新します（ドレインを有効/無効にします）。",
        "operationId": "updateWorkerNodeDraining",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "autoScalingGroupID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AutoScalingGroupID"
            }
          },
          {
            "in": "path",
            "name": "workerNodeID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/WorkerNodeID"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWorkerNodeDrainingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful. "
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "ワーカノードのドレイン状態を変更する",
        "tags": [
          "cluster"
        ]
      }
    },
    "/clusters/{clusterID}/certificates": {
      "get": {
        "description": "クラスタ内の証明書一覧を返します。ページネーションに対応します。",
        "operationId": "listCertificates",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "description": "前ページの最後のID。これ以降のデータを取得するためのカーソル。",
            "explode": false,
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/CertificateID"
            }
          },
          {
            "explode": false,
            "in": "query",
            "name": "maxItems",
            "required": true,
            "schema": {
              "default": 20,
              "format": "int64",
              "maximum": 30,
              "minimum": 5,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListCertificatesResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "証明書の一覧を取得",
        "tags": [
          "certificate"
        ]
      },
      "post": {
        "description": "新しい証明書を作成します。",
        "operationId": "createCertificate",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCertificateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateCertificateResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "証明書の作成",
        "tags": [
          "certificate"
        ]
      }
    },
    "/clusters/{clusterID}/certificates/{certificateID}": {
      "delete": {
        "description": "指定した証明書を削除します。",
        "operationId": "deleteCertificate",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "certificateID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CertificateID"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful. "
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "証明書の削除",
        "tags": [
          "certificate"
        ]
      },
      "get": {
        "description": "指定した証明書の詳細を返します。",
        "operationId": "readCertificate",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "certificateID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CertificateID"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadCertificateResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "証明書の詳細を取得",
        "tags": [
          "certificate"
        ]
      },
      "put": {
        "description": "指定した証明書を更新します。",
        "operationId": "updateCertificate",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          },
          {
            "in": "path",
            "name": "certificateID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CertificateID"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCertificateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful. "
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "証明書の更新",
        "tags": [
          "certificate"
        ]
      }
    },
    "/clusters/{clusterID}/load_balancer": {
      "get": {
        "description": "指定したクラスタに紐づくロードバランサ設定（Let's Encrypt メール設定の有無と公開ポート設定）を返します。",
        "operationId": "readClusterLoadBalancer",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadClusterLoadBalancerResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "クラスタのロードバランサ設定を取得",
        "tags": [
          "cluster"
        ]
      },
      "patch": {
        "description": "指定したクラスタに紐づくロードバランサ設定を部分更新します。未指定の項目は既存値を維持します。",
        "operationId": "patchClusterLoadBalancer",
        "parameters": [
          {
            "in": "path",
            "name": "clusterID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ClusterID"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/merge-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PatchClusterLoadBalancerRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "There is no content to send for this request, but the headers may be useful. "
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "クラスタのロードバランサ設定を部分更新",
        "tags": [
          "cluster"
        ]
      }
    },
    "/limits": {
      "get": {
        "description": "プロジェクトに紐づくリソース制限値を返します。",
        "operationId": "readLimits",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReadLimitsResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "プロジェクトのリソース制限値の取得",
        "tags": [
          "limit"
        ]
      }
    },
    "/service_classes/lb": {
      "get": {
        "description": "ロードバランササービスクラスの一覧を返します。",
        "operationId": "listLoadBalancerServiceClasses",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListLoadBalancerServiceClassesResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "ロードバランササービスクラスの一覧を取得",
        "tags": [
          "service_class"
        ]
      }
    },
    "/service_classes/worker": {
      "get": {
        "description": "ワーカノードサービスクラスの一覧を返します。",
        "operationId": "listWorkerServiceClasses",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListWorkerServiceClassesResponse"
                }
              }
            },
            "description": "The request has succeeded."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "ワーカノードサービスクラスの一覧を取得",
        "tags": [
          "service_class"
        ]
      }
    }
  },
  "security": [
    {
      "BasicAuth": []
    }
  ],
  "servers": [
    {
      "description": "AppRun専有型 API エンドポイント",
      "url": "https://secure.sakura.ad.jp/cloud/api/apprun-dedicated/1.0",
      "variables": {}
    }
  ],
  "tags": [
    {
      "name": "application"
    },
    {
      "name": "application_version"
    },
    {
      "name": "cluster"
    },
    {
      "name": "certificate"
    },
    {
      "name": "limit"
    },
    {
      "name": "service_class"
    }
  ]
}
