从 Terraform 状态文件中获取特定值

Jea*_*eri 12 terraform

我已经使用 Terraform 部署了我的基础设施,并且我注意到我terraform.tfstate想要提取 terraform 的状态 () 文件中的一些有趣信息。例如

$ terraform state show 'packet_device.worker'
id                = 6015bg2b-b8c4-4925-aad2-f0671d5d3b13
billing_cycle     = hourly
created           = 2015-12-17T00:06:56Z
facility          = ewr1
...
Run Code Online (Sandbox Code Playgroud)

我想以某种方式将其转变为

$ terraform state show 'packet_device.worker.id'
6015bg2b-b8c4-4925-aad2-f0671d5d3b13
Run Code Online (Sandbox Code Playgroud)

但在最后添加id似乎不起作用。有什么建议我可以实现这种行为吗?

Aki*_*kif 12

您可以利用terraform show -jsonjq从 Terraform 状态文件中获取特定值。

terraform show -json <state_file> | jq '.values.root_module.resources[] | select(.address=="<terraform_resource_name>") | .values.<property_name>'
Run Code Online (Sandbox Code Playgroud)

您有一个名为 的状态文件terraform.tfstate和一个 Terraform 资源,并且packet_device.worker您想要获取id. 那么就会是这样的:

terraform show -json terraform.tfstate | jq '.values.root_module.resources[] | select(.address=="packet_device.worker") | .values.id'
Run Code Online (Sandbox Code Playgroud)

terraform.tfstate也可以省略,因为它是状态文件的默认名称。


Saj*_*nnu 10

Terraform state show 命令用于检索给定资源的所有属性,您将无法从中获取单个属性,因为参数是资源地址并且用于专门引用资源。记录在https://www.terraform.io/docs/internals/resource-addressing.html

您可以做的是将资源属性存储在输出值中并使用命令

terraform 输出 {输出值提取器}

请参阅: https: //www.terraform.io/docs/configuration/outputs.html