Skip to main content

Learn any cloud Labs

Browser labs

Each lab below opens in VS Code in your browser with az, terraform, kubectl, helm and ansible already installed, or runs on your own machine from the same container image. Nothing here installs anything on your computer beyond Docker, and nothing you do in a lab can reach the production estate: the workspaces run on the Hybrid Lab host, a single VPS onboarded to Azure Arc, whose live state is further down this page.

Open in Coder takes you to coder.lab.hybridcloudworks.com, where you sign in with GitHub, approve the workspace Coder proposes, and land in the lab folder. Workspaces stop after an hour of inactivity and are limited to one CPU and two gigabytes of memory, so treat them as scratch space and keep anything you want in your own repository.

Pick a lab

  • Validate a Landing Zone Builder download

    Take the zip the Landing Zone Builder at /tools/landing-zone hands you, unpack it in the workspace, and run terraform fmt and terraform validate against the Azure Verified Modules it declares — the same checks the lab runner applies before anything is planned.

    Toolsterraform, azabout 25 minutes

    Open in Coder (opens Validate a Landing Zone Builder download in a new tab; GitHub sign-in required)
    Run it locally

    Change into the folder that holds your files first; the container mounts it at /workspace. Pick the line for the shell you are in.

    PowerShell
    docker run --rm -it -v ${PWD}:/workspace ghcr.io/hybridcloudworks/hcw-lab:latest
    bash
    docker run --rm -it -v "$PWD":/workspace ghcr.io/hybridcloudworks/hcw-lab:latest
  • Terraform validate, step by step

    Start from a deliberately broken module and work through what terraform init -backend=false, terraform fmt -check and terraform validate each catch, why the provider mirror lets init succeed offline, and what none of the three can tell you before a plan.

    Toolsterraformabout 20 minutes

    Open in Coder (opens Terraform validate, step by step in a new tab; GitHub sign-in required)
    Run it locally

    Change into the folder that holds your files first; the container mounts it at /workspace. Pick the line for the shell you are in.

    PowerShell
    docker run --rm -it -v ${PWD}:/workspace ghcr.io/hybridcloudworks/hcw-lab:latest
    bash
    docker run --rm -it -v "$PWD":/workspace ghcr.io/hybridcloudworks/hcw-lab:latest
  • Ansible syntax check, step by step

    Run ansible-playbook --syntax-check and ansible-lint over the playbook that configures the Hybrid Lab host itself, read what each one reports, and fix a role until both pass — with no host in reach and nothing executed.

    Toolsansibleabout 20 minutes

    Open in Coder (opens Ansible syntax check, step by step in a new tab; GitHub sign-in required)
    Run it locally

    Change into the folder that holds your files first; the container mounts it at /workspace. Pick the line for the shell you are in.

    PowerShell
    docker run --rm -it -v ${PWD}:/workspace ghcr.io/hybridcloudworks/hcw-lab:latest
    bash
    docker run --rm -it -v "$PWD":/workspace ghcr.io/hybridcloudworks/hcw-lab:latest

The Hybrid Lab right now

The lab host is a Hostinger VPS onboarded to Azure Arc, so it appears in the same tenant as the production estate. The Function App reads its Arc row and policy compliance from Azure Resource Graph with its managed identity; the browser never talks to Azure.

Reading the lab host status…

Coder status

Coder runs on the lab host and is where you sign in with GitHub. This card is served by the site’s API from a read-only token, so what it shows is at most a minute old and your browser never contacts Coder until you open a workspace.

Reading Coder status…

Run an agent against your landing zone

Docker Sandboxes run a coding agent in a microVM on your own machine, with the folder you name mounted inside and nothing else. The recipe linked below builds a template with Claude Code, terraform and the Azure CLI already installed, and an AGENTS.md that tells the agent the folder is a landing zone generated for learning: validate and explain it, never plan or apply it. Build and load the template once from the recipe README, store your Anthropic key with sbx secret set anthropic, then:

  1. Build a landing zone in the Landing Zone Builder and download the zip.
  2. Unzip it and change into the folder it made, so the Terraform files are in the current directory.
  3. Create the sandbox from that folder and open the agent in it. Pick the line for the shell you are in; the folder is mounted at the same path inside the sandbox.
PowerShell
sbx run --name hcw-lz --template hcw-lz-sandbox:v1 claude .
bash
sbx run --name hcw-lz --template hcw-lz-sandbox:v1 claude .

When Claude Code opens, paste this first: Explain what this landing zone deploys, then run terraform init -backend=false, terraform fmt -check and terraform validate and tell me what each printed.

Local sandboxes are free. Cloud sandboxes (sbx --cloud) bill your own Docker subscription, cannot mount this folder, and expire after one hour by default.

The recipe on GitHub: lab-image/sandbox-template (Dockerfile, AGENTS.md, and the README with the build, load and cloud commands; opens in a new tab)

Articles for these labs

Coming soon: this section is being built in issue #677.