脚本之间的共享资源



对不起菜鸟问题...我正在尝试找出一种在我的 tf 脚本之间共享资源的方法,但我找不到任何东西,所以可能我正在寻找错误的关键字......

假设我有 3 个脚本:

base/base.tf
one/one.tf
two/two.tf

Base 创建 AWS VPC 和网络负载均衡器 一和二是两个ECS远门服务。他们创建任务定义并将 MapPin 添加到网络负载均衡器。

我的目标是有一些东西来跟踪负载均衡器中的映射端口,并从一和二读取它并进行更新。

类似的东西 基本组 last_port 至 14000 一个读取 last_port,增加 1 并更新值 两次读取last_port,增加 1 并更新值

有可能吗?

谢谢

在 Terraform 中,此问题的一般解决方案是数据源,它是从其他地方检索数据而不是自己创建和管理对象的特殊资源。

为了使用数据源,您希望共享的数据必须在某处发布。为了Terraform 配置之间共享,您需要一个既可以写入又可以由 Terraform 读取的数据存储位置。

由于您提到了 ECS Fargate,我将假设您使用的是 AWS,在这种情况下,合理的选择是将数据存储在 AWS SSM 参数存储中,然后让其他配置读取它。

创建数据的配置将使用aws_ssm_parameter资源类型来创建新参数:

resource "aws_ssm_parameter" "foo" {
name  = "port_number"
type  = "String"
value = aws_lb_listener.example.port
}

然后,将使用此数据的配置可以使用相应的数据源读取它:

data "aws_ssm_parameter" "foo" {
name = "port_number"
}

但是,您的问题涉及一个配置读取值、递增值并将新值写回同一位置的可能性。这在 Terraform 中是不可能的,因为 Terraform 是一个声明性系统,它使用静态所需状态的描述。只有一个配置可以管理每个对象,尽管许多配置可以读取一个对象。

Terraform不需要动态分配端口号,而是需要以下两种解决方案之一:

  • 使用其他系统持久地管理端口分配,以便在为特定调用方分配端口号后,它将始终获得相同的端口号。我不知道有任何现有的系统是为此而构建的,所以在这种情况下这可能不是一个站得住脚的选择,但如果这样的系统确实存在,那么我们会在 Terraform 中使用它使用代表特定端口分配的资源类型对其进行建模,当不再需要端口时,Terraform 最终可以将其与所有其他基础设施一起销毁。
  • 确定
  • 一种系统的方法为每个系统分配一致的端口号,以便每个配置都可以知道(通过硬编码或一些确定性计算)它应该使用哪个端口号。

最新更新