Instances
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 \
--waitRequired: name, image_id, instance_type, subnet_id, ssh_pubkey.
Optional but commonly used:
| Flag | Purpose |
|---|---|
--root_volume_size_gib | Size the root disk; defaults to the image’s minimum |
--root_volume_source_snapshot_id | Boot from a snapshot instead of the base image |
--root_volume_baseline_iops / --root_volume_baseline_throughput_mbps | Provisioned performance |
--allocate_public_ipv4 | Hand out an ephemeral public IPv4 |
--public_ipv4_reservation_id | Attach an existing reserved IP instead |
--user_data / --user-data-file | cloud-init script run on first boot |
--root_password | Set a root password (SSH keys preferred) |
--wait | Block until the VM reaches running |
List available choices first:
exc compute image list
exc compute instancetype list
exc compute subnet listConsole
You can create the same VM from the browser console:
- Open console.excloud.dev/console/instance.
- Click Launch New Instance.
- Enter a name, then choose an SSH key, subnet, security group, machine image, instance type, and root volume size.
- Turn on Public IPv4 if the VM should receive an ephemeral public address, or choose a reserved public IPv4 if you already created one.
- Use Delete Protection for long-lived VMs, then launch the VM.

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 42State 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 42Useful 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--downloadfor 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 --followMetrics include CPU, network, and disk; serial logs are useful when the kernel is unhappy or SSH is wedged.
Where to dig deeper
- The Terraform resource is
excloud_compute_instance. - The HTTP endpoints are documented in the Compute Swagger UI.
- The full flag list is always in
exc compute create --help.