I am testing Azure setup with terraform to automate VM instance provisioning using user data scritps. User data is a set of scripts or other metadata that’s inserted to an Azure virtual machine at provision time. It rans right after the OS has been installed and the server boots. I would typically use it to update the os, install tools and software I would need on the provisioned node using a shell script which is defined as a data_template like this:
data "template_file" "init-wp-server" {
template = file("./init-wp-server.sh")
}
I tried to speficy the user data file the same way I used to do on AWS and I was getting the following error:
Error: expected "user_data" to be a base64 string, got #!/usr/bin/bash
This is because Azure requires the user data file to be Base64-Encoded. So instead of using this in azurerm_linux_virtual_machine definiton:
user_data = data.template_file.init-wp-server.rendered
The following shoud be used:
user_data = base64encode(data.template_file.init-wp-server.rendered)