How to fix Invalid function argument on line in provider credentials file google Invalid value for path parameter no file exists



Working with terraform can tricky sometime and specially if you are working with cloud service provider such as Google Cloud Platform.

I have faced the following issue while I was working with my first Terrafrom project with Google Cloud.

Error Invalid function argument on main.tf line 2, in provider google credentials = file(gcp-account.json) Invalid value for path parameter no file exists at gcp-account.json this function works only with files that are distributed as part of the configuration source code, so if this file will be created by a resource in this configuration you must instead obtain this result from an attribute of that resource.

Initially the issue looked quite scary but when I looked the issue carefully then I realise - I had incorrect path for my credential JSON file.



Here is my terraform file in which I had mentioned incorrect path for gcp-account.json

 1provider "google" {
 2     credentials = file("/rwagh/gcp-account.json")   /*Incorrect path - It should be absolute path*/ 
 3     project     = "gcp-terraform-307119"
 4     region      = "europe-west4"
 5     zone        = "europe-west4-a"
 6}
 7
 8resource "google_compute_instance" "default" {
 9  name         = "test"
10  machine_type = "e2-micro"
11
12  boot_disk {
13    initialize_params {
14      image = "debian-cloud/debian-9"
15    }
16  }
17
18  network_interface {
19    network = "default"
20
21    access_config {
22      // Ephemeral IP
23    }
24  }
25}


How to fix?

To fix this issue you should always use absolute path inside your terraform file.

Example -

1credentials = file("<Absolute path to .pem file e.g /home/rwagh/id_rsa.pem>")
2
3//or
4
5credentials = file("<Absolute path to .json file e.g /home/rwagh/gcp-account.json>")



Here is my final terraform file after replacing with absolute path

 1provider "google" {
 2     credentials = file("/home/rwagh/gcp-account.json")   /*Use absolute path*/ 
 3     project     = "gcp-terraform-307119"
 4     region      = "europe-west4"
 5     zone        = "europe-west4-a"
 6}
 7
 8resource "google_compute_instance" "default" {
 9  name         = "test"
10  machine_type = "e2-micro"
11
12  boot_disk {
13    initialize_params {
14      image = "debian-cloud/debian-9"
15    }
16  }
17
18  network_interface {
19    network = "default"
20
21    access_config {
22      // Ephemeral IP
23    }
24  }
25}



Read More - Terragrunt -

  1. How to use Terragrunt?

Posts in this Series