If you are using azurerm_template_deployment
terraform resource and getting following errors:
- ‘[parameter]’ expected type ‘string’, got unconvertible type ‘array’
- ‘[parameter]’ expected type ‘string’, got unconvertible type ‘object’
- ‘[parameter]’ expected type ‘string’, got unconvertible type ‘int’
- etc.
Then you are using parameters
argument of this resource, so that is possible to pass only string
-type parameters with this mechanic.
As an example, the problems begins when you need to pass reference to a KeyVault secret by parameters.
There is a closed issues on AzureRM Terraform provider on GitHub which seems to be impossible to resolve https://github.com/terraform-providers/terraform-provider-azurerm/issues/34
To avoid this error only possible way which I have found it to use parameters_body
argument. In this case we will lost any validation by Terraform except validity of parameters JSON but we will able to put any type of parameters. The further validation of parameters will be done by ARM.
Example:
variable "array_variable_example" { default = <<EOF [ "Element1", "Element2", "Element3" ] EOF } variable "object_variable_example" { default = <<EOF { "key": { "subkey": "value" }` } EOF } variable "int_variable_example" { default = "1" } variable "string_variable_example" { default = "string" } resource "azurerm_template_deployment" "terraform_resource_name" { name = "_deployment_${var.environment}" resource_group_name = "${var.resource_group_name}" template_body = "${file("${path.module}/arm/azuredeploy.json")}" parameters_body = <<EOF { "keyVaultSecretParameter": { "reference": { "keyVault": { "id": "${var.key_vault_id}" }, "secretName": "${var.secret_name}" } }, "objectParameter": { "value": "${var.object_variable_example}" }, "stringParameter": { "value": "${var.string_variable_example}" }, "arrayParameter": { "value": ${var.array_variable_example} }, "integerParameter": { "value": ${var.int_variable_example} } } EOF deployment_mode = "Incremental" }