Compute – Startup Scripts¶
Startup scripts allow you to run initialization logic automatically when a Verda compute instance is created. They are commonly used to install system packages, configure services, prepare machine learning environments, or perform other one-time setup tasks.
In Terraform, startup scripts are managed as first-class resources using verda_startup_script and then attached to compute instances. This separation makes startup scripts reusable across multiple instances and environments.
How startup scripts work¶
- Startup scripts run once, during the first boot of an instance.
- Scripts are executed as root.
- Updating a startup script does not affect existing instances unless they are recreated.
- A single startup script can be reused by multiple instances.
Defining a startup script¶
Create a startup script using the verda_startup_script resource. The script must include a valid shebang (for example, #!/bin/bash).
resource "verda_startup_script" "basic" {
name = "basic-setup"
script = <<-EOF
#!/bin/bash
set -e
apt-get update
apt-get install -y curl wget git
EOF
}
For more complex setups, startup scripts can install Docker, ML frameworks, or perform custom configuration steps.
Attaching a startup script to an instance¶
Once defined, reference the startup script from a compute instance using startup_script_id:
resource "verda_instance" "example" {
name = "training-01"
instance_type = "gpu-a100-80gb"
image = "ubuntu-24.04-cuda-12.8-open-docker"
startup_script_id = verda_startup_script.basic.id
ssh_key_ids = [verda_ssh_key.main.id]
}
The script will be executed automatically when the instance is created.
Common use cases¶
Startup scripts are typically used for:
- Installing system packages and drivers
- Setting up Python, CUDA, or ML frameworks
- Configuring users, permissions, or SSH settings
- Pulling application code or model artifacts
- Starting background services or agents
Best practices¶
- Use
set -eto fail fast on errors. - Keep scripts idempotent where possible.
- Store scripts in Terraform using heredocs or external files (
file()). - Avoid hardcoding secrets — use environment variables or secure storage.
- Treat startup scripts as immutable: recreate instances when scripts change.
Importing existing startup scripts¶
Existing startup scripts can be imported into Terraform state:
Notes and limitations¶
- Startup scripts run only on initial creation.
- Changes to
startup_script_idtypically require instance replacement. - Logs and side effects depend on your script implementation.
For the full schema and advanced examples, see the Verda Startup Script resource documentation.