【发布时间】:2022-01-23 19:48:33
【问题描述】:
我创建了一个简单的 terraform 基础架构,它将在 aws 上创建一些资源。我将每个环境变量放在一个单独的 tfvars 中。但是,我确实有共享资源,例如可以跨环境使用的安全组。
如何构建代码,以便在不破坏共享资源的情况下创建/破坏环境? 我可以创建单独的工作区,但由于所有资源都在同一个 repo 中定义,如果我破坏一个环境,我将破坏进程中的共享资源。
我的目录结构的简化版如下:
/
/main.tf
/vars/dev.tfvars
/vars/qa.tfvars
/vars/prod.tfvars
此外,在使用模块时,我如何指定在 terraform destroy 期间仅删除其中的一部分
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = "my-vpc"
cidr = "10.0.0.0/16"
azs = ["eu-west-1a", "eu-west-1b", "eu-west-1c"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
enable_nat_gateway = true
enable_vpn_gateway = true
tags = {
Terraform = "true"
Environment = "dev"
}
}
例如,如果我删除开发环境,我只想删除子网而不是 vpc,因为我在所有环境之间共享一个 vpc。
【问题讨论】:
-
你已经根据我对使用共享资源的回答改变了你的问题,所以我的回答已经过时了
-
理想情况下,您可以按工作空间拆分环境,并将共享资源分离到它们自己的模块中。但是,由于共享资源和环境资源在您的环境和配置中是如此紧密耦合,那么您可能会遇到困难。另请注意,不使用
terraform destroy而是使用terraform plan/apply和正常的配置更新将解决您关于选择性资源删除的问题。 -
换句话说:您要么需要重新构建基础架构以将共享资源和环境资源解耦,要么重新构建配置以将共享资源与同一模块中的环境资源解耦.
标签: terraform