Bird
Raised Fist0
Terraformcloud~10 mins

Local-exec provisioner in Terraform - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Local-exec provisioner
Terraform plan starts
↓
Resource created
↓
Local-exec provisioner triggers
↓
Runs local command/script
↓
Command success?
No→Error stops apply
Yes↓
Terraform apply continues/completes
Terraform creates a resource, then runs a local command on your machine using local-exec provisioner. If the command fails, apply stops.
Execution Sample
Terraform
resource "null_resource" "example" {
  provisioner "local-exec" {
    command = "echo Hello from local-exec"
  }
}
Creates a dummy resource and runs a local shell command printing a message on your machine.
Process Table
StepActionResource StateProvisioner CommandCommand ResultNext Step
1Start terraform applyNo resourceN/AN/ACreate resource
2Create null_resource.exampleResource createdN/AN/ARun local-exec provisioner
3Run local-exec commandResource createdecho Hello from local-execHello from local-exec printedCheck command success
4Check command successResource createdN/ASuccessComplete apply
5Terraform apply completesResource createdN/AN/AEnd
💡 Local-exec command succeeded, so terraform apply completes successfully.
Status Tracker
VariableStartAfter Step 2After Step 3Final
Resource StateNo resourceResource createdResource createdResource created
Provisioner CommandN/AN/Aecho Hello from local-execN/A
Command ResultN/AN/AHello from local-exec printedSuccess
Key Moments - 3 Insights
Why does terraform stop if the local-exec command fails?
Terraform treats the local-exec provisioner as part of resource creation. If the command fails (see step 4 in execution_table), terraform stops to avoid inconsistent state.
Does the local-exec command run on the cloud resource?
No, local-exec runs on your local machine where terraform runs, not on the cloud resource itself (step 3 in execution_table).
Can local-exec provisioner access resource attributes?
Yes, you can use resource attributes in the command string, but the command still runs locally (noted in step 3).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the resource state after step 2?
AResource created
BNo resource
CResource deleted
DResource failed
💡 Hint
Check the 'Resource State' column at step 2 in execution_table.
At which step does the local-exec command run?
AStep 1
BStep 2
CStep 3
DStep 5
💡 Hint
Look for 'Run local-exec command' in the 'Action' column in execution_table.
If the local-exec command fails, what happens to terraform apply?
AIt retries the command infinitely
BIt stops with an error
CIt continues normally
DIt ignores the failure and completes
💡 Hint
Refer to the concept_flow and key_moments about command failure stopping apply.
Concept Snapshot
Local-exec provisioner runs a command on your local machine after resource creation.
Syntax: provisioner "local-exec" { command = "your-command" }
Runs during terraform apply.
If command fails, terraform apply stops.
Useful for local scripts or notifications.
Full Transcript
The local-exec provisioner in terraform runs a command on your local machine after a resource is created. The flow starts with terraform creating the resource, then triggering the local-exec provisioner to run the specified command. If the command succeeds, terraform continues and completes the apply. If it fails, terraform stops to avoid inconsistent state. The command runs locally, not on the cloud resource. You can use resource attributes in the command string. This provisioner is useful for running local scripts or notifications during terraform apply.

Practice

(1/5)
1. What does the local-exec provisioner do in Terraform?
easy
A. Runs commands inside the cloud resource
B. Executes Terraform plan without applying changes
C. Creates a local copy of the Terraform state file
D. Runs commands on your local machine after resource creation

Solution

  1. Step 1: Understand provisioner types

    Terraform provisioners run scripts or commands either locally or remotely after resource creation.
  2. Step 2: Identify local-exec purpose

    The local-exec provisioner specifically runs commands on your local machine, not inside the cloud resource.
  3. Final Answer:

    Runs commands on your local machine after resource creation -> Option D
  4. Quick Check:

    local-exec runs commands locally [OK]
Hint: Local-exec runs commands on your own computer [OK]
Common Mistakes:
  • Confusing local-exec with remote-exec
  • Thinking it runs inside the cloud resource
  • Assuming it manages Terraform state files
2. Which of the following is the correct syntax to use a local-exec provisioner in a Terraform resource?
easy
A. provisioner "local-exec" { command = "echo Hello" }
B. provisioner local-exec { run = "echo Hello" }
C. local_exec { command = "echo Hello" }
D. provisioner "local_exec" { execute = "echo Hello" }

Solution

  1. Step 1: Recall Terraform provisioner syntax

    Provisioners use the keyword provisioner followed by the provisioner type in quotes.
  2. Step 2: Check correct attribute names

    The local-exec provisioner uses command to specify the shell command to run.
  3. Final Answer:

    provisioner "local-exec" { command = "echo Hello" } -> Option A
  4. Quick Check:

    Correct syntax uses provisioner "local-exec" and command [OK]
Hint: Use quotes and 'command' attribute for local-exec [OK]
Common Mistakes:
  • Omitting quotes around local-exec
  • Using wrong attribute names like run or execute
  • Using underscore instead of dash in local-exec
3. Given this Terraform snippet, what will happen when the resource is created?
resource "null_resource" "example" {
  provisioner "local-exec" {
    command = "echo Resource created"
  }
}
medium
A. Terraform will fail because null_resource cannot have provisioners
B. Terraform will print 'Resource created' inside the cloud resource
C. Terraform will print 'Resource created' on your local machine
D. Terraform will ignore the provisioner and create the resource silently

Solution

  1. Step 1: Understand null_resource and local-exec

    The null_resource is a Terraform resource that supports provisioners for running commands.
  2. Step 2: Analyze the command execution

    The local-exec provisioner runs the command on your local machine, so it will print the message locally.
  3. Final Answer:

    Terraform will print 'Resource created' on your local machine -> Option C
  4. Quick Check:

    local-exec runs commands locally, so output appears locally [OK]
Hint: local-exec runs commands locally, not remotely [OK]
Common Mistakes:
  • Thinking output appears inside cloud resource
  • Believing null_resource disallows provisioners
  • Assuming provisioners are ignored silently
4. You wrote this Terraform code but get an error when applying:
resource "null_resource" "fail_example" {
  provisioner "local-exec" {
    command = echo "Hello"
  }
}
What is the cause of the error?
medium
A. Missing quotes around the command string
B. local-exec provisioner cannot be used with null_resource
C. The command attribute should be named run
D. Terraform does not support echo commands

Solution

  1. Step 1: Check command syntax

    The command value must be a string enclosed in quotes in Terraform configuration.
  2. Step 2: Identify missing quotes

    Here, command = echo "Hello" lacks quotes around the entire command string, causing a syntax error.
  3. Final Answer:

    Missing quotes around the command string -> Option A
  4. Quick Check:

    Command must be a quoted string [OK]
Hint: Always quote command strings in local-exec [OK]
Common Mistakes:
  • Forgetting quotes around command
  • Using wrong attribute names
  • Assuming null_resource disallows provisioners
5. You want to run a local script setup.sh after creating an AWS EC2 instance using Terraform. Which is the best way to use local-exec provisioner to achieve this safely?
hard
A. Run setup.sh manually after Terraform apply
B. Use remote-exec provisioner to run setup.sh on the EC2 instance
C. Use local-exec with command = "./setup.sh" inside the EC2 resource without dependencies
D. Use local-exec with command = "./setup.sh" inside the EC2 resource and add depends_on for the instance

Solution

  1. Step 1: Understand local-exec vs remote-exec

    The local-exec provisioner runs commands on your local machine, which is not suitable for running scripts on the EC2 instance itself.
  2. Step 2: Use remote-exec for remote commands

    To run a script on the EC2 instance, use the remote-exec provisioner which executes commands on the remote resource.
  3. Final Answer:

    Use remote-exec provisioner to run setup.sh on the EC2 instance -> Option B
  4. Quick Check:

    remote-exec runs commands on the remote resource [OK]
Hint: Use remote-exec to run scripts on remote instances [OK]
Common Mistakes:
  • Using remote-exec for a local script
  • Running scripts manually instead of automating
  • Adding unnecessary depends_on inside the resource
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard