首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何具体地管理地形项目之间的引用?

如何具体地管理地形项目之间的引用?
EN

Stack Overflow用户
提问于 2018-01-24 08:07:24
回答 1查看 133关注 0票数 0

我有2个Terraform项目可能由不同的团队管理。

一个属于平台团队,负责管理AWS的VPC区域(VPC/Subnet/Security )。

另一个属于开发团队的,他们管理项目的实例。

示例

平台团队项目资源

代码语言:javascript
复制
resource "aws_subnet" "my_subnet" {
    vpc_id = "${aws_vpc.my_vpc.id}"
    cidr_block = "${var.my_subnet_id}"

    tags {
    Name = "My Subnet"
    }
}

开发团队项目参考

代码语言:javascript
复制
resource "aws_db_subnet_group" "dev_subnet" {
    name = "Developer Subnet Group"
    subnet_ids = ["subnet-a32322d8", "subnet-a43564e9"] # I really want to reference ${aws_subnet.my_subnet.id} but this terraform project is not available to the developer
}

subnet_ids只是那个时间点的值。如果我想的话,我可以把这些移动到变量中,但是这似乎并不能真正解决问题,因为任何依赖的id都可以在任何时间点改变?

问题

那么,如何正确处理项目之间的引用呢?开发团队将需要来自各个VPC元素的is,那么最好的引用方法是什么呢?

我看到可用的选项是使用terraform import吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-24 10:20:40

这取决于您需要在团队之间共享的范围有多广。

在问题的示例中,您实际上不需要共享任何东西,而是可以让dev团队使用数据源来查找他们应该部署到的子网ids。

例如,您的平台团队将创建如下子网:

代码语言:javascript
复制
resource "aws_subnet" "private_a" {
  vpc_id     = "${aws_vpc.my_vpc.id}"
  cidr_block = "${cidrsubnet(aws_vpc.my_vpc.cidr_block, 2, 1)}"
  availability_zone = "eu-west-1a"

  tags {
    Name = "${var.vpc_name}-private-a"
    Tier = "private"
    AZ   = "a"
  }
}

然后,开发团队只需将其部署到私有子网中,以便在运行时使用 data source查找这些子网:

代码语言:javascript
复制
data "aws_subnet_ids" "private" {
  vpc_id = "${var.vpc_id}"
  tags {
    Tier = "private"
  }
}

resource "aws_db_subnet_group" "dev_subnet" {
  name       = "Developer Database Subnet Group"
  subnet_ids = ["${data.aws_subnet_ids.private.ids}"]
}

在这个实际的例子中,当您创建VPC时,我只需要提供数据库子网组,因为它并不是真正需要粒度控制的东西,而且最终每个人都应该将数据库放在您使用的所有AZs的私有子网中(这也应该是该地区所有可用的子网)。

至于您的最后一个问题,terraform import是将资源导入状态文件,以便Terraform之外创建的东西将来可以由Terraform管理。您将需要一个唯一的资源ID才能使其变得重要,因此不会解决您的问题,这意味着开发团队将控制子网资源的管理,这可能不是您想要的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48417550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档