azure - 使用 terraform 和 arm 模板通过工作流部署逻辑应用程序的最佳方法?
问题描述
我计划使用 terraform 脚本来配置逻辑应用程序。但是逻辑应用程序的工作流程,我是通过 arm 模板进行部署的。
这是推荐的方法吗?
谁能建议我如何使用业务流程部署逻辑应用程序?
解决方案
就 Terraform 而言,逻辑应用程序有点违反直觉。它是一项 Azure 服务,旨在通过易于使用的用户界面抽象出自定义编码。在使用多个环境(例如测试、登台、生产)时,在用户界面中设计某些东西通常效果不佳。这与 Terraform 的主要目的之一严重冲突:跨多个环境匹配基础设施。
当然,你可以求助于 ARM 模板的魔力,但人类并没有发明 JSON 可读性。Azure 从来没有计划为 ARM 模板支持YAML。那么如何从这里着手呢?我在下面列出了我们的要求、解决方案和一个 terraform 示例。
要求
- 基础设施由 Terraform 部署。
- 基础设施部署在 4 个匹配的环境中(即 dev、tst、acc、prd)。
- 为逻辑应用配置参数应该是一件容易的事。
- 在 GUI 中构建逻辑应用程序。
解决方案
- 使用 .创建一个“空”逻辑应用资源
azurerm_logic_app_workflow
。此资源将部署在所有环境中。它是空的,因此您会在 Azure 门户中找到没有任何内容的逻辑应用程序。这意味着在您的开发环境中,您可以使用 GUI 来设计逻辑应用程序。 - 创建一个
azurerm_resource_group_template_deployment
仅根据条件部署的资源。当您提供 arm 模板路径时,此条件为真,而在开发环境中不会出现这种情况。 - 确保这
azurerm_resource_group_template_deployment
取决于azurerm_logic_app_workflow
和设置deployment_mode = "Incremental"
。此外,您可以通过设置向逻辑应用提供参数parameters_content = jsonencode(var.parameters_map)
。
例子
可以在Github上找到一个工作的 terraform 示例。
注意:另一个高级 Azure 服务是数据工厂,它在使用 Terraform 进行自动部署时面临同样的问题。
推荐阅读
- javascript - 动态弹出下拉表单 Google Apps 脚本
- redis - 在 Redis 缓存中填充平面数据的最佳方法
- python - 从值创建列并用另一列的数据填充它们(get_dummies、标签/一个热编码)?
- c++ - 如何始终将元素放置在 std::map 的末尾?
- reactjs - 使用 onChange 处理程序更新状态的 REACT 表单取消选择
- java - 在具有默认字符集 windows-1252 的 JVM 上显示 UTF-8 字符
- c++ - VS 代码错误“ISO C++ 禁止指针和整数之间的比较 [-fpermissive]”
- javascript - JqueryUI Sortable - 仅在子列表中移动项目的功能(第 3 个位置)
- python-3.x - 在模型渲染管理添加页面中工作的问题
- python - 我可以用几个不同的列复制一行吗?Python