将 Terraform 输出转储到本地文件
Dumping Terraform output to a local file
我想在目录中创建一个文件 (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"
}
然后如何将其转储到本地文件?
我的用例是我想创建 credentials.json
以启用 jenkins
的定期 backups 到 google 云存储桶。
您最好的选择是为您的服务帐户创建输出:
output "google_service_account_key" {
value = "${base64decode(data.google_service_account_key.my-account.private_key)}"
}
使用 terraform output
命令,您可以专门查询密钥,结合 jq(或另一个 json 解析器)找到正确的输出:
terraform output -json google_service_account_key | jq '.value[0]' > local_file.json
您可以使用 local_file
resource 将数据写入 Terraform 运行 中的磁盘。
因此您可以执行以下操作:
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)}"
}
请注意,您永远不需要数据源来查看您在同一个 Terraform 命令中创建的资源的输出。在这种情况下,您可以放弃 google_service_account_key
数据源,因为您拥有可用的资源。
数据源的好处是当您需要查找不是由 Terraform 创建或在不同状态文件中的资源的某些生成值时。
我想在目录中创建一个文件 (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"
}
然后如何将其转储到本地文件?
我的用例是我想创建 credentials.json
以启用 jenkins
的定期 backups 到 google 云存储桶。
您最好的选择是为您的服务帐户创建输出:
output "google_service_account_key" {
value = "${base64decode(data.google_service_account_key.my-account.private_key)}"
}
使用 terraform output
命令,您可以专门查询密钥,结合 jq(或另一个 json 解析器)找到正确的输出:
terraform output -json google_service_account_key | jq '.value[0]' > local_file.json
您可以使用 local_file
resource 将数据写入 Terraform 运行 中的磁盘。
因此您可以执行以下操作:
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)}"
}
请注意,您永远不需要数据源来查看您在同一个 Terraform 命令中创建的资源的输出。在这种情况下,您可以放弃 google_service_account_key
数据源,因为您拥有可用的资源。
数据源的好处是当您需要查找不是由 Terraform 创建或在不同状态文件中的资源的某些生成值时。