【发布时间】:2019-06-25 20:17:19
【问题描述】:
我想使用不同的模块来拆分资源创建,但我一直无法弄清楚如何。
对于此示例,我想创建一个 Web 应用程序(我正在使用 azurerm 提供程序)。我通过将以下内容添加到模块中来做到这一点:
resource "azurerm_app_service" "test" {
name = "${var.app_service_name}"
location = "${var.location}"
resource_group_name = "${var.resource_group_name}"
app_service_plan_id = "${var.app_service_plan_id}"
app_settings {
SOME_SETTING = "${var.app_setting}"
}
}
它可以工作,但我想有一个单独的模块来应用应用程序设置,所以:
- 模块 1 创建网络应用程序
- 模块 2 应用应用设置
- 潜在模块 3 将其他内容应用于 Web 应用程序
这可能吗?我尝试将其拆分(有两个模块定义 Web 应用程序,但其中只有一个包含应用程序设置),但我收到一条错误消息,指出 Web 应用程序已经存在,所以它似乎不明白我试图操作相同的资源。
详细说明如何使用: 我将为最终用户提供一个 UI,他/她可以在该 UI 上选择所需的一堆资源并勾选该人的项目所需的一系列选项,以及填写基础设施所需的参数。
完成并提交后,参数将应用于 Terraform 模板。为每个选项排列设置一个模板是不可行的,因此必须根据所选选项包含不同的模块。
例如:如果用户勾选 Web 应用程序、Cosmos DB 和应用程序洞察,Terraform 模板将包含这些模块(使用计数技巧创建条件)。在此示例中,我需要将检测密钥从应用程序洞察传递到 Web 应用程序的应用程序设置,这就是我的问题所在。
如果用户没有选择应用程序洞察力,我不想要 Web 应用程序的设置,这就是我需要逐步构建 Terraform 资源的原因。此外,根据用户选择的数据库类型,Web 应用的设置中会添加不同的设置。
所以我的想法是创建一个模块来应用某些应用程序设置。我不知道这是否可能(或存在更好的方法),因此我的问题。
【问题讨论】:
-
为什么要这样做?您能否提供一个更完整/具体的示例来说明您在此处尝试实现的目标?
-
当然。我正在创建一些不同消费者将使用的通用模板。他们的要求可能略有不同。也许一个人根本不需要应用程序设置,而另一个人确实需要它,或者一个人可能需要 SQL 服务器,因此需要一组额外的设置。另一个例子是 WAF,其中一个消费者可能对某些规则排除感兴趣,因此需要为此目的配置一个配置块,而另一个消费者可能不需要。
-
这个过程将是自动化的,所以我不会为每个消费者手动更改模板。这就是为什么根据消费者选择的功能逐步建立资源会很好的原因。
-
如果您可以编辑您的问题以显示不同的人希望如何使用该模块,这将有所帮助。
-
@ydaetskcoR 我已将用例添加到问题的底部。我希望这足以理解为什么我需要能够做到这一点。
标签: terraform terraform-provider-azure