Terraform 如何在terrafrom变量中存储GCP服务帐户JSON?

Terraform 如何在terrafrom变量中存储GCP服务帐户JSON?,terraform,terraform-provider-gcp,terraform-cloud,Terraform,Terraform Provider Gcp,Terraform Cloud,我的terraform gcp提供程序配置如下所示 provider "google" { project = var.project region = var.region credentials = file("account.json") } 我想在terraform cloud上运行我的terraform文件,但我不想将account.json文件置于源代码管理中。如何将json GCP服务帐户文件存储在terraf

我的terraform gcp提供程序配置如下所示

provider "google" {
  project     = var.project
  region      = var.region
  credentials = file("account.json")
}

我想在terraform cloud上运行我的terraform文件,但我不想将account.json文件置于源代码管理中。如何将json GCP服务帐户文件存储在terraform cloud中,然后从terraform脚本访问它?

您可以在terraform cloud UI中以名为的google_凭据提供凭据,并将其标记为a,然后为您的帐户输入类似的值(可能只是您已有的account.json文件的复制粘贴):

然后,您可以在Terraform模块中将来自workspace变量的凭据提供给您的google提供者,如下所示,作为单个变量,该变量将被解释为JSON:

provider "google" {
  project     = var.project
  region      = var.region
  credentials = var.google_credentials
}

variable "google_credentials" {
  description = "the contents of a service account key file in JSON format."
  type = string
}
凭据-(可选)JSON格式的服务帐户密钥文件的路径或内容。您可以使用云控制台管理密钥文件


从。

一个更好的答案是通过运行

tr -d '\n' < current_service_key.json > no_new_line_key.json
tr-d'\n'no\u new\u line\u key.json
将“no_new_line_key.json”的内容粘贴到Terraform Cloud的变量部分,并使用任何变量名称,如此处记录的GOOGLE_凭证或GOOGLE_Cloud_KEYFILE_json:()。我使用了GOOGLE_凭证


您是否已开始使用文件?您也可以使用字符串变量并传递该文件的内容,然后只需使用类似于AWS教程的Terraform变量或环境变量:如果您在Terraform cloud之外运行它,是否有特殊语法在.tfvars中设置多行变量?如何创建.tf在本地计算机和terraform Cloud上工作您最好在本地运行account.json时提供它的路径。多行tfvars值很麻烦。这也会起作用。
terraform apply-var='google_credentials=“/absolute/path/to/account.json”
@ams请接受我的回答,因为它可以解决您的书面问题。如果您发布并链接到其他问题,我很乐意回答这些问题。@AlainO'Dea:我尝试过这个,但JSON的直接复制粘贴似乎不起作用。您测试过这个吗?@Prashant是的。我在生产中未经修改就使用了这个代码。我解决了使用JSON的风险在我7月21日的评论中,g是一个本地多行变量。像这样提供JSON特别尴尬,我建议提供一个文件。请尝试一下。
tr -d '\n' < current_service_key.json > no_new_line_key.json