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. Fundamentals
  4. Initialise

Table of Contents

  • Overview
  • Create a provider.tf
  • Initialise terraform
  • Summary

Initialise

Use `terraform init` to initialise a terraform environment, downloading providers and modules.

Overview

In this short lab you will

  • create a provider.tf in Cloud Shell
  • use the terraform init command to download the azurerm provider locally

Create a provider.tf

  1. Open the Cloud Shell

    Authenticate and check you are in the right subscription.

  2. Create a directory

    mkdir terraform-basics
    

    Use CTRL+SHIFT+V to paste as plain text into the Cloud Shell’s terminal.

  3. Change to the directory

    cd terraform-basics
    
  4. Open the Monaco editor

    The Azure Cloud Shell includes the integrated open source Monaco editor.

    code provider.tf
    
  5. Copy the example provider.tf

    Click on the copy icon that appears when you hover over the example code block below.

    terraform {
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.1"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    
      storage_use_azuread = true
    }
    

    Terraform can use providers for multiple clouds and other technologies. This example provider.tf has provider requirements so that we are assured a minimum version of the azurerm provider, and also specifies a couple of azurerm provider features.

  6. Paste into the editor window

    Click on the main editor pain and paste using CTRL+V.

    The circle next to the file name indicates that the file has unsaved changes.

  7. Save the file

    Click on the ellipsis (…) and select Save, or use CTRL+S.

    provider.tf

  8. Close the editor

    Select Close Editor from the ellipsis, or use CTRL+Q.

Initialise terraform

  1. Run terraform version

    terraform version
    

    You may ignore any message saying that your Terraform version is out of date.

    The cloud shell container image includes the terraform binary and you cannot update it.

    In later labs you will see how to install the terraform binary for other scenarios where you do have full control over the versions.

  2. Run terraform init

    This is the first of the key commands in the Terraform workflow.

    terraform init
    

    Example output:

    Initializing the backend...
    
    Initializing provider plugins...
    - Finding hashicorp/azurerm versions matching "~> 3.1"...
    - Installing hashicorp/azurerm v3.1.0...
    - Installed hashicorp/azurerm v3.1.0 (signed by HashiCorp)
    
    Terraform has created a lock file .terraform.lock.hcl to record the provider
    selections it made above. Include this file in your version control repository
    so that Terraform can guarantee to make the same selections by default when
    you run "terraform init" in the future.
    
    Terraform has been successfully initialized!
    
    You may now begin working with Terraform. Try running "terraform plan" to see
    any changes that are required for your infrastructure. All Terraform commands
    should now work.
    
    If you ever set or change modules or backend configuration for Terraform,
    rerun this command to reinitialize your working directory. If you forget, other
    commands will detect it and remind you to do so if necessary.
    
  3. List the new files

    find .terraform* -type f
    

    Example output:

    .terraform/providers/registry.terraform.io/hashicorp/azurerm/3.1.0/linux_amd64/terraform-provider-azurerm_v3.1.0_x5
    .terraform.lock.hcl
    

    The azure provider has been downloaded and a dependency lock file has been created.

  4. Run terraform providers

    terraform providers
    

    The terraform providers command shows the required providers, their sources and the version constraints. This command becomes more useful when we start to make use of modules.

    Example output:

    Providers required by configuration:
    .
    └── provider[registry.terraform.io/hashicorp/azurerm] ~> 3.1
    
  5. Run terraform version again

    terraform version
    

    Confirms the version of the terraform binary and the providers.

Summary

We have reached the end of the lab. You have initialised the azurerm provider.

Move onto the next lab and we’ll create a couple of Terraform files.

Previous Initialise Format