파일 저장소
storage 카테고리의 API 작업 3개를 다룹니다.
| 메서드 | 경로 | 설명 |
|---|---|---|
| GET | /v1/orgs/{orgSlug}/projects/{projectName}/storage | 객체 스토리지 상태 (runlot storage usage) |
| POST | /v1/orgs/{orgSlug}/projects/{projectName}/storage | 스토리지 권한 부여 (runlot deploy가 "storage": true 선언을 읽을 때 호출됩니다) |
| DELETE | /v1/orgs/{orgSlug}/projects/{projectName}/storage | 스토리지 사용 해지 (runlot storage delete) |
GET /v1/orgs/{orgSlug}/projects/{projectName}/storage
활성화 여부, prefix, 할당량, 사용량입니다 (docs/storage.md §7, §8). usedBytes는 노드가 보고한 마지막 관측값이므로 보고 주기만큼 지연됩니다 — 그 사이에 할당량을 약간 초과할 수 있습니다.
객체 목록 조회와 서명된 URL은 이 API의 대상이 아닙니다. 자격 증명은 node-agent에만 존재하며(§4.1), 바이트를 CP로 두 번 보내지 않는다는 것이 §5의 결정입니다.
뷰어 이상.
operationId getStorage
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 스토리지 상태 | StorageStatus |
| 403 | — | — |
| 404 | — | — |
| 503 | no_core — cp-core에 연결되지 않음 | Error |
POST /v1/orgs/{orgSlug}/projects/{projectName}/storage
이 작업은 idempotent합니다 — 두 번 호출해도 prefix는 변경되지 않습니다. 재시도가 prefix를 바꾼다면 그 prefix 아래에 이미 저장된 모든 객체가 보이지 않게 되고, 그 손실은 즉시 드러나지 않습니다.
요청 본문은 없습니다. prefix는 격리 경계이고(docs/storage.md §4.4), 할당량은 플랜에 의해 설정되므로(§4.5) 둘 다 사용자가 설정하는 값이 아닙니다.
활성화되면 노드는 다음 convergence에서 env.storage를 worker에 연결합니다. env.db와 마찬가지로 재배포가 필요하지 않습니다.
member 이상입니다. 감사 로그에는 storage.grant로 기록됩니다.
operationId grantStorage
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 부여 상태(이미 있었다면 기존 값) | StorageStatus |
| 403 | — | — |
| 404 | — | — |
| 503 | no_core | Error |
DELETE /v1/orgs/{orgSlug}/projects/{projectName}/storage
객체는 삭제되지 않습니다. prefix 아래의 모든 것을 삭제하는 작업은 op_id로 idempotent한 CP 작업이어야 하며(docs/storage.md §7, 데이터베이스 삭제와 같은 경로입니다), 그 경로는 아직 존재하지 않습니다 — 이 사실은 감사 로그에 기록됩니다.
비활성화 역시 idempotent합니다. 스토리지가 활성화되어 있지 않았을 때도 204를 반환합니다.
admin 이상입니다 — 과금은 멈추지만 객체는 고아 상태가 되므로, 배포 롤백과 같은 수준으로 다루지 않습니다. 감사 로그에는 storage.revoke로 기록됩니다.
operationId revokeStorage
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 204 | 분리됨 | — |
| 403 | — | — |
| 404 | — | — |
| 503 | no_core | Error |