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]
}
- Best AI tools for Software Engineers - November 4, 2024
- Installing Jupyter: Get up and running on your computer - November 2, 2024
- An Introduction of SymOps by SymOps.com - October 30, 2024