Azure Citadel
  • Blogs

  • ARM
  • Azure Arc
    • Overview
    • Azure Arc-enabled Servers
      • Prereqs
      • Scenario
      • Hack Overview
      • Azure Landing Zone
      • Arc Pilot resource group
      • Azure Monitoring Agent
      • Additional policy assignments
      • Access your on prem VMs
      • Create onboarding scripts
      • Onboarding using scripts
      • Inventory
      • Monitoring
      • SSH
      • Windows Admin Center
      • Governance
      • Custom Script Extension
      • Key Vault Extension
      • Managed Identity
    • Azure Arc-enabled Kubernetes
      • Prereqs
      • Background
      • Deploy Cluster
      • Connect to Arc
      • Enable GitOps
      • Deploy Application
      • Enable Azure AD
      • Enforce Policy
      • Enable Monitoring
      • Enable Azure Defender
      • Enable Data Services
      • Enable Application Delivery
    • Useful Links
  • Azure CLI
    • Install
    • Get started
    • JMESPATH queries
    • Integrate with Bash
  • Azure Landing Zones
    • Prereqs
    • Day 1
      • Azure Baristas
      • Day 1 Challenge
    • Day 2
      • Example
      • Day 2 Challenge
    • Day 3
      • Day 3 Challenge
    • Useful Links
  • Azure Policy
    • Azure Policy Basics
      • Policy Basics in the Azure Portal
      • Creating Policy via the CLI
      • Deploy If Not Exists
      • Management Groups and Initiatives
    • Creating Custom Policies
      • Customer scenario
      • Policy Aliases
      • Determine the logic
      • Create the custom policy
      • Define, assign and test
  • Azure Stack HCI
    • Overview
    • Useful Links
    • Updates from Microsoft Ignite 2022
  • Marketplace
    • Introduction
      • Terminology
      • Offer Types
    • Partner Center
    • Offer Type
    • Publish a VM Offer HOL
      • Getting Started
      • Create VM Image
      • Test VM Image
      • VM Offer with SIG
      • VM Offer with SAS
      • Publish Offer
    • Other VM Resources
    • Publish a Solution Template HOL
      • Getting Started
      • Create ARM Template
      • Validate ARM Template
      • Create UI Definition
      • Package Assets
      • Publish Offer
    • Publish a Managed App HOL
      • Getting Started
      • Create ARM Template
      • Validate ARM Template
      • Create UI Definition
      • Package Assets
      • Publish Offer
    • Managed Apps with AKS HOL
    • Other Managed App Resources
    • SaaS Offer HOLs
    • SaaS Offer Video Series
      • Video 1 - SaaS Offer Overview
      • Video 2 - Purchasing a SaaS Offer
      • Video 3 - Purchasing a Private SaaS Plan
      • Video 4 - Publishing a SaaS Offer
      • Video 5 - Publishing a Private SaaS Plan
      • Video 6 - SaaS Offer Technical Overview
      • Video 7 - Azure AD Application Registrations
      • Video 8 - Using the SaaS Offer REST Fulfillment API
      • Video 9 - The SaaS Client Library for .NET
      • Video 10 - Building a Simple SaaS Landing Page in .NET
      • Video 11 - Building a Simple SaaS Publisher Portal in .NET
      • Video 12 - SaaS Webhook Overview
      • Video 13 - Implementing a Simple SaaS Webhook in .NET
      • Video 14 - Securing a Simple SaaS Webhook in .NET
      • Video 15 - SaaS Metered Billing Overview
      • Video 16 - The SaaS Metered Billing API with REST
  • Microsoft Fabric
    • Theory
    • Prereqs
    • Fabric Capacity
    • Set up a Remote State
    • Create a repo from a GitHub template
    • Configure an app reg for development
    • Initial Terraform workflow
    • Expanding your config
    • Configure a workload identity
    • GitHub Actions for Microsoft Fabric
    • GitLab pipeline for Microsoft Fabric
  • Packer & Ansible
    • Packer
    • Ansible
    • Dynamic Inventories
    • Playbooks & Roles
    • Custom Roles
    • Shared Image Gallery
  • Partner
    • Lighthouse and Partner Admin Link
      • Microsoft Cloud Partner Program
      • Combining Lighthouse and PAL
      • Minimal Lighthouse definition
      • Using service principals
      • Privileged Identity Management
    • Useful Links
  • REST API
    • REST API theory
    • Using az rest
  • Setup
  • Terraform
    • Fundamentals
      • Initialise
      • Format
      • Validate
      • Plan
      • Apply
      • Adding resources
      • Locals and outputs
      • Managing state
      • Importing resources
      • Destroy
    • Working Environments for Terraform
      • Cloud Shell
      • macOS
      • Windows with PowerShell
      • Windows with Ubuntu in WSL2
    • Using AzAPI
      • Using the REST API
      • azapi_resource
      • Removing azapi_resource
      • azapi_update_resource
      • Data sources and outputs
      • Removing azapi_update_resource
  • Virtual Machines
    • Azure Bastion with native tools & AAD
    • Managed Identities

  • About
  • Archive
  1. Home
  2. Terraform
  3. Working Environments for Terraform
  4. Cloud Shell

Table of Contents

  • Overview
  • Accessing Cloud Shell
  • Create example files
  • Terraform workflow
  • Summing up
  • Links

Cloud Shell

Use the Azure Cloud Shell if you are looking for the quickest way to run Terraform on Azure.

Overview

Azure Cloud Shell is a browser-based shell that provides access to various tools and services for managing Azure resources, and includes common binaries including git, az, jq and terraform in its container image.

The Cloud Shell is ideal for quick demos, small test and dev projects, or for training groups. Many of the labs on this site assume Cloud Shell as it simplifies the pre-reqs.

Pros:

  • Cloud Shell includes a recent version of Terraform
  • Cloud Shell will automatically authenticate
  • Cloud Shell saves the state file in Azure Storage blob
  • Cloud Shell has the Monaco editor, with syntax highlighting for HCL files

Cons:

  • Single user only; not designed for teams
  • No control over Terraform version
  • No sudo
  • Unsuited to long sessions due to timeouts

Accessing Cloud Shell

Access the Azure Cloud Shell via >_ at the top of the Azure portal or via https://shell.azure.com.

  1. Open Cloud Shell

    These labs assume the Bash experience.

    Upon first use, you’ll be prompted to create the Storage Account used to persist the home directory and cloudshell mount.

  2. Check your subscription context.

    az account show
    

    Check that you are in the right subscription or switch.

    Note that the command output includes user.cloudShellID: true. It is assumed that you have Owner or Contributor on the subscription.

Create example files

We’ll run through a quick example, creating a resource group.

  1. Make a working directory

    mkdir terraform-envs
    
  2. Switch to it

    cd ~/terraform-envs
    
  3. Create empty files

    touch provider.tf variables.tf main.tf outputs.tf
    
  4. List the files

    ls -l
    
  5. Open the editor

    code .
    
  6. Select the provider.tf file in the file explorer pane

    Note that the filename is now shown above the editing pane.

  7. Paste the code below in the editing pane on the right

    provider.tf

    terraform {
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = ">=3.50.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    

    Use CTRL+V to paste, or CTRL+SHIFT+V to paste as text.

    Note the syntax highlighting.

    Monaco editor in Azure Cloud Shell

  8. Save

    Press CTRL+S to save.

    Unsaved files have a dot on the filename tab. This will disappear once saved.

  9. Repeat for the other files

    variables.tf

    variable "resource_group_name" {
      description = "Name for the resource group."
      type        = string
      default     = "myExampleResourceGroup"
    }
    
    variable "location" {
      description = "Azure region."
      type        = string
      default     = "UK South"
    }
    

    main.tf

    resource "azurerm_resource_group" "example" {
      name     = var.resource_group_name
      location = var.location
    }
    

    outputs.tf

    output "id" {
      value = azurerm_resource_group.example.id
    }
    

    Don’t forget to use CTRL+S.

Terraform workflow

Run through the standard Terraform workflow.

  1. Initialise

    terraform init
    

    The azurerm provider will be downloaded locally.

  2. Plan

    terraform plan
    

    The config plan shows a single resource group in uksouth called myExampleResourceGroup.

  3. Apply

    terraform apply
    

    Respond “yes” when prompted to create the empty resource group.

  4. Destroy

    terraform destroy
    

    The resource group is removed.

Summing up

Cloud Shell is great for the quick and dirty work, and for use in training. It has most of what you need, and is always accessible if you have a network connection.

However, if you are doing a lot of work then you may want a fuller setup directly on your machine. In the next environment we’ll

  • install a set of tools
  • deploy using a service principal
  • store the state file in Azure

Links

  • Azure Cloud Shell overview
  • Azure Cloud Shell quickstart
  • Azure Cloud Shell image repo
  • Azure Cloud Shell release notes
  • Windows Terminal
  • Manage subscriptions
Previous Cloud Shell macOS