2017-11-04 132 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功能开发。如果你将有许多开发人员处理你的功能,这变得更加重要。

祝你好运!