Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Terraform中重用变量*定义?

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 14:14:38

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

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

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

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

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

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

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

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

票数 5
EN

Stack Overflow用户

发布于 2022-09-13 16: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

复制
相关文章
Terraform资源定义梳理
资源是Terraform体系中最重要的组成元素, 每个资源块用来定义一个或多个基础产品实例, 它或者定义一个VPC,或者定义一个CVM或者一条DNS记录.
乔碧萝殿下
2019/12/27
6.7K1
如何在mybatis xml文件中定义局部变量?
mybatis定义全局变量只需要配置一下即可,那如何在mybatis xml文件中定义局部变量呢?这就需要使用<bind>标签了。
索码理
2022/12/28
3.2K0
ArkTS-@Styles定义组件重用样式
@Styles可以定义在组件内或全局,在全局定义时需在方法名前面添加function关键字,组件内定义时则不需要添加function关键字。
酒楼
2023/06/23
4690
如何在C中定义多行宏定义?
请参阅下面的示例,其中我将交换两个变量的值。 do-while(0)结构很不错 #include <stdio.h> #define swap(x,y,T) do { \ T temp = (*x);\ (*x) = (*y); \ (*y) = temp; \ } while (0) int main(void) { int a = 5; int b = 9; printf("Value of a and b before swaping\n"
用户4645519
2020/09/08
2.6K0
如何在C中定义多行宏定义?
Python中如何定义变量?定义变量的规则是什么?
上一篇文章讲述了变量的概念和作用,下面讲解的是变量的第二个知识点 - 定义变量和定义变量名的规则,下一篇在讲解变量的使用。
python自学网
2022/02/24
3.3K0
Terraform 系列-Terraform 简介
最近在使用 Terraform 来置备 OCI 的 Always Free Tier, 发现它非常好用。总结学习下:Terraform 的基础知识。
东风微鸣
2023/09/15
4500
Terraform 系列-Terraform 简介
sql中declare声明变量_sql怎么定义变量
1、系统变量的特点: (1)、每个客户机成功连接服务器后,都会产生与之对应的会话。会话期间,服务实例会在服务器内存中生成与该会话对应的会话系统变量。这些会话系统变量的初始值都是全局系统变量值的复制,有了标记不同的会话,会话系统又新增了一些变量,这些变量是全局扁郎没有的。
全栈程序员站长
2022/09/24
2.4K0
WordPress可重用自定义css样式
因为别人的友情链接模板样式都是针对性的对于他们的主题使用的,自己搜了一下插件商店并没有现成的插件,只有自己写一个友情连接的页面样式,但是当前整站使用的是一个整体主题,不知道能不能修改,就慢慢从主题编辑器里面找。
Diuut
2022/11/22
6640
WordPress可重用自定义css样式
MySQL中变量的定义和变量的赋值使用
说明:现在市面上定义变量的教程和书籍基本都放在存储过程上说明,但是存储过程上变量只能作用于begin…end块中,而普通的变量定义和使用都说的比较少,针对此类问题只能在官方文档中才能找到讲解。
全栈程序员站长
2022/06/30
9.2K0
maven中properties标签定义变量
<properties>  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  <spring.version>3.2.9</spring.version>  <developer.organization><![CDATA[xy公司]]></developer.organization> </properties>
程序新视界
2022/11/30
5240
如何在Vue组件中定义方法
在上述示例中,使用 methods 选项来定义了两个方法:methodName 和 anotherMethod。你可以根据需要添加任意数量的方法。
王小婷
2023/09/13
5200
如何在python中定义有序字典
0x00 前言 最近遇到一个大坑,在测一个程序的时候。程序接受的数据是json,但是要求json是有序的(吐槽一样,要求有序的用json干屁啊!) 当我用python构造字典的时候,总会给我排序,用json.dumps转化为json后。导致程序解析失败。所以,在此研究了一下如何构造有序的json。 0x01 解决 网上查了一下,用到了python中有序字典OrderdDict,在collections库中。 在默认情况下: >>> d= {} >>> d["2"]=2 >>> d["1"]=1 >>> d[
WeaponX
2018/07/11
1.7K0
smarty 模板中定义变量的方法
{assign var="i" value=0} {foreach name=simple_tab from=$zhinan_cate key=key item=item} {if $i} <small>|</small> {/if} {if $item['count']} {math assign="i" equation="x + y" x=$i y=1} <span><a title="{$segment_parent}期{$it
零式的天空
2022/03/02
1.7K0
Terraform 入门
为了使Terraform能够对你的AWS账户进行直接操作,需要将环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY
yeedomliu
2021/12/10
2.7K0
Terraform 入门
Terraform 系列-Terraform Cloud 比 Terraform OSS 有哪些增强?
最近在使用 Terraform Cloud 来置备 OCI 的 Always Free Tier, 发现它非常好用,相比 Terraform OSS, 用起来省心多了。
东风微鸣
2023/09/15
2090
Terraform 系列-Terraform Cloud 比 Terraform OSS 有哪些增强?
Terraform 入门
简介 Terraform 的特点: Infrastructure as Code Execution Plans Resource Graph Change Automation Terraform 工具处在什么位置: [image] [image] 指引 核心工作流 Write - Author infrastructure as code. Plan - Preview changes before applying. Apply - Provision reproducible infrastruct
王磊-字节跳动
2020/02/01
3.6K0
Python中变量的定义使用和特点
变量的使用可以分为三个步骤来和大家讲解一下,一是定义变量、二是如何使用变量、三是总结变量的特点,下面我们就来用代码一个一个说明一下吧。
python自学网
2022/02/28
2.4K0
php中各种定义变量的方法小结
1.定义常量define("CONSTANT", "Hello world."); 常量只能包含标量数据(boolean,integer,float 和 string)。 调用常量时,只需要简单的用名称取得常量的值,而不能加“$”符号,如:echo CONSTANT; 注: 常量和(全局)变量在不同的名字空间中。这意味着例如 TRUE 和 $TRUE 是不同的。 2.普通变量$a = "hello"; 3.可变变量(使用两个美元符号($)) $$a = "world"; 两个变量都被定义了: $a 的内容是“hello”并且 $hello 的内容是“world”。 因此,可以表述为: echo "$a ${$a}";或者 echo "$a $hello";它们都会输出:hello world 要将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下 $$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要 $$a 作为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1]。 4.静态变量 在函数内部static $a = 0; 注意:声明中用表达式的结果对其赋值会导致解析错误如static $a =3+3;(error) 静态变量仅在局部函数域中存在(函数内部),函数执行完之后,变量值不会丢失,可用于递归调用 5.全局变量 在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用,在全局范围内访问变量可以用特殊的 PHP 自定义 $GLOBALS 数组: 如:$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; 在一个函数域内用 global 语句导入的一个真正的全局变量实际上是建立了一个到全局变量的引用 global $obj; 注:对于变量的 static 和 global 定义是以 应用 的方式实现的 6.给变量赋值:传地址赋值(简单引用): $bar = &amp;$foo; //加&符号到将要赋值的变量前 改动新的变量将影响到原始变量,这种赋值操作更加快速 注意:只有命名变量才可以传地址赋值 注意:如果 $bar = &amp;$a; $bar = &amp;$foo; 改变$bar的值只能改变变量foo的值,而不改变a的值(引用/【技术点,其实还需要更多地实践】/改变了) 7.PHP 超全局变量$GLOBALS : 包含一个引用指向每个当前脚本的全局范围内有效的变量。该数组的键标为全局变量的 名称。从 PHP 3 开始存在 $GLOBALS 数组。 $_SERVER : 变量由 Web 服务器设定或者直接与当前脚本的执行环境相关联。类似于旧数组 $HTTP_SERVER_VARS 数组(依然有效,但反对使用)。
用户2323866
2021/07/12
3.6K0
taro中定义以及使用全局变量
错误的姿势 // app.tsx文件中 class App extends Component { componentDidMount() { this.user = { name: '张三', id: 1 }; } } // index.tsx 文件中 const app = Taro.getApp(); export default class Index extends Component { componentWillMount() { console.log(ap
用户1437675
2019/06/11
5.7K0
点击加载更多

相似问题

重用terraform中父模块中声明和定义的变量

24

如何在Terraform中重用SSH隧道

119

Terraform -变量定义

10

Terraform变量定义

12

在terraform中重用Lambda环境变量中的“公共变量”

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文