2017-11-04 121 views
0

我有一個Azure資源組,其中包含調用Azure函數的Azure邏輯應用程序。如何在Azure ARM json模板中使Azure函數代碼可讀

我將此資源組導出爲ARM模板,以便我可以將資源重新導入到另一個Azure訂閱。這工作正常,但問題是,Azure功能代碼(100 +行C#文件)全部包含在JSON ARM模板文件的一行中。這使得很難從模板本身讀取或修改Azure功能。

有沒有簡單的方法來解決這個問題?理想情況下,我的Azure函數將在它自己的文件(run.csx)中,而Azure JSON ARM模板只會引用該外部文件。

這是我的ARM模板中的函數資源的JSON blob。包含關鍵run.csx的行是我關心的問題,我怎樣才能讓這段代碼更具可讀性並易於開發人員編輯?

{ 
    "apiVersion": "2015-08-01", 
    "name": "[concat(parameters('test_site_name'),'\/ProvisionUser')]", 
    "type": "Microsoft.Web\/sites\/functions", 
    "properties": { 
    "config": { 
     "bindings": [ 
     { 
      "authLevel": "function", 
      "name": "req", 
      "type": "httpTrigger", 
      "direction": "in" 
     }, 
     { 
      "name": "return", 
      "direction": "out", 
      "type": "http" 
     } 
     ] 
    }, 
    "files": { 
     "run.csx": "LOTS OF C# CODE HERE - LOTS OF C# CODE HERE FROM MY AZURE FUNCTION - LOTS OF C# CODE HERE FROM MY AZURE FUNCTION - LOTS OF C# CODE HERE FROM MY AZURE FUNCTION - LOTS OF C# CODE HERE FROM MY AZURE FUNCTION - LOTS OF C# CODE HERE FROM MY AZURE FUNCTION - LOTS OF C# CODE HERE FROM MY AZURE FUNCTION - ", 
     "project.json": "{\r\n \"frameworks\": {\r\n \"net46\": {\r\n  \"dependencies\": {\r\n  \"Microsoft.IdentityModel.Clients.ActiveDirectory\": \"3.13.8\",\r\n  \"Newtonsoft.Json\": \"10.0.2\",\r\n   \"Microsoft.Sdk.CoreAssemblies\" : \"8.2.0.2\"\r\n  }\r\n }\r\n }\r\n}" 
    } 
    } 
} 
+0

最好使用msdeploy提供程序通過某些雲託管zip部署功能文件,例如,像[this](https://github.com/davidebbo/AzureWebsitesSamples/blob/master/ARMTemplates/FunctionsWebDeploy.json) –

+0

此外,您可以通過源代碼控制引用進行部署,例如此示例(函數和邏輯應用程序)https:// github .com/Azure/azure-quickstart-templates/tree/master/101-logic-app-and-function-app – jeffhollan

+0

謝謝,這些看起來很有用,會研究這些選項。 –

回答

1

你有一些選擇:

  1. 快速解決你的問題:一些代碼格式化你的運行ARM的模板。如果您嘗試將模板複製粘貼到Visual Studio中的json文件中,然後使用CTRL-K和CTRL-D將其自動格式化,那麼您可能很幸運。我沒有嘗試過,但它可能工作。您也可以使用任何一種在線格式化工具或使用Visual Studio將代碼剪出並格式化。

  2. source control system部署您的功能。分開處理您的基礎架構和代碼。即從您的ARM模板創建您的功能PaaS服務,但隨後使用CI/CD過程來部署您的代碼和配置(功能)。

  3. 將代碼包裝到程序集中,將程序集部署到函數主機並在函數中引用它。這稱爲外部參考(documentation here),並將您的函數中的代碼量限制爲管道,將邏輯保存在單獨的程序集中。您仍然需要制定如何通過腳本或您的CI/CD進程部署程序集。

簡而言之,根據您對問題的評論,您需要從開發過程的角度來更加勤勉地支持您的Azure功能開發。如果你將有許多開發人員處理你的功能,這變得更加重要。

祝你好運!