---
page_title: 'Provisioner: local-exec'
description: >-
  The `local-exec` provisioner invokes a local executable after a resource is
  created. This invokes a process on the machine running Terraform, not on the
  resource. See the `remote-exec` provisioner to run commands on the resource.
---

# local-exec Provisioner

The `local-exec` provisioner invokes a local executable after a resource is
created. This invokes a process on the machine running Terraform, not on the
resource. See the `remote-exec`
[provisioner](/terraform/language/resources/provisioners/remote-exec) to run commands on the
resource.

Note that even though the resource will be fully created when the provisioner is
run, there is no guarantee that it will be in an operable state - for example
system services such as `sshd` may not be started yet on compute resources.

~> **Important:** Use provisioners as a last resort. There are better alternatives for most situations. Refer to
[Declaring Provisioners](/terraform/language/resources/provisioners/syntax) for more details.

## Example usage

```hcl
resource "aws_instance" "web" {
  # ...

  provisioner "local-exec" {
    command = "echo ${self.private_ip} >> private_ips.txt"
  }
}
```

## Argument Reference

The following arguments are supported:

* `command` - (Required) This is the command to execute. It can be provided
  as a relative path to the current working directory or as an absolute path.
  It is evaluated in a shell, and can use environment variables or Terraform
  variables.

* `working_dir` - (Optional) If provided, specifies the working directory where
  `command` will be executed. It can be provided as a relative path to the
  current working directory or as an absolute path. The directory must exist.

* `interpreter` - (Optional) If provided, this is a list of interpreter
  arguments used to execute the command. The first argument is the
  interpreter itself. It can be provided as a relative path to the current
  working directory or as an absolute path.  The remaining arguments are
  appended prior to the command.  This allows building command lines of the
  form "/bin/bash", "-c", "echo foo". If `interpreter` is unspecified,
  sensible defaults will be chosen based on the system OS.

* `environment` - (Optional) block of key value pairs representing the
  environment of the executed command. inherits the current process environment.

* `when` - (Optional) If provided, specifies when Terraform will execute the command.
  For example, `when = destroy` specifies that the provisioner will run when the associated resource
  is destroyed. Refer to [Destroy-Time Provisioners](/terraform/language/resources/provisioners/syntax#destroy-time-provisioners)
  for details.
  
*  `quiet` - (Optional) If set to `true`, Terraform will not print the command to be executed to stdout, and will instead print "Suppressed by quiet=true". Note that the output of the command will still be printed in any case.

### Interpreter Examples

```hcl
resource "terraform_data" "example1" {
  provisioner "local-exec" {
    command = "open WFH, '>completed.txt' and print WFH scalar localtime"
    interpreter = ["perl", "-e"]
  }
}
```

```hcl
resource "terraform_data" "example2" {
  provisioner "local-exec" {
    command = "Get-Date > completed.txt"
    interpreter = ["PowerShell", "-Command"]
  }
}
```

```hcl
resource "aws_instance" "web" {
  # ...

  provisioner "local-exec" {
    command = "echo $FOO $BAR $BAZ >> env_vars.txt"

    environment = {
      FOO = "bar"
      BAR = 1
      BAZ = "true"
    }
  }
}
```
