HashiCorp Terraform is a powerful Infrastructure as Code (IaC) tool for managing resources both in the cloud and on-premises. The first command that you run when working with a Terraform Project is the
terraform init command (aka Terraform project initialization command). The Terraform Init command is a critical part of the Terraform workflow, and must be run before any other Terraform commands can be used. Regardless of your experience level with Terraform, you’ll need to be familiar with the
terraform init command.
This article explains how to use the
terraform init command, as well as what options are available when using it, with examples. Whether you’re a beginner looking to learn HashiCorp Terraform, or an experienced DevOps Engineer or Site Reliability Engineer (SRE), this article will help you gain further understanding of the Terraform Init command.
What is the Terraform Init Command?
terraform init command is used to initialize a Terraform working directory; also known as a Terraform project. When the
init command is run, it will automatically download and install any required Terraform providers and plugins used within the Terraform code. It will also set up the backend configured in the Terraform code for storing the Terraform state (
.tfstate) file. This state file is where Terraform will store information about the infrastructure managed by the project, and it can be stored locally or in a remote / shared location like Azure Storage.
To run the Terraform Init command, you’ll need to first have Terraform installed, then navigate to the directory where the Terraform Project is located and run the following command:
After running the
terraform init command within the working directory, Terraform will have downloaded and installed any required providers and plugins, and set up the backend state file storage. This will get everything initialized for Terraform to be able to manage the infrastructure configured within the Terraform project code.
The Terraform providers and plugins that are downloaded when the
init command is run are saved within a sub-directory of the working directory where the command was run. In other words, the downloads are saved within a sub-directory of the Terraform project. This sub-directory is named
.terraform and depending on your operating system settings may be hidden from view. You don’t need to worry about committing this sub-directory into source control.
If you need help when running the
terraform init command, you can add the
-help option to have Terraform output help information about command usage to the terminal.
terraform init -help
What Init Command Options are Available?
When running the
terraform init command it will take direction off the Terraform configuration defined in the code, but there are also several options that can be used on the terminal when running the
Here’s a summary of the different, options available when running the
terraform init comand:
-backend=true|false: Specifies whether to set up the backend for storing Terraform state.
falsewill skip the backend configuration. By default, this option is set to
-backend-config=path: Specifies a file containing backend configuration values to use. This option can be used to configure the backend without embedding configuration values into the Terraform configuration files.
-get=true|false: Specifies whether to download and install modules. By default, this option is set to
trueso it will automatically download modules.
-input=true|false: Specifies whether to ask for input. By default, this option is set to
falsecan be used for a more “quite” execution of the command.
-lock=true|false: Specifies whether to lock the state file. By default, this option is set to
falsecould be used to disable locking the state files during state-related operations if necessary.
-lock-timeout=duration: Specifies the time to wait for a state lock. By default, this option is set to
0s(zero seconds) or “no wait”; which will cause failure if the lock is currently held by another process.
-upgrade: Install the latest module and provider versions allowed within configured constraints, overriding the default behavior of selecting exactly the version recorded in the dependency lock file.
-reconfigure: Reconfigure a backend, ignoring any saved configuration.
These options can be used to customize the behavior of the
terraform init command, such as locking the state file, specifying the backend for storing the Terraform state file, or other options. The
terraform init command will generally be used without any options, but options can be used depending on the specific use case a necessary.