GPU Container
共通規約
- Base URL:
https://api-neo.fpt.ai/ - Path:
api/bff/v1/gpucontainer/{orgIdentifier}/workspaces/{workspaceIdentifier}/{action} - Method: すべてPOST。
- サービス固有ヘッダー:
X-ENV: <APP_ENV>、X-Region: <region> - 共通ヘッダー (apiClient):
X-Org-Id、X-Workspace-Id、X-User-Id - レスポンス:
{ "data": {...}, "errors": [] }
トークンとヘッダーの取得方法
- Portalにログインし、GPU Containerページを開く。
- ブラウザのDevToolsでNetworkタブを開き、
container.listリクエストを選択してAPIパス形式(orgIdentifierとworkspaceIdentifierを含む)を確認する。 - 以下のリクエストヘッダーをコピーする:
cookie、x-env、x-org-id、x-region、x-user-id、x-workspace-id。
エンドポイント一覧
| # | Action | クエリパラメータ | Body | 用途 |
|---|---|---|---|---|
| 1 | container.list | name(検索、任意) | {} | コンテナ一覧 |
| 2 | container.get | container_id | {} | コンテナ詳細 |
| 3 | container.stat | — | {} | ステータス別統計 |
| 4 | container.create | — | 下記参照 | コンテナ作成 |
| 5 | container.start | container_id | { "action": "START" } | 起動 |
| 6 | container.stop | container_id | { "action": "STOP" } | 停止 |
| 7 | container.restart | container_id | { "action": "RESTART" } | 再起動 |
| 8 | container.delete | container_id | {} | 削除 |
| 9 | container.edit | container_id | 下記参照 | 設定の編集 / ホワイトリストの更新 |
| 10 | container.downloadlog | container_id | {} | ログのダウンロード(responseType: blob) |
| 11 | container.template.list | — | {} | テンプレート一覧 |
| 12 | container.template.config | config_name | {} | テンプレート設定の詳細 |
| 13 | container.flavor.list | — | {} | GPUフレーバー一覧 |
| 14 | cost-estimation | — | 下記参照 | コスト見積もり |
リクエストボディ
4. container.create
{
"name": "my-container",
"instance_type": "H100",
"container_group": "",
"purpose": "SERVICE",
"description": "",
"container_settings": [{
"enable_ssh": true,
"authorized_keys": [{ "name": "key1", "ssh_key": "ssh-ed25519 AAAA..." }],
"image_setting": { "image_url": "...", "image_tag": "latest", "image_user": "", "image_password": "", "fptcloud_official": false },
"volume_settings": [{ "volume_type": "TEMP_DISK | PERSISTENT_DISK", "mount_path": "/workspace", "mount_capacity": 100 }],
"advance_setting": {
"http_ports": [{ "container_port": 8888 }],
"tcp_ports": [{ "container_port": 22 }],
"container_envs": [{ "key": "K", "value": "V" }],
"startup_cmd": { "cmd": [], "args": [] },
"healthchecks": []
}
}],
"billing_plan": { "billing_type": "PAYG", "billing_level": "NORMAL", "cost_estimate": 0, "currency_code": "USD" }
}
レスポンス: { id, name, status }。
9. container.edit
container.get で取得したコンテナオブジェクト全体を変更を加えて送り返す。
トップレベルフィールド: id、status、created_at、updated_at、tenant_id、name、container_group、purpose、instance_type、billing_plan、description、tags、domain、version、deleted。
container_settings[] フィールド: enable_ssh、authorized_keys、ssh_connect、image_setting、volume_settings[{volume_name?, volume_type, mount_path, mount_capacity}]、advance_setting{http_ports, tcp_ports, startup_cmd, container_envs, healthchecks, block_cidrs}。
ホワイトリストのみ更新する場合:
{ "block_cidrs": [{ "type": "TCP | HTTP", "ports": [8888], "sources": ["1.2.3.4/32"], "description": "" }] }
14. cost-estimation
{
"instance_type": "H100",
"container_settings": [{ "volume_settings": [{ "volume_type": "PERSISTENT_DISK", "mount_path": "/data", "mount_capacity": 100 }] }]
}
レスポンス: { org_id, items: [{ sku, quantity, price }], currency_code, total }。
レスポンス
| Action | レスポンス |
|---|---|
container.list | data: { items: ListItem[], total, page?, page_size?, total_pages? }; ListItem: id, name, status, region, org_id, ws_id, created_by, purpose, instance_type, container_group, tenant_id, container_settings[{image_setting, enable_ssh, authorized_keys, ssh_connect}], billing_plan, tags, created_at, updated_at |
container.get | ListItemと同じだがcontainer_settings[]が完全: image_setting, enable_ssh, authorized_keys, ssh_connect, advance_setting, volume_settings, container_resource, observability.container_monitor{container_metric_url, container_log_url} |
container.stat | data: { stats: [{ status, count }] } |
container.template.list | data: { items: [{ name, url, icon?, priority?, fptcloud_official? }], total, page?, size? } |
container.template.config | { name, priority, fptcloud_official, purpose, flavor_name, description, instance_type, container_settings[{ image_settings, volume_settings, advanced_setting }] } |
container.flavor.list | data: { items: [{ flavor, price_info{currency, value, unit?}, resource{cpu, ram, gpu, vram, temp_disk}, available, region }], total } |
列挙型 (Enum)
- status:
CREATING、RUNNING、STOPPED、PROCESSING、FAILED、DELETING、DELETED - billing_type:
PAYG、SAVING_PLAN_1_WEEK、SAVING_PLAN_1_MONTH、SAVING_PLAN_3_MONTH、SAVING_PLAN_1_YEAR - billing_level:
NORMAL、WARNING、STOPPED、AT_RISK - volume_type:
TEMP_DISK、PERSISTENT_DISK
エラーコード
エラー形式
エラー時、HTTPステータス ≠ 2xx でbodyは以下の形式:
{ "code": "DDI-SYSTEM-00001", "message": "...", "params": {}, "role_based": false }
role_based: true— 呼び出し元のロール(MANAGEMENT/WS_ADMIN/MEMBER)によってメッセージが異なる。- HTTP 401 — クライアントはログアウトしてログインページにリダイレクトする。
共通エラーコード (gateway / BFF / billing)
| Code | 意味 |
|---|---|
INSUFFICIENT_BALANCE | クレジット不足。MANAGEMENT ロールは自動でトップアップモーダルを開く。それ以外のロールはオーナーへの連絡を促される。 |
INSUFFICIENT_PERMISSIONS | この操作を実行する権限がない。 |
EQ-RESOURCE-SYSTEM-LIMIT | リソースのクォータに達した(params.name)。 |
BFF-CREATING-CONCURRENCY | このワークスペース/サービスで別のリソースが作成中。完了後に再試行する。 |
route_not_found | エンドポイントが存在しない。 |
method_not_allowed | メソッドが間違っている。POSTのみ使用可能。 |
request_too_large | ボディが64 KBを超えている。 |
invalid_token | トークンが無効または期限切れ。 |
gateway_internal_error | ゲートウェイ内部エラー。 |
upstream_unavailable | バックエンドサービスが一時的に利用不可。 |
gateway_timeout | バックエンドサービスがタイムアウト。 |
GPU Container 固有エラーコード
| Code | メッセージ |
|---|---|
DDI-SYSTEM-00001 | GPU ContainerサービスはこのテナントにはまだConfigされていません。Supportへお問い合わせください。 |
DDI-SYSTEM-00002 | 不明なエラーが発生しました。しばらくしてから再試行してください。 |