问题描述
一家公司采用基础架构即代码的部署模型,使用 ARM 模板进行部署。他们想知道在每次应用程序部署时,是否应尝试重新部署 ARM 模板?如果是,应该使用哪种部署模式(增量/替换),并解释原因。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
在进行 CI/CD 中的 ARM 模板部署时,是否需要重新部署 ARM 模板取决于具体情况,而部署模式的选择取决于你的环境和需求。下面我将分两种情况进行讨论。
情况一:部署状态(State)和无状态(Stateless)的应用
如果你的应用是无状态的,并且能够在每次部署后完全重建,那么使用替换模式可能是一个不错的选择。替换模式会在每次部署时删除现有的资源,并重新创建新的资源,这有助于确保部署的一致性。
步骤
- 使用替换模式部署 ARM 模板。你可以在 ARM 模板的资源部分设置 “type” 属性,确保在每次部署时都创建新的资源。示例如下:
{
"resources": [
{
"type": "Microsoft.Web/sites",
"apiVersion": "2019-08-01",
"name": "myapp",
"location": "East US",
"properties": {
"siteConfig": {
"appSettings": [
{
"name": "Setting1",
"value": "Value1"
}
// 其他设置
]
}
}
}
// 其他资源
]
}
- 为了避免资源冲突,你可以使用不同的资源组、命名约定或其他策略来区分每次部署的资源。这有助于确保新的资源不会与之前的资源发生冲突。
情况二:需要保留资源状态的应用
如果你的应用具有状态(例如持久化数据)或由于某些原因需要保留资源状态,那么增量部署模式可能更适合。增量部署模式会尝试保留现有资源的状态,仅在必要时对资源进行更新。这对于避免数据丢失和资源重新创建带来了一些保障。
步骤
- 使用增量模式部署 ARM 模板。这会尝试在现有资源的基础上进行更新。示例如下:
{
"resources": [
{
"type": "Microsoft.Web/sites",
"apiVersion": "2019-08-01",
"name": "myapp",
"location": "East US",
"properties": {
"siteConfig": {
"appSettings": [
{
"name": "Setting1",
"value": "NewValue"
}
// 其他设置
]
}
}
}
// 其他资源
]
}
- 确保在更新资源时,不会影响应用的状态数据。这可能涉及到数据库迁移、备份和恢复策略等。
总结
选择部署模式(替换或增量)取决于你的应用需求和部署策略。对于无状态的应用,替换模式可能更简单和一致。对于有状态的应用,增量模式可以尝试保留状态并避免数据丢失。
请注意,在做出部署模式的选择时,始终要进行充分的测试和验证,以确保部署的正确性和稳定性。
参考链接:
– Azure Resource Manager 模板文档
选择合适的部署模式,可以更好地满足你的应用和业务需求。
正文完