Compute user guide
What this is
Section titled “What this is”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.
What a machine is made of
Section titled “What a machine is made of”Five things, and you choose four of them:
| Piece | You choose | Where it is documented |
|---|---|---|
| Shape — cores and memory | Yes | Instance types |
| Image — the operating system | Yes | Machine images |
| Key pair — how you get in | Yes | Key pairs |
| User data — how it configures itself | Optional | Metadata and user data |
| Network — where it lives | No, you already have one | Networking |
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.
The lifecycle
Section titled “The lifecycle”RunInstances → pending → running → StopInstances → stopped → StartInstances → running ↘ TerminateInstances → shutting-down → terminatedpending→runningis under a minute. Your key is injected by cloud-init during it.stoppedstill 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.terminatedis final. The root disk goes with it. Attached volumes do not — see below.
Storage, and what survives
Section titled “Storage, and what survives”This is the distinction that costs people data:
| Root disk | Attached volume | |
|---|---|---|
| Comes from | The shape, 20–160 GB | CreateVolume, 1–1000 GB |
| Survives terminate | No | Yes |
| Growable | No | Yes, never shrinks |
| Cost | In the instance price | Not 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.
What you have to do yourself
Section titled “What you have to do yourself”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.
Getting from nothing to running
Section titled “Getting from nothing to running”- Sign up and onboard.
POST /v1/onboardcreates your project, your cloud user, your network and your Stripe customer — Account API. - Mint an access key. The console’s Access keys page, or
POST /v1/access-keys— Access keys. - Point your tooling at the endpoint.
https://ec2.shelfcs.com, regionhel1. - Import a key pair, choose an image and a shape, launch.
- SSH as the image’s login user —
debian,ubuntu,rocky… notroot.
Every command for those steps is on the cheat sheet.
Choosing a shape
Section titled “Choosing a shape”| If your workload is | Take | Because |
|---|---|---|
| Ordinary — a web app, an API, a worker | cd-standard-* | 1:2 or 1:4 cores to memory |
| CPU-bound — building, encoding, agents | cd-compute-* | Twice the cores per gigabyte |
| Memory-hungry — a cache, a resident dataset | cd-memory-* | 8 GB per core |
| Disk-bound | Nothing here | The 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.
When a launch fails
Section titled “When a launch fails”| Error | Means | Do |
|---|---|---|
InsufficientInstanceCapacity | The box cannot fit that shape now | Take a smaller shape, or wait. A quota increase will not help |
InstanceLimitExceeded | Your quota | Ask for more |
InvalidParameterValue on InstanceType | Unknown shape or alias | Check Instance types |
SignatureDoesNotMatch | Almost always the region | It 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.
When it boots but does not work
Section titled “When it boots but does not work”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.
Go further
Section titled “Go further”- Developer guide — requests, signing, errors
- API reference — every call
- Cheat sheet — the commands, one page
- Instance types
- Machine images
- Quotas and limits