【发布时间】:2020-08-20 03:09:02
【问题描述】:
用 terraform + azure devops 流程的组合绞尽脑汁,想办法解决这个问题的最佳策略是什么,
我有 3 个阶段,构建和部署一些 terraform 代码
-
第 1 阶段构建: 单个服务,例如sql server, database, app service terraform plan 神器文件夹路径:
terraform\phase1\main.tf .... etc -
Stage2 部署: 来自 stage1
terraform apply的工件 -
Stage3 构建和部署管道:通过 tfstate 后端使用
data "azurerm_app_service" "this"从部署的 azure 应用服务中获取 outbound ip addresses,并将这些添加到 sql server firewall allowed ip's 文件夹路径:terraform\phase2\main.tf .... etc.
当我查看仅定义数据输出和 fw 规则的资源创建的阶段 2 文件夹时,我的问题出现在 Stage3,尽管我们正在查看相同的后端状态文件,但 terraform 计划看不到任何创建的资源stage2 在文件夹中,因此计划销毁它。
在 Phase2 文件夹中,我的代码看起来像这样
data "azurerm_app_service" "tf_dr_awa_core-app" {
name = "dr-core-app"
resource_group_name = "dr-app"
}
resource "azurerm_sql_firewall_rule" "tf_dr_sql_server_firewall" {
count = length(split(",", data.azurerm_app_service.tf_dr_awa_core-app.possible_outbound_ip_addresses))
.....
}
有没有人遇到过类似的情况,您必须首先构建基础架构的核心部分,一旦他们在状态文件中有元数据,然后获取该数据并在核心部分之间构建管道,在本例中是 sql server 和应用服务?
【问题讨论】:
-
你检查是否已经通过SQL服务器中的阶段创建了fw规则?
-
Ammm,当 terraform 开始在 stage3 上进行构建时,它实际上说它将在 stage2 应用并仅添加 fw 规则时销毁,但我只希望它添加 fw 规则,并将其他所有内容从第一阶段和第二阶段
-
我很困惑,为什么第 2 阶段会摧毁它们?是舞台常见的动作吗?或者你如何设置它们?可以分享一下 YAML 文件吗?
-
下面是 Terraform 的文件夹布局 ` └───tf-dr ├───phase1 │ │ main.tf │ │ provider.tf │ │ variables.tf │ └───phase2 │ main.tf │ provider.tf │ variables.tf ` Pipeline Process - Stage1 构建 Phase1 - Stage2 等待 Stage1 中的应用完成并构建针对 a - 资源的 Phase2 和与 Stage1 相同的状态文件只是为了提取应用服务的 IP - Stage3 从 Stage2 抓取构建并应用它
-
在问题中编辑 YAML 消息,而不是在评论中。对社区来说更清楚。
标签: azure-devops terraform terraform-provider-azure