Noundry.Spinup

Multi-cloud infrastructure provisioning CLI. Deploy VMs, networks, and load balancers across AWS, Azure, GCP, and DigitalOcean using Terraform with built-in security hardening.

# Install
$ dotnet tool install -g Noundry.Spinup

Quick Start

# Validate prerequisites (Terraform + cloud credentials)
$ spinup validate

# Provision a VM interactively
$ spinup provision

# Or provision with CLI arguments
$ spinup provision --cloud aws --region us-east-1 --resource vm --name my-server -y

# List all resources
$ spinup list

# Destroy a resource
$ spinup destroy --name my-server -y

Core Features

4 Cloud Providers

AWS, Azure, GCP, and DigitalOcean with identical interface. 12 Terraform templates for all resource/provider combinations.

3 Resource Types

VM, Network, and LoadBalancer. Each generates production-ready Terraform configurations with proper security groups.

Stack Deployments

Deploy complete application stacks (small/medium/large/xl) with a single command. 16 built-in stack templates.

Security Hardening

Automatic VM hardening: UFW firewall, fail2ban, SSH hardening, kernel hardening, IP whitelisting.

Commands Reference

spinup provision

Option Alias Description
--cloud-caws, azure, gcp, or digitalocean
--region-rCloud region (e.g., us-east-1)
--resource--typevm, network, or loadbalancer
--name-nResource name
--instance-type--sizeInstance type (default varies)
--security-level-minimal, default, or maximum
--ssh-port-Custom SSH port (default: 22)
--auto-approve-ySkip confirmation prompts

Other Commands

Command Description
spinup listList all provisioned resources
spinup destroy --name <n>Destroy a provisioned resource
spinup plan --name <n>Show Terraform plan without applying
spinup validateCheck prerequisites and credentials

Stack Deployments

Deploy complete application stacks with a single command. Choose from 4 predefined templates across all cloud providers.

Size VMs Network LB Description
small2NoNo1 web + 1 database
medium3YesNo2 web + 1 database
large4YesYes3 web + 1 data (db+cache)
xl7YesYes4 web + 2 db + 1 cache
# Create a large stack on AWS
$ spinup stack create --template large --cloud aws --region us-east-1 --name myapp -y

# List all stacks
$ spinup stack list

# View available templates
$ spinup stack templates

# Destroy an entire stack
$ spinup stack destroy --name myapp -y

Custom Stack Definition

{
 "name": "myapp",
 "cloud": "aws",
 "region": "us-east-1",
 "securityLevel": "default",
 "resources": [
 { "type": "network", "name": "network", "cidr": "10.0.0.0/16" },
 { "type": "loadbalancer", "name": "lb", "port": 80 },
 { "type": "vm", "name": "web", "count": 3, "instanceType": "t3.small" },
 { "type": "vm", "name": "db", "count": 1, "instanceType": "t3.large" }
 ]
}

Security Hardening

All VMs are automatically hardened by default. Your public IP is auto-detected and whitelisted for SSH access.

Feature Minimal Default Maximum
Auto Security UpdatesYesYesYes
Disable Root SSHYesYesYes
Key-Only SSH Auth-YesYes
UFW Firewall + IP WhitelistYesYesYes
Fail2ban-YesYes
Kernel Hardening-YesYes
Remove Unnecessary Packages--Yes
Disable IPv6--Yes

Cloud Provider Configuration

AWS

export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxx

Regions: us-east-1, us-west-2, eu-west-1, eu-central-1, ap-south-1, ...

Azure

export ARM_CLIENT_ID=xxx
export ARM_CLIENT_SECRET=xxx
export ARM_SUBSCRIPTION_ID=xxx
export ARM_TENANT_ID=xxx

Regions: eastus, westus2, northeurope, westeurope, ...

GCP

export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json
export GOOGLE_CLOUD_PROJECT=my-project-id

Regions: us-central1, us-east1, europe-west1, asia-east1, ...

DigitalOcean

export DIGITALOCEAN_TOKEN=your-api-token

Regions: nyc1, nyc3, sfo3, ams3, sgp1, lon1, fra1

SSH Access After Provisioning

SSH keys are automatically generated and stored locally. Default usernames vary by cloud provider.

Provider Username Key Location
AWSubuntu~/.spinup/workspaces/<name>/<name>_ssh_key.pem
Azureazureuser~/.spinup/workspaces/<name>/<name>_ssh_key.pem
GCPubuntu~/.spinup/workspaces/<name>/<name>_ssh_key.pem
DigitalOceanroot~/.spinup/workspaces/<name>/<name>_ssh_key.pem
# Connect to an AWS VM
$ ssh -i ~/.spinup/workspaces/my-server/my-server_ssh_key.pem ubuntu@<public-ip>

# Connect with custom SSH port
$ ssh -i ~/.spinup/workspaces/my-server/my-server_ssh_key.pem -p 2222 ubuntu@<public-ip>

# Verify security hardening was applied
$ cat /var/log/spinup-security.log
$ sudo ufw status verbose
$ sudo fail2ban-client status sshd

Prerequisites

.NET 8.0 SDK

Required runtime for the CLI tool.

Terraform >= 1.0.0

Must be in PATH. Verify with terraform version.

Cloud Credentials

Environment variables for your chosen cloud provider.

Related Packages