terraform - 我有重复的代码 - 有没有办法扩展/重用 terraform 模块?
问题描述
我已经复制并粘贴了大块 terraform,这通常表明我缺少一些可以使事情变得整洁的语言功能(对于 tf 来说相对较新)。
例子:
module "my_module"
{
source = "../something"
some_var = "a value"
another_var = "another value"
wow_more_var = "wow"
a_module_specific_var = "1"
}
module "another_module"
{
source = "../something"
some_var = "a value"
another_var = "another value"
wow_more_var = "wow"
a_module_specific_var = "2"
}
如您所见 - 这些模块声明不同的唯一方式是a_module_specific_var
(最后)。我在这里缺少哪种语言功能可以让我抽象出通用部分?如果这是在我常用的 Node 领域,我会将其拉出到 JS 函数中,然后将1
or2
作为参数传递。
解决方案
您可以使用count
或for_each
与模块一起使用,在此处记录。我将创建一个包含这些模块特定变量的列表,然后使用for_each
,如下所示:
module "my_module"
{
for_each = toset( ["1", "2"] )
source = "../something"
some_var = "a value"
another_var = "another value"
wow_more_var = "wow"
a_module_specific_var = each.key
}
推荐阅读
- python - Sklearn 拟合线性回归
- react-native - 如何在 Android 上使用 React Native 实现组件高度的平滑动画
- alfresco - 如何将自定义按钮添加到 Alfresco 共享页面正文?
- xml - 使用 XSLT 从 Word 文档中提取文本
- python - 如何将此 Pandas DataFrame 转换为特定的 JSON 格式?
- html - iframe 没有控件工作,视频不播放
- dataframe - 我想创建一个新的数据框(可能使用 groupby 或 loc),其中一列中的所有唯一值都成为列名
- c++ - 在 g++ <7.4.0> 上 boost::archive::text_iarchive in_archive {is} boost <1.71> 崩溃
- azure - Azure ARM 角色分配不同的资源组
- c# - ASP.NET Core 3.1 Web 应用程序在 IIS Express 上运行时抛出错误 500.30,但在使用 dotnet watch run 时不会