Upgrade & Secure Your Future with DevOps, SRE, DevSecOps, MLOps!

We spend hours on Instagram and YouTube and waste money on coffee and fast food, but won’t spend 30 minutes a day learning skills to boost our careers.
Master in DevOps, SRE, DevSecOps & MLOps!

Learn from Guru Rajesh Kumar and double your salary in just one year.


Get Started Now!

Terrafrom Tutorials – remote-exec provisioner using AWS & Azure providers

the remote-exec provisioner in Terraform is used to execute commands remotely on a target resource after it’s been created. This is often used for post-deployment configuration or initialization tasks on virtual machines, containers, or other infrastructure resources.

Here’s a general example of how you can use the remote-exec provisioner:


resource "aws_instance" "example" {
  ami           = "ami-12345678"  # Replace with your desired AMI ID
  instance_type = "t2.micro"
}

provisioner "remote-exec" {
  inline = [
    "echo This is a remote command.",
    "echo You can execute multiple commands here.",
    "echo Remember that each command is executed independently.",
  ]
}


The remote-exec provisioner requires a connection block to specify how Terraform will connect to the remote resource. The connection block can be defined in the same resource block as the remote-exec provisioner, or it can be defined in a separate resource block.

The remote-exec provisioner has the following arguments:

  • inline: A list of commands to be executed. The provisioner uses a default shell unless you specify a shell as the first command (eg., #!/bin/bash).
  • script: A path to a local script that will be copied to the remote resource and then executed.
  • scripts: A list of paths to local scripts that will be copied to the remote resource and then executed, one after the other.
  • timeout: The maximum amount of time to wait for the commands to complete, in seconds.
  • on_failure: The action to take if the commands fail. Valid values are “continue” and “fail”.

resource "aws_instance" "example" {
  ...
}

resource "null_resource" "bootstrap" {
  depends_on = ["aws_instance.example"]

  provisioner "remote-exec" {
    connection {
      instance_id = aws_instance.example.id
      user = "ubuntu"
    }

    inline = ["sudo apt-get update", "sudo apt-get install -y terraform"]
    timeout = 600
    on_failure = "fail"
  }
}

Remote Exec in Windows


  provisioner "remote-exec" {
    on_failure = "continue"
    inline = [
      "powershell.exe -NonInteractive -NoProfile -ExecutionPolicy Bypass -Command \"Write-Output 'Hello from Terraform'\"",
    ]
  }

  connection {
    type        = "winrm"
    user        = "Administrator"
    password    = "your_password"
    host        = self.public_ip_address
    https       = false
    port        = 5985
    timeout     = "10m"
  }
}

  connection {
    type     = "winrm"
    user     = "Administrator"
    password = "your_password"
    host     = self.public_ip_address
    https    = false
    port     = 5985
    timeout  = "10m"
  }

  provisioner "remote-exec" {
    on_failure = "continue"
    inline = [
      "cmd /c echo Hello from Terraform"
    ]
  }

provider "azurerm" {
  features {}
}

resource "azurerm_virtual_machine" "example" {
  # ... other VM configuration ...

  connection {
    type        = "winrm"
    user        = "Administrator"
    password    = "your_password"
    host        = self.public_ip_address
    https       = false
    port        = 5985
    timeout     = "10m"
  }
}

resource "null_resource" "example" {
  triggers = {
    instance_id = azurerm_virtual_machine.example.id
  }

  provisioner "local-exec" {
    command = "echo Remote execution completed"
  }

  provisioner "remote-exec" {
    on_failure = "continue"
    inline = [
      "powershell.exe -NonInteractive -NoProfile -ExecutionPolicy Bypass -Command \"Write-Output 'Hello from Terraform'\"",
    ]
  }

  depends_on = [azurerm_virtual_machine.example]
}

DevOps Certification, SRE Certification, and DevSecOps Certification by DevOpsSchool

Explore our DevOps Certification, SRE Certification, and DevSecOps Certification programs at DevOpsSchool. Gain the expertise needed to excel in your career with hands-on training and globally recognized certifications.