Skip to content

Compute user guide

Compute here is one virtual machine on dedicated cores, launched through an API shaped like Amazon EC2, so the tooling you already have works against it unchanged.

It is not a managed service. Nothing restarts your application, nothing fails it over, nothing patches it. You get a machine and the machine is yours.

Read this guide first. Then the developer guide for how to sign and send a request, the API reference for every operation, and the cheat sheet when you already know what you want.

Five things, and you choose four of them:

PieceYou chooseWhere it is documented
Shape — cores and memoryYesInstance types
Image — the operating systemYesMachine images
Key pair — how you get inYesKey pairs
User data — how it configures itselfOptionalMetadata and user data
Network — where it livesNo, you already have oneNetworking

The network is the one you do not choose: your account came with a network, a subnet and a router, created at signup. There is nothing to build before your first launch.

RunInstances → pending → running → StopInstances → stopped → StartInstances → running
↘ TerminateInstances → shutting-down → terminated
  • pending → running is under a minute. Your key is injected by cloud-init during it.
  • stopped still holds your root disk and still holds your private address. A stopped machine is not a deleted one, and its storage still occupies the pool.
  • terminated is final. The root disk goes with it. Attached volumes do not — see below.

This is the distinction that costs people data:

Root diskAttached volume
Comes fromThe shape, 20–160 GBCreateVolume, 1–1000 GB
Survives terminateNoYes
GrowableNoYes, never shrinks
CostIn the instance priceNot billed today

The disk underneath both is 7200 rpm SATA, quoted at 48 IOPS and 11 MB/s per volume — a figure divided by the most machines the box can hold, so it is one every customer can have at once. Read Volume types before you put a database on it.

Stated plainly, because none of it is done for you:

  • Backups. There are none. Snapshots are yours to take and they live in the same pool as the volume.
  • Redundancy. One machine, one box, no zone to fail over to.
  • Patching, monitoring, alerting, log shipping. Yours.
  • Separating your own tiers. Everything you run is on one flat /24. Security groups are the only boundary inside your account.
  • Credentials for anything the machine calls. There are no instance roles; a key on disk is the only option.
  1. Sign up and onboard. POST /v1/onboard creates your project, your cloud user, your network and your Stripe customer — Account API.
  2. Mint an access key. The console’s Access keys page, or POST /v1/access-keys — Access keys.
  3. Point your tooling at the endpoint. https://ec2.shelfcs.com, region hel1.
  4. Import a key pair, choose an image and a shape, launch.
  5. SSH as the image’s login user — debian, ubuntu, rocky… not root.

Every command for those steps is on the cheat sheet.

If your workload isTakeBecause
Ordinary — a web app, an API, a workercd-standard-*1:2 or 1:4 cores to memory
CPU-bound — building, encoding, agentscd-compute-*Twice the cores per gigabyte
Memory-hungry — a cache, a resident datasetcd-memory-*8 GB per core
Disk-boundNothing hereThe storage is spinning disk; buy RAM instead

Memory is the real constraint, on the box and in your quota: CPU is overcommitted at most 2×, memory is never overcommitted at all. A new account starts at 4 vCPU and 8 GB — Quotas and limits.

An AWS instance-type name works anywhere ours does: m5.large resolves to cd-standard-2-8, exactly 2 vCPU and 8 GB. The response names ours, so write ours in Terraform to avoid a perpetual diff.

ErrorMeansDo
InsufficientInstanceCapacityThe box cannot fit that shape nowTake a smaller shape, or wait. A quota increase will not help
InstanceLimitExceededYour quotaAsk for more
InvalidParameterValue on InstanceTypeUnknown shape or aliasCheck Instance types
SignatureDoesNotMatchAlmost always the regionIt is hel1, and it must match your credential scope

GET /v1/catalog says whether a shape is in stock right now, computed from live capacity — Catalog and availability.

The machine reports running as soon as it boots. That says nothing about whether your configuration applied: cloud-init’s runcmd swallows failures, so every command in it can fail and the launch still looks clean.

Write setup scripts that can be re-run, end them with a sentinel you can check from outside, and when in doubt open the VNC console — it works before the network does.