Skip to content

Prerequisites

Tooling

The fastest way to get every tool below installed at the right version is to open the repo in GitHub Codespaces or VS Code Dev Containers — see Dev container below. Otherwise, install locally:

ToolMinimum versionWhy
Terraform1.9Module syntax, validation rules
Azure CLI2.60az login, bootstrap script
GitHub CLI (optional)2.40OIDC federated credential setup
git2.30Clone the repo

Dev container

The repo ships a .devcontainer/devcontainer.json that pre-installs everything you need to deploy the foundation, build the docs site, and run the test suites — zero local setup required.

What’s inside:

ComponentVersion / sourceUsed for
Ubuntu 24.04mcr.microsoft.com/devcontainers/base:ubuntu-24.04Base image
Azure CLIlatest, with bicep extensionaz login, deploys, bootstrap script
Terraform1.14.9 + tflintFoundation + management-groups modules
Node.js20Astro / Starlight docs site (cd site && npm run dev)
Python3.12Helper scripts
GitHub CLIlatestOIDC federated credential setup, repo automation
pre-commitlatestAuto-runs terraform fmt, lint, etc. on commit
justlatestRecipe runner (just plan baseline, just docs, …)

Also pre-configures the recommended VS Code extensions (HashiCorp Terraform, Bicep, Astro, GitHub Copilot, markdownlint, just) and forwards port 4321 for the docs dev server.

How to use it:

  • GitHub Codespaces: Click Code → Codespaces → Create codespace on main in the repo. Free tier covers ~60h/mo on a 2-core machine.
  • VS Code (local Docker): Install the Dev Containers extension, then Command Palette → Dev Containers: Reopen in Container.

On first open, postCreateCommand runs pre-commit install and npm install in site/ — give it ~2 min, then you’re ready to az login and deploy.

Azure access

  • An Azure subscription where you have Owner at the subscription scope (needed once for the Service Principal + bootstrap RG/storage).
  • Permission to create app registrations in Microsoft Entra ID (or an existing app registration you can reuse).
  • For vpn / full: knowledge of the customer’s on-premises VPN device public IP, supported IKE versions, and the on-premises CIDR(s) that should be reachable.

Local prep

Terminal window
git clone https://github.com/travishankins/azure-launchpad.git
cd azure-launchpad
az login
az account set --subscription <subscription-id>

State backend (one-time per customer)

Terminal window
export ARM_SUBSCRIPTION_ID=<subscription-id>
./scripts/bootstrap-state.sh

This creates:

  • A resource group rg-tfstate-<prefix>-<region>
  • A storage account sttfstate<prefix><region><6-char-hash>
  • A blob container tfstate

The script is idempotent — re-running it just discovers the existing resources.

CI/CD prerequisites (optional)

If you want plan/apply to run in GitHub Actions, you also need:

  • An Entra ID app registration with a federated credential trusting your repo
  • The repo variables listed in CI/CD pipeline