Terraform的output是指什么?
在Terraform中有一个名为output的东西。
然而,由于我只在Terraform中构建了简单的配置,因此以前没用过output,所以我不太明白什么时候应该使用output。
因此,本次我调查了有关Terraform的输出,并做了总结。
关于输出
阅读Terraform文档时,列举了以下三个用例。
-
- A child module can use outputs to expose a subset of its resource attributes to a parent module.
-
- A root module can use outputs to print certain values in the CLI output after running terraform apply.
- When using remote state, root module outputs can be accessed by other configurations via a terraform_remote_state data source.
1. 执行terraform apply后,在CLI上打印出来的内容。
我认为首先浮现在脑海中的是这个。
当使用根模块进行输出时,输出的是我们在输出中声明的值。
学习的样本进行部分引用时,
output "vpc_id" {
description = "ID of project VPC"
value = aws_vpc.vpc.id
}
如果提前声明的话,
$ terraform apply
...(略)
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
vpc_id = "vpc-004c2d1ba7394b3d6"
您可以输出在应用之后可以得到的值。
然而,我之前只是以为只是这样而已?但通过使用terraform output命令,我发现可以扩大自动化等使用范围。
terraform 输出
您可以通过指定上述示例中的输出来输出以下内容。
$ terraform output -json
{
"vpc_id": {
"sensitive": false,
"type": "string",
"value": "vpc-004c2d1ba7394b3d6"
}
}
因此,由于可以获取独立的值,所以在应用后可以使用这些值来自动化操作时,这似乎是一个不错的选择。
$ terraform output vpc_id
vpc-004c2d1ba7394b3d6
2. 可以将子模块的属性公开给父模块。
模块不仅可以将组件整理为逻辑组件,还可以实现封装。
通过这种方式,由一个模块创建的资源的输出值不能在除了根模块以外的其他模块中直接引用。
因此,如果希望在其他模块中引用子模块资源的输出值,则可以在子模块中定义输出,并且在根模块调用另一个模块时将其作为变量传递。
如果想在另一个模块中使用名为network的模块的vpc_id,可以在想要使用它的另一个模块中定义如下的变量。
variable "vpc_id" {}
然后,在输出vpc_id的模块中,就像之前一样,在路由模块中将输出给另一个模块的值作为变量传递。
module "another_module" {
source = "./modules/another"
vpc_id = module.network.vpc_id
}
您可以在另一个模块的资源中按以下方式使用。
resource "..." "..." {
vpc_id = var.vpc_id
}
通过使用terraform_remote_state,可以从其他配置访问到它。
有关terraform_remote_state数据源的文档,请点击这里。
使用terraform_remote_state可以从另一个Terraform项目中读取根模块输出的值。
如果在一个Terraform项目中将state的后端配置为S3,并且在根模块中输出了某些值的话,那么1。
terraform {
backend "s3" {
bucket = "mybucket"
key = "network/terraform.tfstate"
region = "us-east-1"
}
}
给定一个允许来自想要调用的不同项目访问目标S3的权限,并通过设置以下数据源来实现:
data "terraform_remote_state" "network" {
backend = "s3"
config = {
bucket = "mybucket"
key = "network/terraform.tfstate"
region = "us-east-1"
}
}
在项目A中,似乎可以通过项目B的资源来引用进行输出的输出。
resource "..." "..." {
vpc_id = data.terraform_remote_state.network.vpc_id
}
总结
Terraform输出的用途主要有以下三个方面。
-
- 执行terraform apply后,在CLI上打印子模块的属性,将其公开给父模块。
使用terraform_remote_state来从其他配置中访问。
当我处理越来越多由Terraform管理的资源,并且试图进行适当的组件分割和状态分割时,这些知识似乎变得必要,我能够获得这些知识真是太好了。
如果有任何错误或其他用例,请您指出,我会非常高兴。
以下是中国的本土参考选项:
– 参考一下
– 参照
– 参考一下
– 请参照
– 供参考
-
- Output Values – Configuration Language | Terraform by HashiCorp
-
- Output Data from Terraform | Terraform – HashiCorp Learn
- Backend Type: s3 | Terraform by HashiCorp