问题
I'm trying to get into that Visual Studio Resource Group template. So far it's looking good, and I have added some appsettings for a web app, but my question is, how can I make them deployment slot specific? Is there something in the json for the template or the parameter file?
回答1:
Please have a try to add the json code snipped in the ARM template. I have tested it. It works successfully.
"resources": [
{
"apiVersion": "2015-08-01",
"name": "appsettings",
"type": "config",
"dependsOn": [
"[resourceId('Microsoft.Web/Sites/Slots', variables('webSiteName'), 'Staging')]"
],
"properties": {
"AppSettingKey1": "Some staging value",
"AppSettingKey2": "My second staging setting",
"AppSettingKey3": "My third staging setting"
}
}
]
The following are my detail steps:
1. Create a new Azure Resource group project (More detail please refer to document)
2. The Demo just for the Azure Website Slot App setting configuration, so remove the other resource from the project.
3. Add the Slot configuration into the deployment file
4. Publish the Deployment
The full json code :
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"hostingPlanName": {
"type": "string",
"minLength": 1
},
"skuName": {
"type": "string",
"defaultValue": "S1",
"allowedValues": [
"F1",
"D1",
"B1",
"B2",
"B3",
"S1",
"S2",
"S3",
"P1",
"P2",
"P3",
"P4"
],
"metadata": {
"description": "Describes plan's pricing tier and instance size. Check details at https://azure.microsoft.com/en-us/pricing/details/app-service/"
}
},
"skuCapacity": {
"type": "int",
"defaultValue": 1,
"minValue": 1,
"metadata": {
"description": "Describes plan's instance count"
}
}
},
"variables": {
"webSiteName": "[concat('webSite', uniqueString(resourceGroup().id))]"
},
"resources": [
{
"apiVersion": "2015-08-01",
"name": "[parameters('hostingPlanName')]",
"type": "Microsoft.Web/serverfarms",
"location": "[resourceGroup().location]",
"tags": {
"displayName": "HostingPlan"
},
"sku": {
"name": "[parameters('skuName')]",
"capacity": "[parameters('skuCapacity')]"
},
"properties": {
"name": "[parameters('hostingPlanName')]"
}
},
{
"apiVersion": "2015-08-01",
"dependsOn": [
"[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
],
"location": "[resourceGroup().location]",
"name": "[variables('webSiteName')]",
"properties": {
"name": "[variables('webSiteName')]",
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
},
"resources": [
{
"apiVersion": "2015-08-01",
"name": "Staging",
"type": "slots",
"location": "[resourceGroup().location]",
"dependsOn": [
"[resourceId('Microsoft.Web/Sites', variables('webSiteName'))]"
],
"properties": {
},
"resources": [
{
"apiVersion": "2015-08-01",
"name": "appsettings",
"type": "config",
"dependsOn": [
"[resourceId('Microsoft.Web/Sites/Slots', variables('webSiteName'), 'Staging')]"
],
"properties": {
"AppSettingKey1": "Some staging value",
"AppSettingKey2": "My second staging setting",
"AppSettingKey3": "My third staging setting"
}
}
]
}
],
"tags": {
"[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",
"displayName": "Website"
},
"type": "Microsoft.Web/sites"
}
]
}
We also can get the slot type from the azure resource ,if you have any slots on the Azure portal. I also find a similar thread in the SO.
回答2:
The accepted answer is correct, but leaves out an important piece of information. Under its current implementation, when swapping slots the AppSettings configuration for the slot will be swapped along with the deployment. If you are concerned about slot-specific configuration then this probably is not desirable for you.
To make the configuration "Sticky" to a slot, use the following resource in your ARM template. Note that the slotconfignames section has been added to the ARM template snippet from Tom's answer above.
"resources": [
{
"apiVersion": "2015-08-01",
"name": "appsettings",
"type": "config",
"dependsOn": [
"[resourceId('Microsoft.Web/Sites/Slots', variables('webSiteName'), 'Staging')]"
],
"properties": {
"AppSettingKey1": "Some staging value",
"AppSettingKey2": "My second staging setting",
"AppSettingKey3": "My third staging setting"
},
{
"apiVersion": "2015-08-01",
"name": "slotconfignames",
"type": "config",
"dependsOn": [
"[resourceId('Microsoft.Web/Sites', variables('webSiteName'))]"
],
"properties": {
"appSettingNames": [ "AppSettingKey1", "AppSettingKey2" ]
}
}
]
This will make AppSettingKey1 and AppSettingKey2 sticky to the Staging slot (They will not swap along with the deployment).
See "Azure Resource Manager Templates Tips and Tricks" from Anthony Chu for more details on sticky slot settings as well as other ARM template tips.
回答3:
"slotconfignames" should only be specified on production slot to tell which settings that are slot specific even if they don´t even exist on the slot. The actual value for the slot specific setting should still be specified on the slot settings.
"resources": [
{
"apiVersion":"[variables('siteApiVersion')]",
"name":"[variables('WebAppName')]",
"type":"Microsoft.Web/sites",
"kind":"api",
"location":"[variables('location')]",
"tags":{
"[concat('hidden-related:', resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName')))]":"empty"
},
"properties":{
"name":"[variables('WebAppName')]",
"serverFarmId":"[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
"siteConfig":{
"AlwaysOn":"[parameters('AppServiceAlwaysOn')]"
}
},
"resources":[
{
"apiVersion":"[variables('apiVersion')]",
"type":"config",
"name":"appsettings",
"dependsOn":[
"[variables('WebAppName')]"
],
"properties":{}
},
{
"apiVersion":"[variables('siteApiVersion')]",
"type": "config",
"name": "slotconfignames",
"dependsOn": [
"[concat('Microsoft.Web/sites/', variables('WebAppName'))]"
],
"properties": {
"appSettingNames": [ "WEBJOBS_DISABLE_SCHEDULE" ]
}
},
{
"apiVersion":"[variables('siteApiVersion')]",
"condition":"[parameters('stagingSlotEnabled')]",
"name":"[parameters('stagingSlotName')]",
"type":"slots",
"tags":{
"displayName":"[concat(variables('WebAppName'), ' ', parameters('stagingSlotName'))]"
},
"location":"[variables('location')]",
"dependsOn":[
"[resourceId('Microsoft.Web/Sites', variables('WebAppName'))]"
],
"properties":{},
"resources":[
{
"apiVersion":"[variables('apiVersion')]",
"type":"config",
"name":"appsettings",
"dependsOn":[
"[resourceId('Microsoft.Web/Sites/Slots', variables('WebAppName'), parameters('stagingSlotName'))]"
],
"properties":{
"WEBJOBS_DISABLE_SCHEDULE" : "1"
}
}
]
}
]
}
]
来源:https://stackoverflow.com/questions/40332945/deployment-slot-specific-appsettin-in-arm-template