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


In this short lab you will

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

Create a

  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.

  5. Copy the example

    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 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.

  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:


    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[] ~> 3.1
  5. Run terraform version again

    terraform version

    Confirms the version of the terraform binary and the providers.


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.

Help us improve

Azure Citadel is a community site built on GitHub, please contribute and send a pull request

 Make a change