2020-10-27 02:15:36 +01:00
|
|
|
---
|
2021-11-23 00:47:36 +01:00
|
|
|
page_title: Initializing Working Directories - Terraform CLI
|
|
|
|
description: >-
|
|
|
|
Working directories contain configurations, settings, cached plugins and
|
|
|
|
modules, and state data. Learn how to initialize and manage working
|
|
|
|
directories.
|
|
|
|
sidebar_title: Initializing Working Directories
|
2020-10-27 02:15:36 +01:00
|
|
|
---
|
|
|
|
|
|
|
|
# Initializing Working Directories
|
|
|
|
|
|
|
|
Terraform expects to be invoked from a working directory that contains
|
|
|
|
configuration files written in
|
2021-11-23 00:47:36 +01:00
|
|
|
[the Terraform language](/language/). Terraform uses
|
2020-10-27 02:15:36 +01:00
|
|
|
configuration content from this directory, and also uses the directory to store
|
|
|
|
settings, cached plugins and modules, and sometimes state data.
|
|
|
|
|
|
|
|
A working directory must be initialized before Terraform can perform any
|
|
|
|
operations in it (like provisioning infrastructure or modifying state).
|
|
|
|
|
|
|
|
## Working Directory Contents
|
|
|
|
|
|
|
|
A Terraform working directory typically contains:
|
|
|
|
|
|
|
|
- A Terraform configuration describing resources Terraform should manage. This
|
|
|
|
configuration is expected to change over time.
|
|
|
|
- A hidden `.terraform` directory, which Terraform uses to manage cached
|
|
|
|
provider plugins and modules, record which
|
2021-11-23 00:47:36 +01:00
|
|
|
[workspace](/cli/workspaces/) is currently active, and
|
2020-10-27 02:15:36 +01:00
|
|
|
record the last known backend configuration in case it needs to migrate state
|
|
|
|
on the next run. This directory is automatically managed by Terraform, and is
|
|
|
|
created during initialization.
|
|
|
|
- State data, if the configuration uses the default `local` backend. This is
|
|
|
|
managed by Terraform in a `terraform.tfstate` file (if the directory only uses
|
|
|
|
the default workspace) or a `terraform.tfstate.d` directory (if the directory
|
|
|
|
uses multiple workspaces).
|
|
|
|
|
|
|
|
## Initialization
|
|
|
|
|
|
|
|
Run the `terraform init` command to initialize a working directory that contains
|
|
|
|
a Terraform configuration. After initialization, you will be able to perform
|
|
|
|
other commands, like `terraform plan` and `terraform apply`.
|
|
|
|
|
|
|
|
If you try to run a command that relies on initialization without first
|
|
|
|
initializing, the command will fail with an error and explain that you need to
|
|
|
|
run init.
|
|
|
|
|
|
|
|
Initialization performs several tasks to prepare a directory, including
|
|
|
|
accessing state in the configured backend, downloading and installing provider
|
|
|
|
plugins, and downloading modules. Under some conditions (usually when changing
|
|
|
|
from one backend to another), it might ask the user for guidance or
|
|
|
|
confirmation.
|
|
|
|
|
2021-11-23 00:47:36 +01:00
|
|
|
For details, see [the `terraform init` command](/cli/commands/init).
|
2020-10-27 02:15:36 +01:00
|
|
|
|
|
|
|
## Reinitialization
|
|
|
|
|
|
|
|
Certain types of changes to a Terraform configuration can require
|
|
|
|
reinitialization before normal operations can continue. This includes changes to
|
|
|
|
provider requirements, module sources or version constraints, and backend
|
|
|
|
configurations.
|
|
|
|
|
|
|
|
You can reinitialize a directory by running `terraform init` again. In fact, you
|
|
|
|
can reinitialize at any time; the init command is idempotent, and will have no
|
|
|
|
effect if no changes are required.
|
|
|
|
|
|
|
|
If reinitialization is required, any commands that rely on initialization will
|
|
|
|
fail with an error and tell you so.
|
|
|
|
|
|
|
|
## Reinitializing Only Modules
|
|
|
|
|
|
|
|
The `terraform get` command will download modules referenced in the
|
|
|
|
configuration, but will not perform the other required initialization tasks.
|
|
|
|
This command is only useful for niche workflows, and most Terraform users can
|
|
|
|
ignore it in favor of `terraform init`.
|