참조
오류 코드
CLI가 오류 [code] … 형식으로 출력하는 오류 코드 목록입니다. 프로그램에서는 code로 처리하고 message는 표시용으로만 사용하세요.
이 페이지의 기준 소스는
cp/internal/public, cp/internal/core, node/internal/front, node/internal/agent의 Go 소스입니다. 문서를 빌드할 때 해당 소스에서 내용을 생성합니다.오류 응답 읽기
실패한 API 응답은 모두 동일한 구조를 사용합니다.
{ "error": { "code": "database_required", "message": "먼저 데이터베이스를 생성하세요" } }CLI는 이 응답을 오류 [database_required] … 형식으로 출력하고 종료 코드 1로 끝냅니다. 자동화 스크립트에서는 code로 분기하세요. message는 사용자를 위한 설명이므로 언제든 변경될 수 있습니다.
같은 code가 상황에 따라 여러 HTTP 상태 코드로 반환될 수 있습니다. 해당하는 경우 상태 코드 열에 모두 표시합니다.
오류 코드 목록 (76)
| 코드 | HTTP 상태 | 설명 |
|---|---|---|
access_denied | 401 | 접근 제어 우회 시크릿이 올바르지 않습니다. |
access_exchange_failed | 502 | 접근 권한 확인을 완료하지 못했습니다. 잠시 후 다시 시도하세요. |
access_required | 401 | 이 배포에는 접근 제어가 설정되어 있어 로그인이 필요합니다. |
access_unavailable | 503 | 접근 권한을 확인할 수 없어 요청을 처리하지 않았습니다. |
already_member | 409 | 사용자가 이미 조직의 구성원입니다. 역할은 별도의 명령으로 변경하세요. |
already_pro | 409 | 이미 프로 요금제다 |
backend | — | 백엔드 서비스가 요청을 처리하지 못했습니다. |
backup_failed | 503 | 데이터베이스 백업 생성에 실패했습니다. |
bad_request | 400 | 요청 형식이 올바르지 않습니다. |
bad_signature | 403 | 웹훅 서명이 맞지 않는다 |
billing_off | 501 | 결제가 설정되지 않았다 |
billing_unavailable | 502 | 결제 서비스가 응답하지 않는다 |
bundle_too_large | — | 번들 크기가 업로드 제한을 초과했습니다. |
cold | 503 | 콜드 상태의 프로젝트를 백업에서 복원하는 중입니다. 잠시 후 다시 시도하세요. |
compatibility_date_unsupported | 400 | compatibilityDate … 은 이 런타임의 최대 … 을 넘습니다 — runlot.json 의 값을 … 이하로 낮추세요 |
confirm_mismatch | 400 | 확인 문자열이 프로젝트 이름과 일치하지 않습니다. |
cron_limit | 400 | … 요금제는 조직당 예약 실행 … 개까지입니다 (지금 … 개, 이 배포가 … 개를 더합니다) |
drain_incomplete | 503 | 기존 요청 처리가 끝나지 않아 안전하게 전환할 수 없습니다. |
email_failed | 503 | … |
email_not_declared | 409 | … |
email_rate_limited | 429 | … |
export_failed | 502 · 503 | 데이터베이스 진단 내보내기에 실패했습니다. |
forbidden | 403 | 인증된 사용자이지만 이 작업을 수행할 권한이 없습니다. |
front_not_ready | 503 | 트래픽 프런트엔드의 초기 동기화가 아직 완료되지 않았습니다. |
front_unacked | 503 | 트래픽 프런트엔드가 구성 변경을 확인하지 않았습니다. |
git_unavailable | 503 | 저장소 브라우즈가 켜져 있지 않습니다 |
git_unreachable | 503 | 저장소를 읽지 못했습니다 |
github_token | 502 | GitHub 토큰을 교환하지 못했습니다. |
github_user | 502 | GitHub 사용자 정보를 조회하지 못했습니다. |
grant_failed | 500 | 배포 권한을 갱신하지 못했습니다. |
hostname_taken | 409 | 이 호스트 이름은 이미 다른 프로젝트에서 사용 중입니다. |
internal | 500 | 서버 내부 오류가 발생했습니다. 잠시 후 다시 시도하세요. |
invite_expired | 409 | 만료된 초대입니다 — 관리자에게 다시 보내 달라고 요청해 주세요 |
invite_revoked | 409 | 취소된 초대입니다 — 관리자에게 다시 요청해 주세요 |
invite_used | 409 | 이미 수락된 초대입니다 |
last_admin | 409 | 조직의 마지막 관리자입니다. 역할을 변경하면 조직을 관리할 수 있는 사용자가 없어집니다. |
no_core | 503 | 컨트롤 플레인 핵심 서비스 주소가 설정되지 않았습니다. |
no_email | 501 | 이 노드는 메일을 받지 못한다 |
no_host | 400 | 요청에 Host 헤더가 없습니다. |
no_log_buffer | 503 | 관리자 API에 로그 소스가 설정되지 않았습니다. |
no_placement | 503 | 프로젝트가 아직 노드에 배치되지 않았습니다. |
no_ses_hook | 501 | SES 웹훅이 꺼져 있다 |
no_wake | 501 | 이 노드는 유휴 상태의 프로젝트를 시작할 수 없습니다. |
no_writable_state | 501 | 이 노드에는 해당 데이터베이스 작업을 수행할 수 있는 저장소가 없습니다. |
node_unreachable | 502 | 노드에 연결할 수 없습니다. 잠시 후 다시 시도하세요. |
not_a_member | 403 | 사용자가 이 조직의 구성원이 아닙니다. |
not_found | 404 | 요청한 조직, 프로젝트 또는 배포를 찾을 수 없습니다. |
not_here | 404 | 요청한 프로젝트는 이 노드에서 처리할 수 없습니다. |
not_pro | 409 | 프로 요금제가 아니다 |
not_ready | 503 | 초기 구성 동기화가 아직 완료되지 않았습니다. |
op_conflict | 409 | 같은 작업 ID가 다른 작업에 이미 사용되고 있습니다. |
op_in_flight | 503 · 409 | 같은 작업이 이미 진행 중입니다. |
org_slug_taken | 409 | 이 조직 slug는 이미 사용 중입니다. |
project_name_taken | 409 | 이 프로젝트 이름은 이미 사용 중입니다. |
rate_limited | — | 요청 한도를 초과했습니다. 잠시 후 다시 시도하세요. |
repo_exists | 409 | 저장소 … 가 이미 있습니다 |
reserved_name | 400 | 예약된 이름이므로 사용할 수 없습니다. |
restore_busy | 429 | 동시에 처리할 수 있는 복원 작업 수를 초과했습니다. |
restore_failed | 500 | 데이터베이스 복원에 실패했습니다. |
restore_stalled | 503 | 데이터베이스 복원 작업이 중단되었습니다. 지원팀에 문의하세요. |
restore_too_large | 429 | 복원 작업이 노드의 복원 용량 제한을 초과했습니다. |
restoring | 503 | 데이터베이스를 복원하고 있습니다. 완료된 후 다시 시도하세요. |
revoked | 403 | 이 배치에 대한 권한이 취소되었습니다. |
seal_failed | 503 | 데이터베이스 최종 세대 저장에 실패했습니다. |
ssh_key_exists | 409 | 이미 등록된 공개키입니다 |
suspended | 403 · 409 | 프로젝트가 일시 중지되어 있습니다. |
unauthorized | 401 | 토큰이 없거나 만료되었습니다. runlot login을 다시 실행하세요. |
unknown | — | Runlot 서버가 아닌 중간 프록시 등이 응답했습니다. |
unknown_hostname | 404 | 이 노드에서 해당 호스트 이름에 연결된 프로젝트를 찾을 수 없습니다. |
unknown_node | 503 | 프로젝트의 홈 노드 주소를 확인하지 못했습니다. |
unknown_state | 503 | 인식할 수 없는 배치 상태입니다. |
unsupported | — | 현재 저장소 백엔드에서는 이 기능을 지원하지 않습니다. |
upstream_unreachable | — | 배포된 워커에 연결할 수 없습니다. 배포 상태를 확인하세요. |
user_not_found | 404 | 이 계정으로 로그인한 기록이 없습니다. 먼저 한 번 로그인하세요. |
wake_failed | 503 | 유휴 상태의 프로젝트를 시작하지 못했습니다. |
workerd_unchecked | 503 · 500 | 워커의 커밋 경로 상태를 확인하지 못했습니다. |
운영 서비스에서 반환하는 오류 (55)
배치, 복원, 리스 관리처럼 Runlot 내부 작업이 실패하면 해당 오류 코드가 반환됩니다. 대부분은 잠시 후 다시 시도하면 해결됩니다. 같은 오류가 계속되면 지원팀에 문의하세요.
| 코드 | HTTP 상태 | 설명 |
|---|---|---|
already_done | 409 | 요청한 작업은 이미 완료되었습니다. |
cas_conflict | 409 | 리소스 상태가 변경되어 요청을 적용할 수 없습니다. 최신 상태를 확인한 후 다시 시도하세요. |
cert_generation | 403 | 요청에 사용한 인증서 세대가 폐기되었습니다. |
claimed | 409 | 다른 인스턴스가 이 데이터베이스를 사용 중입니다. 잠시 후 다시 시도하세요. |
cname_conflict | 409 | 같은 DNS 이름에는 CNAME 레코드와 다른 유형의 레코드를 함께 둘 수 없습니다. |
database_required | 409 | 먼저 데이터베이스가 필요합니다. runlot.json에 "database": true를 적고 배포하세요. |
db_rewound | 409 | 메타데이터 DB가 이전 상태로 복원되어 리스 발급을 중단했습니다. 운영자의 복구 조치가 필요합니다. |
dek_unwrap_failed | 500 | 프로젝트 데이터 암호화 키를 복호화하지 못했습니다. |
dns_not_configured | 503 | 네임서버 설정이 완료되지 않아 도메인을 구매할 수 없습니다. |
dnssec_off | 409 | 도메인 영역의 DNSSEC가 비활성화되어 있습니다. 먼저 활성화하세요. |
domain_taken | 409 | 이미 등록된 도메인입니다. |
domain_unavailable | 409 | 등록할 수 없는 도메인입니다. |
email_address_taken | 409 | 주소 … 는 다른 프로젝트가 쓰고 있다 |
email_unavailable | 409 | 이 배치에는 메일 도메인이 없다 (RUNLOT_MAIL_DOMAIN) — 이메일을 켤 수 없다 |
era_ahead | 409 | 요청의 상태 버전(era)이 컨트롤 플레인에 저장된 버전보다 높습니다. |
era_write_failed | 500 | 상태 버전(era)을 저장하지 못했습니다. |
identity_mismatch | 403 | 인증서의 호스트 이름과 요청 본문의 호스트 이름이 일치하지 않습니다. |
invalid_provider | 400 | 지원하지 않는 인증 공급자입니다. |
last_node_unavailable | 503 | 최종 데이터베이스 세대를 보유한 노드를 사용할 수 없습니다. |
lease_alive | 409 | 기존 리스가 아직 유효하여 요청을 처리할 수 없습니다. |
lease_drain_pending | 409 | 기존 리스가 종료되는 중입니다. 잠시 후 다시 시도하세요. |
lease_quarantine | 409 | 리스가 격리 상태여서 요청을 처리할 수 없습니다. |
lease_seq_ahead | 409 | 요청의 리스 순번이 컨트롤 플레인이 인식하는 상태보다 앞섭니다. |
lifecycle_disabled | 503 | 수명 주기 작업이 비활성화되어 있습니다. |
managed_rrset | 409 | Runlot이 관리하는 DNS 레코드이므로 직접 수정할 수 없습니다. |
master_key_version | 503 | 현재 컨트롤 플레인은 요청에 필요한 마스터 키 버전을 보유하지 않습니다. |
no_access_key | 503 | 접근 제어 쿠키를 만들기 위한 키가 설정되지 않았습니다. |
no_database | 409 | 이 프로젝트에는 데이터베이스가 연결되어 있지 않습니다. |
no_home_node | 503 · 409 | 프로젝트의 홈 노드 주소를 확인하지 못했습니다. |
no_last_node | 503 | 최종 데이터베이스 세대를 보유했던 노드를 확인하지 못했습니다. |
no_master_key | 503 | 컨트롤 플레인의 마스터 키가 설정되지 않았습니다. |
no_node | 503 | 배치할 수 있는 노드가 없습니다. |
no_node_admin | 503 | 노드 관리자 API 주소가 설정되지 않았습니다. |
no_session_key | 503 | 로그인 세션 연결에 필요한 키가 설정되지 않았습니다. |
no_slot | 503 | 사용 가능한 용량이 없습니다. 잠시 후 다시 시도하세요. |
node_not_active | 409 | 이 노드는 현재 배치 작업을 수행할 수 있는 상태가 아닙니다. |
not_abortable | 409 | 작업이 되돌릴 수 없는 단계에 도달해 중단할 수 없습니다. |
not_active | 409 | 현재 상태에서는 이 작업을 수행할 수 없습니다. |
not_cold | 409 | 프로젝트가 콜드 상태가 아니므로 재활성화 작업을 시작할 수 없습니다. |
not_granted | 404 | 이 프로젝트에는 인증 서비스가 연결되어 있지 않습니다. |
not_home | 403 · 409 | 이 노드는 요청한 프로젝트 세대의 홈 노드가 아닙니다. |
not_quarantined | 409 | 리스가 격리 상태가 아니므로 활성화할 수 없습니다. |
not_terminal | 409 | 작업이 아직 종료 상태가 아닙니다. |
op_stalled | 409 | 작업이 중단된 상태입니다. 원인을 해결한 후 다시 시작하세요. |
payment_failed | 402 | 결제가 승인되지 않았습니다. 결제 수단을 확인하세요. |
registrar_error | 502 | 도메인 등록기관에서 오류를 반환했습니다. |
registrar_not_configured | 503 | 도메인 등록기관이 아직 연결되지 않았습니다. |
registrar_rejected | 422 | 이 이름의 앞선 구매가 거절됐다: … |
saga_incomplete | 502 | 도메인 구매 작업이 완료되지 않았습니다. 같은 요청을 다시 보내면 이어서 처리합니다. |
stale_epoch | 409 | 이전 프로젝트 세대의 요청입니다. 최신 상태에서 다시 시도하세요. |
storage_unavailable | 409 | 이 프로젝트가 배치된 노드에 파일 저장소 백엔드가 없다 — 운영자가 노드에 백엔드를 붙여야 한다 |
too_large | — | 원문이 … 바이트를 넘는다 |
user_rrset | 409 | 사용자가 만든 DNS 레코드이므로 관리 레코드로 덮어쓸 수 없습니다. |
witness_unavailable | 503 | 메타데이터 DB 상태를 검증하는 witness 정보를 읽을 수 없어 리스 발급이나 활성화를 보류했습니다. |
zone_taken | 409 | 이 DNS 존은 이미 존재합니다. |