클라우드 샌드박스 삭제하기

클라우드 샌드박스 삭제하기

작업이 끝나면 샌드박스를 삭제해요. 삭제는 프로세스와 샌드박스 로컬 파일을 제거하므로, 결과를 먼저 다운로드하거나 스냅샷을 저장하세요.

출처: 문서

본문

생성 시 또는 리소스 이름을 읽어 얻은 현재 샌드박스 핸들을 사용하세요. SDK 클라이언트를 닫아도 샌드박스는 삭제되지 않아요.

삭제하고 기다리기

샌드박스 핸들을 통해 삭제한 다음 샌드박스가 사라질 때까지 기다려요. 삭제는 실행 중인 작업을 종료할 수 있어요. 먼저 샌드박스를 중지하기로 했다면 삭제 전에 그 전환이 끝날 때까지 기다리세요. 중지나 재개 중 삭제는 거부될 수 있어요.

예시는 멱등성 키(idempotency key)와 대기 마감을 받아요. 선택적인 force 설정은 서비스가 그렇지 않으면 샌드박스의 상태 때문에 거부할 때 삭제를 요청해요. 모든 상태를 즉시 삭제할 수 있다는 보장은 아니에요. 정리가 성공했다고 가정하지 말고 거부를 처리하세요.

핸들은 그것이 읽은 리소스 버전을 제공해요. 연산이 업데이트된 핸들을 반환하면 다음 연산에 그 핸들을 유지하세요. 이전 핸들은 스스로 업데이트되지 않아요.

리소스 버전이 바뀌어 삭제가 실패하면 refresh()를 호출하세요. 반환된 핸들을 검사하고 삭제가 여전히 적절한지 결정하세요. 새로고침은 원래 핸들을 바꾸지 않으므로 반환된 핸들에 대해 삭제를 호출하세요. 멱등성 키를 제공한다면 새 키를 사용하세요. 새로고침된 버전을 삭제하는 것은 거부된 요청의 재시도가 아니라 새로운 논리적 연산이에요.

대기가 타임아웃되면 샌드박스를 다시 읽어 상태를 확인하세요. 필요하면 정리를 재시도할 수 있도록 이름을 보관하세요. 완료된 삭제를 반복하는 것은 안전해요.

볼륨, 스냅샷, 저장된 시크릿 같은 별도 리소스는 자체 수명이 있어요. 아무것도 더 필요로 하지 않을 때만 삭제하세요.

핵심 코드:

const deleting = await sandbox.delete(
  { force },
  { idempotencyKey: requestId },
);
if (deleting) await deleting.waitUntilDeleted({ timeoutMs });

완전한 TypeScript 예시: removal/delete.ts

import type { Sandbox } from '@docker/sandboxes';

export async function deleteSandbox(
  sandbox: Sandbox,
  requestId: string,
  force = false,
  timeoutMs = 300_000,
) {
  const deleting = await sandbox.delete(
    { force },
    { idempotencyKey: requestId },
  );
  if (deleting) await deleting.waitUntilDeleted({ timeoutMs });
}

더 알아보기 (Learn more)