首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Terraform中重用变量*定义?

如何在Terraform中重用变量*定义?
EN

Stack Overflow用户
提问于 2019-11-08 19:47:44
回答 2查看 2.8K关注 0票数 8

如果我创建这样一个可变的定义:

代码语言:javascript
代码运行次数:0
运行
复制
variable "aws_ecs_config" {
  type = object({
    cpu               = number
    memory            = number
    ecs_image_address = string
  })
  logs = {
    type = object({
      group         = string
      region        = string
      stream_prefix = string
    })
  }
}

如何在没有复制粘贴的情况下在多个地方重用该定义?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-08 22:14:38

不可能在Terraform中重用变量声明。如果不同模块中的变量具有相同的类型,则必须在每个模块中重复该类型。

Terraform有一个结构式系统而不是标称式系统,所以类型本身不命名,而是由它们的形式匹配/约束。当在模块之间传递值时,我们可以使用类型约束在一系列相关模块之间创建约定,但是没有在一个地方定义类型(或声明变量)并在其他地方重用它的机制。

Terraform的类型约束机制认为至少在类型约束中具有属性的任何对象都是有效的,因此不必每次都定义详尽的对象类型。

例如,如果使用以下类型定义变量:

代码语言:javascript
代码运行次数:0
运行
复制
object({
  name = string
})

对于该类型约束,以下对象值是可以接受的,因为它具有正确类型的name属性,而不管它定义的其他属性如何:

代码语言:javascript
代码运行次数:0
运行
复制
{
  name  = "foo"
  other = "bar"
}

因此,最好将每个模块中的变量声明限制为特定模块实际需要的属性子集,这减少了模块之间的耦合:它们只需要兼容到它们的属性名称重叠的程度,而不需要直接绑定到另一个模块。

票数 5
EN

Stack Overflow用户

发布于 2022-09-14 00:02:41

解决办法

如果没有明确的Terraform支持,这是可能的。(有一些关于类型的讨论。称重 (如果你认为它会方便的话)

Terraform允许在多个文件上声明变量,如果模块位于Linux文件系统上,重用就大大简化了。(窗户的人.好吧,它是可能,只是不是漂亮,可能无法很好地处理版本控制。)

多么?

  • 将变量定义移动到名为variable.aws_ecs_config.tf的文件中
  • 把它放在一个有名的地方。比如说,一个名为variables的目录,它位于modules旁边。
  • 每当模块中需要变量时,创建一个指向变量文件的符号链接:ln -s <path/to/variables>/variable.aws_ecs_config.tf
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58772935

复制
相关文章

相似问题

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