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



最近我得到了其他开发者用C#脚本(.csx(编写的Azure函数代码,我曾经使用visual studio编写Azure函数。

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

我发现C#脚本有一些问题

  1. 代码质量工具不起作用(StyleCop/Sonar(
  2. 无法针对.csx文件编写单元测试

如果您有不同意见,请分享。

因此,我决定将所有功能(10(转换为带有声纳集成和UnitTest的.net项目。

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

我相信一个有多个函数的项目只有一个host.json文件,如果我为了缩放特定函数而更改host.json值,它也会影响其他函数。Am‘I right?

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

它将如何影响成本?

个人意见是,CSX文件可以用于实验或快速而肮脏的东西,但对于生产,您应该使用编译的c#。

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

  1. 一个特定函数与其他函数的缩放特性是否显著不同。(例如,您的一个消息触发器的消息量或处理逻辑是否与其他触发器非常不同?是否需要更改host.json(
  2. 您的功能是否与其他功能(例如,一个接收设备遥测消息,另一个处理审计遥测(分开执行业务流程
  3. #1和#2是否证明创建一个单独的功能应用程序的管理和开发开销是合理的(很多功能应用程序,尤其是在类似微服务的架构中,管理起来可能是一个挑战(

在您的情况下,您的功能应用程序有一定的灵活性,因为它们只是消息侦听器,如果您发现以后要将功能分解为一个单独的应用程序(例如http端点更改(,它们不会像http触发器那样受影响。

转移到预编译项目的总体想法是有意义的。这是微软为除最简单的特殊功能外的所有功能推荐的。

单个项目与多个项目应根据您想要的是单个功能应用程序还是多个应用程序来决定。Function App是一个缩放单位。如果你想让多个功能独立扩展,它们应该在单独的应用程序和项目中。

最新更新