Bird
Raised Fist0
Terraformcloud~5 mins

Remote-exec provisioner in Terraform - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the remote-exec provisioner in Terraform?
The remote-exec provisioner runs commands on a remote machine after it is created, allowing you to configure the machine or install software.
Click to reveal answer
beginner
Which connection methods can remote-exec use to connect to the remote machine?
It can use SSH for Linux machines or WinRM for Windows machines to connect and run commands remotely.
Click to reveal answer
beginner
How do you specify commands to run with remote-exec?
You specify commands inside the inline argument as a list of strings, each string is a command to run in order.
Click to reveal answer
intermediate
What happens if a command in remote-exec fails during execution?
Terraform stops the provisioning process and reports an error, so you can fix the issue before continuing.
Click to reveal answer
beginner
Why is it important to configure the connection block correctly when using remote-exec?
Because Terraform needs the right credentials and network access to connect to the remote machine and run commands successfully.
Click to reveal answer
What does the remote-exec provisioner do in Terraform?
ARuns commands on a remote machine after creation
BCreates a remote machine
CDeletes remote resources
DManages Terraform state files
Which protocol is commonly used by remote-exec to connect to Linux machines?
AWinRM
BFTP
CHTTP
DSSH
Where do you list the commands to run in a remote-exec provisioner?
AIn the provider block
BInside the <code>connection</code> block
CInside the <code>inline</code> block
DIn the Terraform backend configuration
What must you configure to allow remote-exec to connect to the remote machine?
AThe Terraform backend
BThe <code>connection</code> block with credentials and host info
CThe provider version
DThe output variables
If a command in remote-exec fails, what does Terraform do?
AStops and reports an error
BIgnores the error and continues
CRetries the command indefinitely
DDeletes the remote machine
Explain how the remote-exec provisioner works in Terraform and why it is useful.
Think about how you would set up a new computer remotely after turning it on.
You got /4 concepts.
    Describe the role of the connection block when using remote-exec and what happens if it is misconfigured.
    Imagine trying to call a friend but dialing the wrong number.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the remote-exec provisioner in Terraform?
      easy
      A. To run commands on a remote machine after it is created
      B. To create a new virtual machine in the cloud
      C. To store Terraform state files remotely
      D. To manage user permissions on the local machine

      Solution

      1. Step 1: Understand the role of provisioners

        Provisioners in Terraform run scripts or commands on resources after creation.
      2. Step 2: Identify what remote-exec does

        The remote-exec provisioner connects to the remote machine and runs commands there.
      3. Final Answer:

        To run commands on a remote machine after it is created -> Option A
      4. Quick Check:

        remote-exec runs remote commands = D [OK]
      Hint: remote-exec runs commands remotely after resource creation [OK]
      Common Mistakes:
      • Confusing remote-exec with resource creation
      • Thinking remote-exec manages local files
      • Mixing remote-exec with state management
      2. Which of the following is the correct syntax to define a remote-exec provisioner inside a Terraform resource?
      easy
      A. remote_exec { commands = ["echo Hello"] }
      B. provisioner remote-exec { script = "hello.sh" }
      C. provisioner "remote-exec" { inline = ["echo Hello"] }
      D. exec_remote { inline = ["echo Hello"] }

      Solution

      1. Step 1: Recall Terraform provisioner syntax

        Provisioners are defined with the keyword provisioner followed by the provisioner type in quotes.
      2. Step 2: Check the correct block structure for remote-exec

        The remote-exec provisioner uses inline to run commands directly.
      3. Final Answer:

        provisioner "remote-exec" { inline = ["echo Hello"] } -> Option C
      4. Quick Check:

        Correct provisioner block syntax = B [OK]
      Hint: Use provisioner "remote-exec" with inline commands [OK]
      Common Mistakes:
      • Using underscores instead of hyphens in provisioner name
      • Omitting quotes around provisioner type
      • Using wrong block names like exec_remote
      3. Given this Terraform snippet inside an AWS EC2 resource:
      provisioner "remote-exec" {
        inline = ["sudo apt-get update", "sudo apt-get install -y nginx"]
        connection {
          type        = "ssh"
          user        = "ubuntu"
          private_key = file("~/.ssh/id_rsa")
          host        = self.public_ip
        }
      }

      What will happen when this runs successfully?
      medium
      A. The commands will run locally on the Terraform machine
      B. The EC2 instance will update packages and install nginx via SSH
      C. Terraform will fail because private_key cannot be a file
      D. The EC2 instance will reboot automatically after installation

      Solution

      1. Step 1: Understand remote-exec with connection block

        The provisioner connects via SSH using the given user, key, and host to run commands remotely.
      2. Step 2: Analyze the inline commands

        The commands update package lists and install nginx on the remote EC2 instance.
      3. Final Answer:

        The EC2 instance will update packages and install nginx via SSH -> Option B
      4. Quick Check:

        remote-exec runs commands remotely = C [OK]
      Hint: remote-exec runs inline commands on remote host via SSH [OK]
      Common Mistakes:
      • Thinking commands run locally
      • Assuming private_key cannot be a file
      • Expecting automatic reboot after install
      4. You have this Terraform snippet:
      provisioner "remote-exec" {
        inline = ["sudo apt-get update", "sudo apt-get install -y nginx"]
        connection {
          type     = "ssh"
          user     = "ubuntu"
          password = "mypassword"
          host     = self.public_ip
        }
      }

      After running Terraform apply, you get a connection timeout error. What is the most likely cause?
      medium
      A. The EC2 instance's security group does not allow SSH (port 22) inbound
      B. The password authentication is not supported by SSH
      C. The inline commands have syntax errors
      D. The host attribute should be a private IP, not public IP

      Solution

      1. Step 1: Understand connection timeout causes

        Timeout usually means network connection to SSH port 22 is blocked or unreachable.
      2. Step 2: Check common network issues

        If the EC2 security group lacks inbound SSH rules, connection fails despite correct credentials.
      3. Final Answer:

        The EC2 instance's security group does not allow SSH (port 22) inbound -> Option A
      4. Quick Check:

        Timeout = network block on SSH port 22 [OK]
      Hint: Timeout usually means SSH port 22 blocked in firewall/security group [OK]
      Common Mistakes:
      • Blaming inline command syntax for connection errors
      • Assuming password auth is always unsupported
      • Confusing public and private IP for SSH host
      5. You want to use remote-exec to run a script on multiple newly created instances in a loop. Which approach is best to ensure commands run on each instance correctly?
      hard
      A. Use local-exec provisioner to SSH manually to each instance
      B. Define one resource and run remote-exec with a list of all instance IPs in one provisioner
      C. Run remote-exec provisioner only once after all instances are created using a null_resource
      D. Use a for_each on the resource and include a remote-exec provisioner inside each resource block

      Solution

      1. Step 1: Understand resource loops with provisioners

        Using for_each creates multiple resource instances, each with its own provisioner execution.
      2. Step 2: Why per-resource provisioner is best

        Provisioners inside each resource run commands on that specific instance, ensuring correct targeting.
      3. Final Answer:

        Use a for_each on the resource and include a remote-exec provisioner inside each resource block -> Option D
      4. Quick Check:

        Provisioner per resource instance = A [OK]
      Hint: Use for_each with provisioner inside resource for multiple instances [OK]
      Common Mistakes:
      • Trying to run remote-exec on all IPs in one provisioner
      • Using null_resource without proper triggers
      • Using local-exec instead of remote-exec for remote commands
      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