如何部署特定的 tf 文件 (Terraform)
How to deploy a specific tf file (Terraform)
我的 terraform 根目录中有 3 个 .tf 文件:
- vpc.tf
- subnets.tf
- instances.tf
- 与 运行ning terraform init
之后的 .terraform 目录一起
我只想部署 vpc.tf 运行ning 这样的东西:
terraform apply vpc.tf #here, vpc.tf is a terraform file
但它不起作用(我收到 Go 错误:"zip: not a valid zip file")。
如果我只是 运行
terraform apply
它将尝试在所有 3 个地形文件(vpc.tf、subnets.tf 和 instances.tf)中应用所有配置,这不是我想要的。
似乎让这个工作的方法是,有一个完全不同的文件夹,并且 运行 类似
terraform apply vpc/ #here, vpc/ is a folder that containers vpc.tf file
有效。这种方法的问题是,如果我在 vpc/ 文件夹中有 2 个或更多 terraform 文件,我会再次回到第一个问题。
解决方案似乎是在特定文件夹中拥有特定资源,但这似乎并不干净,因为我可以预见如果基础设施增长,我最终会得到几个包含一些 terraform 文件的文件夹。
所以问题是:
有没有办法 "terraform apply" 一个特定的地形文件,而忽略文件夹中的所有其他文件?我是否遗漏了一些关于地形的基本知识?
另一个选项,它不能解决您的确切需求,但可行的是使用 -target
参数定位资源,例如:
terraform plan -target digitalocean_loadbalancer.public -out run.plan
https://www.terraform.io/docs/commands/plan.html#resource-targeting
虽然您可以使用 中提到的 -target
将特定资源定位到 运行 每次这意味着当您有发生了一些奇怪的事情,需要忽略将应用于该区域其他资源的更改。
这个直接在Terraform documentation for -target
中提到:
This targeting capability is provided for exceptional circumstances,
such as recovering from mistakes or working around Terraform
limitations. It is not recommended to use -target for routine
operations, since this can lead to undetected configuration drift and
confusion about how the true state of resources relates to
configuration.
相反,您应该考虑您愿意将哪些内容作为一个集合来更改,并将 .tf
应该作为一个单元更改的 Terraform 文件放在同一目录中,并为它们使用相同的状态文件。
如果您不想同时更改两件事(例如,设置 VPC 并设置位于该 VPC 中的应用程序或设置应用程序的测试和生产版本),那么这些应该在不同的目录中并使用不同的状态文件。
这提供了一个很好的事物分离,最小化爆炸半径,但仍然更容易同时应用相关的事物块。
在你的具体情况下,我会质疑为什么你不想同时应用 VPC 和子网,因为这通常只被视为 [=29= 所需的基本网络配置的一部分] 中。一起管理这些通常很有意义,并且允许您执行更改 VPC 的名称以及重命名同一 apply
.
中的子网等操作
我的 terraform 根目录中有 3 个 .tf 文件:
- vpc.tf
- subnets.tf
- instances.tf
- 与 运行ning terraform init 之后的 .terraform 目录一起
我只想部署 vpc.tf 运行ning 这样的东西:
terraform apply vpc.tf #here, vpc.tf is a terraform file
但它不起作用(我收到 Go 错误:"zip: not a valid zip file")。 如果我只是 运行
terraform apply
它将尝试在所有 3 个地形文件(vpc.tf、subnets.tf 和 instances.tf)中应用所有配置,这不是我想要的。 似乎让这个工作的方法是,有一个完全不同的文件夹,并且 运行 类似
terraform apply vpc/ #here, vpc/ is a folder that containers vpc.tf file
有效。这种方法的问题是,如果我在 vpc/ 文件夹中有 2 个或更多 terraform 文件,我会再次回到第一个问题。 解决方案似乎是在特定文件夹中拥有特定资源,但这似乎并不干净,因为我可以预见如果基础设施增长,我最终会得到几个包含一些 terraform 文件的文件夹。 所以问题是:
有没有办法 "terraform apply" 一个特定的地形文件,而忽略文件夹中的所有其他文件?我是否遗漏了一些关于地形的基本知识?
另一个选项,它不能解决您的确切需求,但可行的是使用 -target
参数定位资源,例如:
terraform plan -target digitalocean_loadbalancer.public -out run.plan
https://www.terraform.io/docs/commands/plan.html#resource-targeting
虽然您可以使用 -target
将特定资源定位到 运行 每次这意味着当您有发生了一些奇怪的事情,需要忽略将应用于该区域其他资源的更改。
这个直接在Terraform documentation for -target
中提到:
This targeting capability is provided for exceptional circumstances, such as recovering from mistakes or working around Terraform limitations. It is not recommended to use -target for routine operations, since this can lead to undetected configuration drift and confusion about how the true state of resources relates to configuration.
相反,您应该考虑您愿意将哪些内容作为一个集合来更改,并将 .tf
应该作为一个单元更改的 Terraform 文件放在同一目录中,并为它们使用相同的状态文件。
如果您不想同时更改两件事(例如,设置 VPC 并设置位于该 VPC 中的应用程序或设置应用程序的测试和生产版本),那么这些应该在不同的目录中并使用不同的状态文件。
这提供了一个很好的事物分离,最小化爆炸半径,但仍然更容易同时应用相关的事物块。
在你的具体情况下,我会质疑为什么你不想同时应用 VPC 和子网,因为这通常只被视为 [=29= 所需的基本网络配置的一部分] 中。一起管理这些通常很有意义,并且允许您执行更改 VPC 的名称以及重命名同一 apply
.