Azure Function项目结构(C#与CSX)和最佳实践

时间:2018-07-18 13:08:33

标签: azure azure-functions

最近我得到了其他用C#脚本(.csx)编写的开发人员Azure函数代码,我以前是使用Visual Studio编写Azure函数的。

我喜欢C#脚本命令式绑定,它使代码更容易(无需管理连接)

我看到了C#脚本的一些问题

  1. 代码质量工具不起作用(StyleCop / Sonar)
  2. Can't write unit test against .csx file

如果您有其他意见,请分享。

所以我决定将所有功能(10)转换为具有声纳集成和UnitTest的.net项目。

问题 我的大多数功能都没有任何业务逻辑,它们从EventHub获取触发器并将数据转储到cosmos DB中,我无法决定在单个解决方案下创建10个项目还是1个项目?

我相信具有多个host.json文件的具有多个功能的单个项目,如果我要更改host.json值以缩放特定功能,那么也会影响其他功能。我说的对吗?

功能数量=项目数量是正确的解决方案吗?

它将如何影响成本?

2 个答案:

答案 0 :(得分:1)

您将总体想法转移到预编译的项目是有意义的。 Microsoft建议除最简单的即席功能外,对所有功能进行推荐。

应根据要单个功能应用程序还是多个应用程序来确定单个项目还是多个项目。 Function App是一个缩放单位。如果要使多个功能独立扩展,则应将它们放在单独的Apps和项目中。

答案 1 :(得分:0)

个人认为CSX文件适合进行实验或快速而肮脏的东西,但对于生产来说,您应该使用编译的c#。

调整host.json文件中的任何设置都会影响该功能应用程序中的所有功能。关于何时将您的功能分解为单独的应用程序,没有一个普遍正确的答案,但是您可以问一些问题以帮助针对您的情况进行回答:

  1. 特定功能的缩放特性是否与其他功能大不相同。 (例如,您的一个消息触发器是否与其他消息触发器获得了截然不同的消息量或处理逻辑-您是否需要更改host.json)
  2. 您的功能是在执行单独的业务流程,然后是其他功能(例如,一个正在接收设备遥测消息,而另一个正在处理审计遥测)
  3. 做#1和#2证明创建一个单独的功能应用程序的管理和开发开销是合理的(很多功能应用程序,尤其是像架构这样的微服务,在管理上可能是一个挑战)

在您的情况下,您对函数应用程序具有一定的灵活性,因为它们只是消息侦听器,如果您以后想将函数分解为单独的应用程序(例如,http端点),它们不会像http触发器那样受到太大的影响变化)。