샌드박스 이동하기

샌드박스 이동하기 (Move a sandbox)

sbx move로 로컬 샌드박스와 클라우드 샌드박스 사이에서 파일시스템을 옮기는 방법을 알아볼게요.

출처: 문서

본문

sbx move 명령은 로컬 샌드박스와 클라우드 샌드박스 사이에서 파일시스템 스냅샷을 전송해요. 실행 중인 샌드박스의 라이브 마이그레이션이 아니라, 캡처된 파일시스템을 다른 환경에서 이어가기 위해 사용해요.

전송 동작 (Transfer behavior)

이동은 다음 작업을 수행해요:

  • 원본 샌드박스 파일시스템을 템플릿 이미지로 캡처
  • 이미지를 로컬·클라우드 경계를 넘어 전송
  • 이미지에서 목적지 샌드박스 생성

목적지는 다른 샌드박스 ID를 가져요. 원본은 삭제되지 않으므로, 전송 후 두 샌드박스는 독립적인 상태를 가져요. 로컬→클라우드 이동은 캡처하는 동안 로컬 원본을 멈춰요. 클라우드→로컬 이동은 목적지를 만든 뒤 클라우드 원본을 멈추려 시도해요. 이는 최선 노력(best-effort)이라, 멈출 수 없으면 클라우드 원본이 계속 실행될 수 있어요. 이동이 멈춤이 끝나기 전에 반환될 수 있어요. 그 상태는 sbx --cloud ls로 확인하세요. 에이전트가 없는 클라우드 원본은 실행 상태로 남아요. 목적지를 검증한 뒤 원본을 별도로 제거하세요.

중요 (Important): 관리 시크릿은 원본 시크릿 저장소에서 복사되지 않아요. 에이전트의 대화형 로그인이 샌드박스 안에 쓴 자격 증명은 일반 파일시스템 파일이라 스냅샷에 포함돼요. 샌드박스를 옮기기 전에 샌드박스 안 자격 증명을 제거하세요.

이동은 샌드박스 컨테이너에 저장된 파일시스템 데이터를 전송해요. 다음은 전송하지 않아요:

  • 실행 중인 프로세스, 메모리, 열린 소켓
  • 로컬 워크스페이스 마운트, 바인드 마운트, clone-mode 볼륨
  • 원본 시크릿 저장소의 관리 시크릿
  • 샌드박스 파일시스템 밖에 붙은 다른 리소스

이동 후 어느 쪽 샌드박스에 가한 변경은 동기화되지 않아요.

스냅샷은 원본 샌드박스의 플랫폼을 유지해요. sbx move는 linux/amd64와 linux/arm64 사이를 변환하지 않으므로 목적지가 같은 플랫폼을 지원해야 해요. 로컬→클라우드 이동의 경우 클라우드 계정이 로컬 샌드박스의 플랫폼을 지원해야 해요. 클라우드→로컬 이동은 로컬 샌드박스 런타임에 맞도록 클라우드 샌드박스를 --platform linux/amd64 또는 --platform linux/arm64로 만들어 주세요. CLI가 스냅샷을 전송하기 전에 호환성을 확인해요.

로컬에서 클라우드로 이동하기 (Move from local to cloud)

로컬 샌드박스를 클라우드로 옮겨요:

$ sbx move local-project --to cloud

move 명령은 두 백엔드에 걸쳐 있으므로 전역 --cloud 플래그를 추가하지 마세요. 목적지 이름 접두사를 정하려면 --name을 사용해요. 클라우드 목적지는 짧은 고유 접미사를 붙여요:

$ sbx move local-project --to cloud --name cloud-project

로컬 워크스페이스 파일은 샌드박스 파일시스템 밖에 마운트되어 있어 클라우드 목적지에 나타나지 않아요. 원본에 워크스페이스가 있으면 CLI가 경고하고 확인을 요청해요. --force는 프롬프트를 건너뛰지만 그 파일들을 포함하지 않아요.

목적지는 클라우드 네트워크 정책을 사용해요. 로컬 네트워크 규칙은 전송되지 않아요. 로컬 원본에 HTTP 메서드·경로 제한이 있다면, 그 제한이 클라우드에 적용되지 않으므로 CLI가 경고하고 확인을 요청해요. --force는 프롬프트를 건너뛰지만 경고는 유지해요.

게시된 TCP 샌드박스 포트는 클라우드 목적지에 클라우드 URL로 게시돼요. 클라우드가 거부한 포트는 경고와 함께 건너뛰어요. 호스트 포트 번호와 비-TCP 매핑은 전송되지 않아요.

목적지는 클라우드 시크릿 저장소에 이미 있는 적용 가능한 자격 증명을 쓸 수 있어요. 로컬 시크릿 저장소의 자격 증명은 전송되지 않아요.

CLI는 원본의 기록된 CPU·메모리 한도를 지원되는 클라우드 크기로 올림 반올림해요. 누락 한도는 경고와 함께 클라우드 기본값을 사용해요. 가장 큰 클라우드 크기보다 높은 한도는 이동을 막아요. move 명령에는 --cpus나 --memory 오버라이드가 없어요. 리소스 크기 조정이 원본과 같은 성능을 보장하지는 않으니, 원본을 제거하기 전에 목적지에서 워크로드를 확인하세요.

목적지 만료 설정하기 (Set destination expiration)

클라우드 목적지는 로컬 원본에 만료가 없어도 만료 시각이 있어요. --ttl이 없으면 서버 기본값(보통 1시간)을 사용해요. 이동은 계정과 샌드박스가 지원할 때 만료 시 샌드박스를 멈추도록 요청해요. 그렇지 않으면 샌드박스를 삭제하는 서버 기본 타임아웃 동작으로 돌아가요.

보존하고 싶은 작업을 옮길 때는 만료와 동작을 명시적으로 설정하세요:

$ sbx move local-project --to cloud --ttl 2h --on-timeout stop

stop 동작은 상태를 보존해요. 멈춤을 쓸 수 없으면 명시적 요청이 실패해요. 만료 시 삭제하려면 --on-timeout delete를 사용하세요. 이 플래그들은 클라우드로 가는 이동에만 적용돼요. 이동 후에는 sbx --cloud ttl로 만료를 확인하거나 연장해요.

클라우드에서 로컬로 이동하기 (Move from cloud to local)

클라우드 샌드박스를 ID나 이름으로 로컬 런타임으로 옮겨요:

$ sbx move cloud-project --to local --name local-copy

로컬 목적지는 호스트의 기본 네트워크 정책으로 시작해요. 클라우드 네트워크 규칙은 로컬 런타임으로 복사되지 않아요.

게시된 TCP 포트는 로컬 샌드박스에 저장되고, 실행 중일 때 루프백에 바인딩돼요. 호스트 포트 번호는 재시작 후 바뀔 수 있어요. 바인딩을 보려면 sbx ports local-copy를 실행하세요.

이동은 호스트 워크스페이스를 만들지 않아요. sbx cp로 로컬 샌드박스에서 호스트로 파일을 복사하세요. 붙은 클라우드 볼륨과 환경 변수는 전송되지 않아요. 로컬 목적지는 로컬 CPU·메모리 기본값을 사용해요.

이 방향은 명령이 스냅샷을 가져와 로컬 샌드박스를 만들기 때문에 로컬 샌드박스 요구사항을 충족하는 머신이 필요해요. 클라우드 원본은 sbx --cloud rm으로 제거하지 않는 한 계속 사용 가능해요.

다운로드 중 레이어 재사용은 로컬 런타임의 이미지 저장소에 더해 최대 32 GiB의 임시 호스트 디스크 공간이 필요할 수 있어요.

결과 검증하기 (Verify the result)

이동 후 두 백엔드를 나열해요:

$ sbx ls
$ sbx --cloud ls

원본을 제거하기 전에 목적지 파일시스템을 검사하고 자격 증명, 포트, 볼륨, 기타 환경별 리소스를 검증하세요. 이어오지 않은 것들을 구성해요.

더 알아보기 (Learn more)

관련 문서와 심화 내용은 원문을 참고해 주세요.