콘텐츠로 이동

컴퓨트 공급자

virtual Device 의 컴퓨트(vm Workload)와 볼륨(storage Workload)은 컴퓨트 공급자가 만들어요 — 기기 추가 화면의 “클라우드에 만들기” 가 이것이에요. 플랫폼(app-service)은 공급자 어댑터 뒤에서 같은 계약으로 머신을 만들고 켜고 끄기만 해요. 공급자는 kind 별로 골라요 — 공급자마다 띄울 수 있는 kind 가 달라서예요.

kind 공급자 머신 상태
linux · chrome Fly.io (Fly Machines, fly 어댑터) 에이전트 이미지 머신 + Fly 볼륨. 인바운드 없음(services 없음) 프리뷰 어댑터 구현 · 가짜 Fly 로 확인
windows AWS (EC2, aws 어댑터) Windows Server AMI (x86_64) + 데이터 EBS 프리뷰 어댑터 구현 · 가짜 EC2 로 확인
android AWS (EC2 Graviton) arm64 인스턴스 + Redroid — ARM 위의 ARM Android 라 에뮬레이션이 없어요 프리뷰 〃
mac AWS EC2 Mac — 예정 지금은 “내 기기에 설치” 만
linux · chrome · android (로컬 스택) local 호스트의 Docker 컨테이너, android 는 호스트의 전용 에뮬레이터 (한 번에 하나) 로컬에서 동작
  • 지금 환경에서 무엇을 띄울 수 있는지는 GET /stations/{id}/device-kinds 로 봐요.
  • 공급자를 정하는 것은 설정이에요 (COMPUTE_PROVIDER 기본값 + COMPUTE_PROVIDER_ROUTES, 예 android=aws). 고른 이름이 vm Workload 의 provider 에 남고, 그 Workload 의 이후 동작은 늘 그 공급자로 가요 — 라우팅을 바꿔도 옛 머신은 옛 공급자가 다뤄요.
  • 공급자 쪽 비용은 머신 시간 + 동작 때의 API 호출뿐이에요. 플랫폼은 공급자를 주기적으로 조회하지 않아요. 사용자에게는 계정의 크레딧으로 계산해요 — running 인 분 × 크기별 단가, Storage GB × 시간 (크레딧).

인증 Authorization: Bearer {공급자 토큰}, 본문 JSON. 머신 상태: created starting started stopping stopped failed destroyed.

메서드·경로 요청 응답
GET /v1/capabilities {kinds: ["linux","chrome"], regions: ["local"], max_machines}
POST /v1/machines {name: workload_id, kind, size: {cpus, memory_mb}, agent: {endpoint, token, resource_id}, volume: {name, size_gb, mount_path} | null, metadata} 201 {machine_id, state, region, volume_id?} — 같은 name 이면 있는 머신을 200 으로 (멱등)
POST /v1/machines/{id}/start {agent: {endpoint, token, resource_id}} 200 {machine_id, state}
POST /v1/machines/{id}/stop {timeout_s?} 200 {machine_id, state}
GET /v1/machines/{id} 200 {machine_id, state, exit_reason?, updated_at} · 404
DELETE /v1/machines/{id}?with_volume=true 204 · 404 (끝난 것으로 봐요)

오류: 422 {error: "kind_not_supported"}, 503 {error: "capacity"}.

  • 머신 이름 = workload_id — 공급자의 멱등 키예요. 다시 불러도 머신이 둘 생기지 않아요.
  • 토큰은 메모리에만. 공급자는 에이전트 연결 토큰을 로그·디스크·머신 메타데이터에 쓰지 않고, 머신을 시작할 때 환경 변수로만 넣어요. 그래서 플랫폼은 시작할 때마다 새 토큰을 줘요 — 원문 토큰이 어디에도 쌓이지 않아요.
  • 주기적으로 묻지 않아요. 플랫폼은 공급자를 폴링하지 않아요. 동작(만들기·시작·정지·지우기)은 요청 안에서 부르고, 그 뒤 상태는 에이전트의 접속과 “전이 중인 virtual Device 를 단건 조회할 때 한 번 묻기” 로 맞춰요.
  • 크기: small 1 vCPU·1024 MB, medium 2·4096, large 4·8192. 공급자는 가장 가까운 사양으로 맞추고 실제 값을 돌려줘요. AWS 는 크기를 바꿀 때 인스턴스를 지우지 않고 타입만 바꿔 디스크가 남아요.
  • 접속 값(에이전트 주소·토큰)은 Fly 는 머신 환경 변수로, AWS 는 user data(JSON)로 넣고 부팅마다 읽어요. 멈출 때는 토큰을 지운 설정으로 바꿔 둬요.
  • kind 를 띄울 수 없으면 capabilities.kinds 에서 빼요. 그 kind 의 virtual Device 만들기는 422 DEVICE_KIND_NOT_HOSTABLE 이 돼요.