对不起,这个菜鸟问题...我试图找出一种在tf脚本之间共享资源的方法,但是我什么也找不到,所以可能我在寻找错误的关键字...
假设我有3个脚本:
base/base.tf
one/one.tf
two/two.tf
base创建aws vpc和网络负载平衡器 一和二是两个ecs fargate服务。他们创建任务定义,并将mappind添加到网络负载平衡器。
我的目标是要在负载均衡器中跟踪映射的端口,并读取它并从一个和两个更新。
类似 基础将last_port设置为14000 一个读取last_port,加1并更新值 两次读取last_port,加1并更新值
有可能吗?
谢谢
答案 0 :(得分:0)
在Terraform中解决此问题的一般方法是Data Sources,这是一种特殊资源,可从其他地方检索数据,而不是自己创建和管理对象。
为了使用数据源,您希望共享的数据必须发布在某个地方。为了在Terraem配置之间共享,您需要一个可以同时被Terraform写入和读取的数据存储位置。
自从您提到ECS Fargate以来,我假设您正在使用AWS,在这种情况下,合理的选择是将数据存储在AWS SSM参数存储中,然后让其他配置读出。
创建数据的配置将使用the aws_ssm_parameter
resource type创建一个新参数:
resource "aws_ssm_parameter" "foo" {
name = "port_number"
type = "String"
value = aws_lb_listener.example.port
}
随后将使用the corresponding data source来读取将使用此数据的配置:
data "aws_ssm_parameter" "foo" {
name = "port_number"
}
但是,您的问题是关于一种配置读取值,递增值并将新值写回到同一位置的可能性。对于Terraform,这是不可能的,因为Terraform是一个声明式系统,可用于描述静态期望状态。尽管每个对象都可以读取。
Terraform将需要以下两种解决方案之一,而不是动态分配端口号: