如何在 Azure Arm 模板中使用粘性暂存槽
Posted
技术标签:
【中文标题】如何在 Azure Arm 模板中使用粘性暂存槽【英文标题】:How to use sticky staging slots in Azure Arm Templates 【发布时间】:2018-01-03 17:58:15 【问题描述】:如何在不覆盖现有应用设置的情况下使用 ARM 模板将粘性设置部署到 Azure Web 应用中的生产应用槽?
我正在使用 Azure ARM 模板来部署我的环境和代码版本。该环境同时具有暂存槽和生产槽。部署的一部分是部署 AppSettings。我们部署到 Staging、测试,然后交换到 prod。
直到现在,当我需要部署一个粘性 AppSetting 到 prod 时,这个系统一直运行良好。通常,部署是增量的,但是当我尝试为生产创建粘性设置时,所有其他设置都会被清除。
我正在使用 slotconfignames 来指定 prod 插槽中的粘性变量
"apiVersion": "2015-08-01",
"name": "slotconfignames",
"type": "config",
"dependsOn": [
"[resourceId('Microsoft.Web/Sites', variables('webSiteName'))]"
],
"properties":
"appSettingNames": [ "WEBSITE_LOCAL_CACHE_OPTION", "WEBSITE_LOCAL_CACHE_SIZEINMB" ]
我尝试为 prod appsettings 和 stage appsettings 创建单独的资源 - 当我这样做时,prod slot appsettings 将被完全覆盖。这是意料之中的:
"apiVersion": "2015-08-01",
"type": "config",
"name": "appsettings",
"dependsOn": [
"[resourceId('Microsoft.Web/sites/', variables('webSiteName'))]"
],
"properties":
"WEBSITE_LOCAL_CACHE_OPTION": "Always",
"WEBSITE_LOCAL_CACHE_SIZEINMB": "2000"
,
如果我将这些设置作为阶段槽设置的一部分进行,那么它们不会在 prod 上设置,而是在阶段槽上设置为粘性。
"name": "appsettings",
"type": "config",
"apiVersion": "2015-08-01",
"dependsOn": [
"[variables('stagingSlotName')]",
//"[concat('Microsoft.Web/sites/', variables('webSiteName'))]",
"MSDeploy",
"[concat('Microsoft.Resources/deployments/', 'AppStorage')]"
],
"tags":
"displayName": "uisettings",
"environment": "[parameters('environmentName')]",
"serviceGroup": "[variables('serviceGroupName')]"
,
"properties":
...othersettingshere...
"WEBSITE_LOCAL_CACHE_OPTION": "Always",
"WEBSITE_LOCAL_CACHE_SIZEINMB": "2000"
,
【问题讨论】:
【参考方案1】:当我需要将粘性 AppSetting 部署到 prod 时。通常,部署是增量的,但是当我尝试为生产创建粘性设置时,所有其他设置都会被清除。
根据我的测试,如您所说,您的 ARM 模板中未定义的 App 设置将被清除。当您specify sticky slot settings 时,请确保在您的 ARM 模板中包含所有 App 设置。
"name": "appsettings",
"type": "config",
"apiVersion": "2015-08-01",
"dependsOn": [
"[concat('Microsoft.Web/sites/', variables('webSiteName'))]"
],
"tags":
"displayName": "uisettings"
,
"properties":
"AppSettingKey1": "myvalue",
//your other appsettings
"WEBSITE_LOCAL_CACHE_OPTION": "Always",
"WEBSITE_LOCAL_CACHE_SIZEINMB": "2000"
,
"apiVersion": "2015-08-01",
"name": "slotconfignames",
"type": "config",
"dependsOn": [
"[concat('Microsoft.Web/sites/', variables('webSiteName'))]"
],
"properties":
"appSettingNames": [ "WEBSITE_LOCAL_CACHE_OPTION", "WEBSITE_LOCAL_CACHE_SIZEINMB" ]
【讨论】:
这个“你的ARM模板中没有定义的App设置将被清除”,你的意思是你需要在两个槽(源槽和目标槽)中定义所有的appsettings,对吧?你不能只添加粘性设置,然后重新部署 ARM,那么只有粘性设置会被重写,但所有其他设置都会被擦除,对吗? 但是在这里拥有所有 AppSettings,这是否意味着您现在在运行此 ARM 时将更新的 appsettings 部署到生产槽,而不是在您希望它的交换期间? 在生产槽上部署设置不会导致重启吗?以上是关于如何在 Azure Arm 模板中使用粘性暂存槽的主要内容,如果未能解决你的问题,请参考以下文章
访问 Azure 应用服务暂存槽 URL 时出现 HTTP 错误 401
在 Azure Devops 中部署管道后暂存槽的 Web 作业未停止
如何使用 arm 模板更新 azure appsettings
如何将 Azure 管道变量传递给 AzureResourceManagerTemplateDeployment@3 任务使用的 ARM 模板?