컴퓨트 공급자
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 만들기는 422DEVICE_KIND_NOT_HOSTABLE이 돼요.