Ephemeral VM provisioner for AWS, GCP, and Hetzner.
fuoco automates a built-in Terraform template to provision a single VM in AWS, GCP, or Hetzner,
executes a startup script via cloud-init/user-data, and destroys all resources on termination.
- Single-VM workflow – Apply and destroy with a single command.
- Multi-cloud support – AWS | GCP | Hetzner through a unified CLI.
- Built-in Terraform templates – No separate Terraform code to maintain.
- Startup script support – Inject Bash scripts at boot via cloud-init.
- Debug mode –
--debugstreams Terraform logs for troubleshooting. - Automatic cleanup – Ensures a fresh workspace on every run.
- Rust toolchain to build
fuoco. - Terraform (>= 0.12) available in system
PATH. - Cloud credentials:
- AWS: via
~/.aws/credentialsor environment variables. - GCP: via
gcloud auth application-default loginorGOOGLE_CLOUD_PROJECTenv var. - Hetzner: via
HCLOUD_TOKENenv var.
- AWS: via
fuoco deploy --provider <aws|gcp|hetzner> [OPTIONS]If somethig goes wrong it is possible to undeploy with:
fuoco undeploy --provider <aws|gcp|hetzner> [OPTIONS]| Option | Description |
|---|---|
--provider <aws|gcp|hetzner> |
Cloud to deploy (aws, gcp, or hetzner). |
--region <REGION> |
AWS region, GCP zone, or Hetzner location (e.g. us-east-1, us-central1-a, nbg1). |
--instance-type <TYPE> |
VM size (defaults: t4g.nano AWS, e2-micro GCP, cx11 Hetzner). |
--script-path <FILE> |
Path to a Bash script to execute on VM startup. |
--debug |
Print Terraform init/apply/destroy logs (for debugging). |
-h, --help |
Show this help message. |
Press Ctrl+C or send SIGTERM to destroy the VM and exit.
fuoco deploy --provider aws --script ./startup.shTemplates embedded under templates/<provider>/main.tf:
- Prepare a hashed temp workspace and copy the Terraform files.
terraform initthe provider.terraform applywith auto-approve and injected vars (region, instance-type, script, etc.).- Wait for
Ctrl+C/SIGTERM(or panic) to triggerterraform destroy. - On each run, remove stale workspace so you always use the latest templates.
- Use
--debugto view full Terraform logs. - For console‑level logs, add
tee /dev/consoleto the cloud‑init user‑data sequence.
Contributions are welcome. Open issues or PRs for bugs, features, or improvements.