CI/CD 中的 ARM 模板 – 部署时是否应检查云基础架构和资源

62次阅读
没有评论

问题描述

一家公司采用基础架构即代码的部署模型,使用 ARM 模板进行部署。他们想知道在每次应用程序部署时,是否应尝试重新部署 ARM 模板?如果是,应该使用哪种部署模式(增量/替换),并解释原因。

解决方案

请注意以下操作注意版本差异及修改前做好备份。
在进行 CI/CD 中的 ARM 模板部署时,是否需要重新部署 ARM 模板取决于具体情况,而部署模式的选择取决于你的环境和需求。下面我将分两种情况进行讨论。

情况一:部署状态(State)和无状态(Stateless)的应用

如果你的应用是无状态的,并且能够在每次部署后完全重建,那么使用替换模式可能是一个不错的选择。替换模式会在每次部署时删除现有的资源,并重新创建新的资源,这有助于确保部署的一致性。

步骤

  1. 使用替换模式部署 ARM 模板。你可以在 ARM 模板的资源部分设置 “type” 属性,确保在每次部署时都创建新的资源。示例如下:
{
  "resources": [
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2019-08-01",
      "name": "myapp",
      "location": "East US",
      "properties": {
        "siteConfig": {
          "appSettings": [
            {
              "name": "Setting1",
              "value": "Value1"
            }
            // 其他设置
          ]
        }
      }
    }
    // 其他资源
  ]
}
  1. 为了避免资源冲突,你可以使用不同的资源组、命名约定或其他策略来区分每次部署的资源。这有助于确保新的资源不会与之前的资源发生冲突。

情况二:需要保留资源状态的应用

如果你的应用具有状态(例如持久化数据)或由于某些原因需要保留资源状态,那么增量部署模式可能更适合。增量部署模式会尝试保留现有资源的状态,仅在必要时对资源进行更新。这对于避免数据丢失和资源重新创建带来了一些保障。

步骤

  1. 使用增量模式部署 ARM 模板。这会尝试在现有资源的基础上进行更新。示例如下:
{
  "resources": [
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2019-08-01",
      "name": "myapp",
      "location": "East US",
      "properties": {
        "siteConfig": {
          "appSettings": [
            {
              "name": "Setting1",
              "value": "NewValue"
            }
            // 其他设置
          ]
        }
      }
    }
    // 其他资源
  ]
}
  1. 确保在更新资源时,不会影响应用的状态数据。这可能涉及到数据库迁移、备份和恢复策略等。

总结

选择部署模式(替换或增量)取决于你的应用需求和部署策略。对于无状态的应用,替换模式可能更简单和一致。对于有状态的应用,增量模式可以尝试保留状态并避免数据丢失。

请注意,在做出部署模式的选择时,始终要进行充分的测试和验证,以确保部署的正确性和稳定性。

参考链接:
Azure Resource Manager 模板文档

选择合适的部署模式,可以更好地满足你的应用和业务需求。

正文完