use*_*406 1 vpc amazon-web-services terraform
我将在 AWS 上启动一个新的 Terraform 项目。VPC 已经创建,我想知道将它集成到我的代码中的最佳方式是什么。我是否必须再次创建它并且 Terraform 会检测到它并且不会覆盖它?或者我必须为此使用数据源吗?或者还有其他最好的方法,比如 Terraform Import ?
我还希望将来能够在其他区域或其他账户中部署整个基础设施。
谢谢。
在与现有对象集成时,您首先必须在两个选项之间做出决定:您可以将这些对象导入 Terraform 并使用 Terraform 继续管理它们,或者您可以让它们由任何现有系统管理并在 Terraform 中使用它们引用。
如果您希望使用 Terraform 管理这些现有对象,您必须首先为对象编写配置,就像 Terraform 将要自己创建它一样:
resource "aws_vpc" "example" {
# fill in here all the same settings that the existing object already has
cidr_block = "10.0.0.0/16"
}
# Can then use that vpc's id in other resources using:
# aws_vpc.example.id
Run Code Online (Sandbox Code Playgroud)
但是terraform apply
,您可以先运行terraform import
以指示 Terraform 使用 AWS 分配的 ID 将此资源块与现有 VPC 相关联,而不是立即运行:
terraform import aws_vpc.example vpc-abcd1234
Run Code Online (Sandbox Code Playgroud)
如果您随后运行,terraform plan
您应该会看到不需要更改,因为 Terraform 检测到配置与现有对象匹配。如果 Terraform确实提出了一些更改,您可以通过运行来接受它们,也可以terraform apply
继续更新配置,直到它与现有对象匹配为止。
完成此操作后,Terraform 将认为自己是 VPC 的所有者,因此将计划在未来运行时更新或销毁它(如果配置建议它应该这样做)。如果之前有任何其他系统在管理此 VPC,请务必阻止它这样做,否则此其他系统可能会与 Terraform 发生冲突。
如果您希望保留管理 VPC 的任何现有系统,您还可以使用数据源功能查找现有 VPC,而无需 Terraform 负责。
在这种情况下,你可以使用的aws_vpc
数据源,可以通过各种属性查找室性早搏。一个常见的选择是通过标签查找 VPC,假设您的环境有一个可预测的标签方案,允许您描述您正在寻找的单个 VPC:
data "aws_vpc" "example" {
tags = {
Name = "example-VPC-name"
}
}
# Can then use that vpc's id in other resources using:
# data.aws_vpc.example.id
Run Code Online (Sandbox Code Playgroud)
在某些情况下,用户会引入额外的间接方式来查找 VPC,而不是直接查询 AWS VPC API。这是一种更先进的配置和这里的选项是相当广泛的,但例如,如果你正在使用你SSM参数商店可以放置VPC成参数存储参数,并使用检索它的aws_ssm_parameter
数据源。
如果管理 VPC 的现有系统是 CloudFormation,您还可以使用aws_cloudformation_export
或aws_cloudformation_stack
从 CloudFormation API 检索信息。
归档时间: |
|
查看次数: |
1539 次 |
最近记录: |