2

ARM テンプレートで複数の Web アプリケーションをプロビジョニングしていますが、複数のデプロイ スロットで単一の構成を維持するには、多くの重複したコードが必要であることがわかりました。依存関係とプロパティの両方を複製し、別々に維持する必要があります。変数の使用を検討しましたが、構成の多くは他のリソースに依存しており、変数が評価される時点では評価できません。

理想的には、すべてのスロットが同じ 'Microsoft.Web/sites/config' オブジェクトを参照するようにしたいのですが、それを行う方法がわかりません。私の現在の展開スクリプトは次のようになります (これは大幅に簡略化されていますが、実際にははるかに多くのプロパティがあります)。

{
  "name": "[variables('siteName')]",
  "type": "Microsoft.Web/sites",
  "location": "[resourceGroup().location]",
  "apiVersion": "2015-08-01",
  "dependsOn": [
    "[concat('Microsoft.Web/serverfarms/', variables('serverfarm'))]",
    "[resourceid('Microsoft.EventHub/namespaces', variables('fullEventHubNameSpace'))]"
  ],
  "tags": {
    "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('siteName'))]": "Resource"
  },
  "properties": {
    "name": "[variables('siteName')]",
    "serverFarmId": "[resourceId('Microsoft.Web/serverfarms/', variables('serverfarm'))]",
    "siteConfig": {
      "AlwaysOn": true
    }
  },
  "resources": [
    {
      "name": "appsettings",
      "type": "config",
      "apiVersion": "2015-08-01",
      "dependsOn": [
        "[concat('Microsoft.Web/sites/', variables('siteName'))]",
        "[concat('Microsoft.Insights/components/', variables('appInsightsSiteName'))]",
        "[concat('Microsoft.Web/sites/', variables('otherSiteName'))]",
        "[concat('Microsoft.DocumentDb/databaseAccounts/',variables('databaseAccountName'))]",
        "[resourceid('Microsoft.EventHub/namespaces', variables('fullEventHubNameSpace'))]"
      ],
      "properties": {
        "APPINSIGHTS_INSTRUMENTATIONKEY": "[reference(resourceId('Microsoft.Insights/components', variables('appInsightsName'))).InstrumentationKey]",
        "KEYVAULT_PATH": "[parameters('keyVaultPath')]",
        "KEYVAULT_SECRET": "[parameters('keyVaultSecret')]",
        "OTHER_SITE": "[reference(concat('Microsoft.Web/sites/', variables('otherSiteName'))).hostnames[0]]",
        "DB_KEY": "[listKeys(resourceId(concat('Microsoft.DocumentDb/databaseAccounts'),variables('databaseAccountName')),'2015-04-08').primaryMasterKey]",
      }
    },
    {
      "apiVersion": "2015-08-01",
      "name": "Staging",
      "type": "slots",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[resourceId('Microsoft.Web/Sites', variables('siteName'))]"
      ],
      "properties": {
      },
      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[concat('Microsoft.Web/sites/', variables('siteName'))]",
            "[concat('Microsoft.Insights/components/', variables('appInsightsName'))]",
            "[concat('Microsoft.DocumentDb/databaseAccounts/',variables('databaseAccountName'))]",
            "[concat('Microsoft.Web/sites/', variables('otherSiteName'))]",
            "[resourceid('Microsoft.EventHub/namespaces', variables('fullEventHubNameSpace'))]",
            "Staging"
          ],
          "properties": {
             "APPINSIGHTS_INSTRUMENTATIONKEY": "[reference(resourceId('Microsoft.Insights/components', variables('appInsightsName'))).InstrumentationKey]",
             "KEYVAULT_PATH": "[parameters('keyVaultPath')]",
             "KEYVAULT_SECRET": "[parameters('keyVaultSecret')]",
             "OTHER_SITE": "[reference(concat('Microsoft.Web/sites/', variables('otherSiteName'))).hostnames[0]]",
             "DB_KEY": "[listKeys(resourceId(concat('Microsoft.DocumentDb/databaseAccounts'),variables('databaseAccountName')),'2015-04-08').primaryMasterKey]",
          }
        }
      ]
    }
  ]
},

このテンプレートをより保守しやすくする方法はありますか?

4

1 に答える 1