An instance is one virtual machine. Each instance has a fixed instance type, a root volume, exactly one primary network interface in one subnet, and zero or more security groups, additional volumes, and public IPv4 reservations attached to it.

Create

exc compute create \
  --name web-1 \
  --image_id 1 \
  --instance_type m1a.large \
  --subnet_id 1 \
  --security_group_ids 12 \
  --ssh_pubkey my-key \
  --root_volume_size_gib 40 \
  --allocate_public_ipv4 \
  --user-data-file ./cloud-init.yaml \
  --wait

Required: name, image_id, instance_type, subnet_id, ssh_pubkey.

Optional but commonly used:

FlagPurpose
--root_volume_size_gibSize the root disk; defaults to the image’s minimum
--root_volume_source_snapshot_idBoot from a snapshot instead of the base image
--root_volume_baseline_iops / --root_volume_baseline_throughput_mbpsProvisioned performance
--allocate_public_ipv4Hand out an ephemeral public IPv4
--public_ipv4_reservation_idAttach an existing reserved IP instead
--user_data / --user-data-filecloud-init script run on first boot
--root_passwordSet a root password (SSH keys preferred)
--waitBlock until the VM reaches running

List available choices first:

exc compute image list
exc compute instancetype list
exc compute subnet list

Console

You can create the same VM from the browser console:

  1. Open console.excloud.dev/console/instance.
  2. Click Launch New Instance.
  3. Enter a name, then choose an SSH key, subnet, security group, machine image, instance type, and root volume size.
  4. Turn on Public IPv4 if the VM should receive an ephemeral public address, or choose a reserved public IPv4 if you already created one.
  5. Use Delete Protection for long-lived VMs, then launch the VM.
Launch a VM in the Excloud console

Lifecycle

exc compute list                          # see everything
exc compute get --id 42                   # one VM, full detail
exc compute start --vm_id 42
exc compute stop --vm_id 42
exc compute restart --vm_id 42
exc compute rename --vm_id 42 --name api-1
exc compute resize --vm_id 42 --instance_type m1a.xlarge
exc compute terminate --vm_id 42

State transitions are asynchronous. The API returns immediately; the VM moves through pending → terminal state (running, stopped, terminated). Pass --wait to any lifecycle command or poll exc compute get.

Delete protection

To make terminate fail unless protection is explicitly cleared:

exc compute protect   --vm_id 42
exc compute unprotect --vm_id 42

Useful for long-lived production VMs and databases.

Access

  • Short-lived SSH: exc compute connect --vm_id 42 ( Instance Connect guide)
  • One-shot command: exc compute exec --vm-id 42 --command 'uname -a'
  • File transfer: exc compute scp --vm-id 42 --src ./file --dst /path/file (add --download for the other direction)
  • Serial console: exc compute console --vm_id 42 (also see Serial Logs)

Observability

exc compute metrics --vm_id 42
exc compute seriallogs --id 42 --follow

Metrics include CPU, network, and disk; serial logs are useful when the kernel is unhappy or SSH is wedged.

Where to dig deeper