将 Terraform 输出转储到本地文件

pka*_*mol 3 google-cloud-platform terraform terraform-provider-gcp

我想credentials.json在目录中创建一个文件 ( ),例如content使用 Terraform。

内容将是私人服务帐户密钥的输出。

我使用以下代码创建服务帐户并获取其密钥data

resource "google_service_account" "my-account" {
  account_id = "${var.account_id}"
  project    = "${var.project_id}"
}

resource "google_service_account_key" "my-account" {
  service_account_id = "${google_service_account.my-account.name}"
}

data "google_service_account_key" "my-account" {
  name            = "${google_service_account_key.cd.name}"
  public_key_type = "TYPE_X509_PEM_FILE"
}
Run Code Online (Sandbox Code Playgroud)

然后我如何将其转储到本地文件?

我的用例是我想创建一个credentials.json启用定期备份jenkins到谷歌云存储桶的功能。

yda*_*coR 5

您可以在 Terraform 运行中使用该local_file资源将数据写入磁盘。

所以你可以做类似下面的事情:

resource "google_service_account" "my-account" {
  account_id = "${var.account_id}"
  project    = "${var.project_id}"
}

resource "google_service_account_key" "my-account" {
  service_account_id = "${google_service_account.my-account.name}"
}

resource "local_file" "key" {
  filename = "/path/to/key/output"
  content  = "${base64decode(google_service_account_key.my-account.private_key)}"
}
Run Code Online (Sandbox Code Playgroud)

请注意,您永远不需要数据源来查看在同一 Terraform 命令中创建的资源的输出。在这种情况下,您可以放弃google_service_account_key数据源,因为您拥有可用的资源。

数据源的好处是当您需要查找不是由 Terraform 创建的或在不同状态文件中的资源的某些生成值时。