클라우드 샌드박스 계속 실행하기
클라우드 샌드박스 계속 실행하기
버려진 작업이 무한정 실행되지 않도록 샌드박스 수명을 설정하고, 만료될 때 어떤 일이 일어날지 선택해 봐요.
출처: 문서
본문
인증된 클라이언트와 관리되는 이미지가 필요해요. 같은 수명 주기 옵션을 키트 실행 시에도 제공할 수 있어요.
생성 시 수명 설정
SDK가 보여주는 단위로 수명을 전달하고 만료 동작을 선택하세요. 예시는 초를 받아 SDK의 기간 표현으로 변환해요.
중지는 샌드박스를 나중에 사용하기 위해 보존하고, 삭제는 제거해요. 여러분의 선택이 만료 후 애플리케이션이 샌드박스의 파일을 필요로 하는지와 일치하는지 확인하세요. 계정 제한이 허용된 기간과 동작을 제한할 수 있어요.
항상 켜짐(always-on) 접근이 있는 계정은 대신 restart 동작을 선택할 수 있어요. 이것은 자동 중지-재개 주기를 통해 메모리를 보존해요. 중지된 동안 동시성 예약을 유지하며, 들어오는 요청에 응답하는 재시작과는 달라요.
예시는 시작을 기다려요. 대기 마감은 샌드박스 수명과는 별개예요. 클라이언트 대기를 끝내도 샌드박스가 삭제되지 않아요.
핵심 코드:
const sandbox = await client.create(
{
displayName: name,
image,
lifecycle: {
timeoutMs: lifeSeconds * 1_000,
onTimeout: stopOnTimeout ? 'stop' : 'delete',
},
},
{ timeoutMs: 300_000, idempotencyKey: requestId },
);
return sandbox.waitUntilRunning();
완전한 TypeScript 예시: timeout/deadline.ts
import type { Sandboxes } from '@docker/sandboxes';
export async function createWithDeadline(
client: Sandboxes,
name: string,
image: string,
lifeSeconds: number,
stopOnTimeout: boolean,
requestId: string,
) {
const sandbox = await client.create(
{
displayName: name,
image,
lifecycle: {
timeoutMs: lifeSeconds * 1_000,
onTimeout: stopOnTimeout ? 'stop' : 'delete',
},
},
{ timeoutMs: 300_000, idempotencyKey: requestId },
);
return sandbox.waitUntilRunning();
}
남은 수명 연장
renewTimeout()으로 샌드박스의 남은 수명을 연장해요. 기존 마감에 더할 증분이 아니라, 서비스가 갱신을 수락한 시점부터의 원하는 기간을 전달하세요. 갱신은 수명을 연장만 할 수 있고, 줄일 수는 없어요.
구성된 타임아웃을 만료 전에 갱신하세요. 호출이 실패하면 갱신이 적용되었다고 가정하지 말고 샌드박스의 현재 상태를 검사하세요.
서비스는 자동으로 재시작되는 샌드박스의 타임아웃을 관리해요. 그런 샌드박스는 직접 갱신하지 마세요.
중지 후 요청으로 트리거되는 재시작은 Resume on demand 문서를 참고하세요.
핵심 코드:
return sandbox.renewTimeout({ timeoutMs: remainingSeconds * 1_000 });
완전한 TypeScript 예시: timeout/renew.ts
import type { Sandboxes } from '@docker/sandboxes';
export async function renewSandboxTimeout(
client: Sandboxes,
name: string,
remainingSeconds: number,
) {
const sandbox = await client.get(name);
return sandbox.renewTimeout({ timeoutMs: remainingSeconds * 1_000 });
}