如何在 Visual Studio 代码中创建和部署函数应用程序?
Posted
技术标签:
【中文标题】如何在 Visual Studio 代码中创建和部署函数应用程序?【英文标题】:How to create and deploy function app in visual studio code? 【发布时间】:2019-06-05 03:39:33 【问题描述】:要求 创建一个 Azure 函数,监控所有传入 IoT 中心的消息,并在对消息进行一些修改后将其发送给 Cosmos 数据库
架构
问题:无法创建将传入消息读取到 IoT 中心并发送到 Cosmos DB 的 Azure 函数
遵循的步骤
我已按照以下步骤使用Visual Studio Code
创建和部署Azure Function App
转到Azure Extension Panel
选择C#
语言
它创建了以下文件
.vscode .gitignore FunctionApps.csproj host.json localsettings.json现在我点击了Visual Studio Code
中的“创建函数”按钮并选择了CosmosDBTrigger
并映射了已在Azure 门户中创建的CosmoDB
。在c#类下面生成
namespace Company.Function
public static class CosmosDBTriggerCSharp
[FunctionName("CosmosDBTriggerCSharp")]
public static void Run([CosmosDBTrigger(
databaseName: "databaseName",
collectionName: "collectionName",
ConnectionStringSetting = "dev-test-cosmo-db_DOCUMENTDB",
LeaseCollectionName = "leases")]IReadOnlyList<Document> input, ILogger log)
if (input != null && input.Count > 0)
log.LogInformation("Documents modified " + input.Count);
log.LogInformation("First document Id " + input[0].Id);
现在,我通过键入“部署到函数应用程序”并运行 Azure Functions: 部署到函数应用程序命令执行 (Ctrl+Shift+P) 来部署函数强>。
我在 Visual Studio Code Terminal
中看到 Success
消息
3:09:06 PM liveConnectMessageEnhancefunapp: Creating zip package...
3:09:07 PM liveConnectMessageEnhancefunapp: Starting deployment...
3:09:18 PM liveConnectMessageEnhancefunapp: Updating submodules.
3:09:19 PM liveConnectMessageEnhancefunapp: Preparing deployment for commit id 'f58cf57151'.
3:09:21 PM liveConnectMessageEnhancefunapp: Skipping build. Project type: Run-From-Zip
3:09:21 PM liveConnectMessageEnhancefunapp: Skipping post build. Project type: Run-From-Zip
3:09:24 PM messageEnhancefunapp: Syncing 0 function triggers with payload size 2 bytes successful.
3:09:25 PM messageEnhancefunapp: Updating D:\home\data\SitePackages\packagename.txt with deployment 20190110093910.zip
3:09:25 PM messageEnhancefunapp: Deployment successful.
Deployment to "messageEnhancefunapp" completed.
警告
C:\Users\deeku.nuget\packages\microsoft.net.sdk.functions\1.0.24\build\netstandard1.0\Microsoft.NET.Sdk.Functions.Build.targets(41,5):警告:函数 [CosmosDBTriggerCSharp]:local.settings.json 中 AzureWebJobsStorage 的缺失值。这对于除 HTTP 之外的所有触发器都是必需的。 [C:\FunctionApps\FunctionApps.csproj] C:\Users\deeku.nuget\packages\microsoft.net.sdk.functions\1.0.24\build\netstandard1.0\Microsoft.NET.Sdk.Functions.Build.targets(41,5):警告:[C :\FunctionApps\FunctionApps.csproj]
但是当我导航到Azure Portal
时,我看到以下消息
您的应用当前处于只读模式,因为您正在从包文件运行。从包运行时,文件系统是只读的,不能对文件进行更改。要进行任何更改,请更新 zip 文件中的内容和 WEBSITE_RUN_FROM_PACKAGE 应用设置。
【问题讨论】:
第一个警告是提醒您AzureWebJobsStorage
在本地调试中是必需的。第二条消息是告诉您不能修改门户网站上的预编译项目。如果您专注于在 Azure 站点上运行,这些都是无害的,您看到了什么错误,例如cosmosdb 触发器无法按预期工作? Unable to create a Azure function which reads the incoming messages to IoT Hub and sends to Cosmos DB
,要实现这一点,您需要创建一个 IoT 中心(事件中心)触发器而不是 cosmosdb。
我有 IoT Hub 并且正在接收消息,但我需要在将消息存储到 CosmosDB 之前更新消息。所以我打算在 IotHub 和 CosmosDb 之间使用 Azure 函数。我不想直接在门户中编写 azure 函数,因为我想在 TFS 中跟踪此函数的更改。所以我正在使用Visual Studio代码来编写函数
啊,看来我蹩脚的英语让你很困惑。 Those are both harmless if you focus on the running on Azure site
并不是说在门户中编写代码。警告和消息并不代表 Azure 上的预编译项目有问题。这就是为什么我问你是否看到任何明确的错误。要在部署前验证代码是否有效,请在 local.settings.json 中添加 AzureWebJobsStorage
并调试。而对于触发器类型,CosmosDB 触发器只有在我们向某个 CosmosDB 发送数据时才起作用,也许您需要重新考虑模式?
我选择了错误的模板“CosmosDBTrigger”。我应该搜索“IoT Hub 触发器”,但正如@Tamás Huj 所述,它不可用。
IoT 中心触发器实际上是一个事件中心触发器。由于您可以使用 Visual Studio,因此为方便起见,只需按照解决方案进行操作即可。
【参考方案1】:
在您的示例中,您正在创建一个 CosmosDBTrigger,如果您想捕获 cosmos DB 中的更改,可以使用它。但是,根据您的描述,您希望捕获 IoT Hub 中的更改。
我没有在 Visual Studio Code 中找到 IoT Hub 触发器,但如果您使用的是完整版 Visual Studio,您可以在此处找到 IoT Hub 触发器:
您只需要在此屏幕上设置连接,在此方法中您将收到来自 IoT Hub 的消息,您可以根据需要对其进行修改,并将其保存到 Cosmos DB。
这是一篇关于同一主题的类似博客文章: https://medium.com/@avirup171/azure-iot-hub-azure-function-azure-cosmos-db-walkthrough-cc30d12d1055
【讨论】:
我看过这篇博文,它确实在做需要做的事情,但我正在寻找的小改动是从 Visual Studio 代码中推送function code
,以便我可以在 TFS 中跟踪它并自动化我的构建管道.让我试试 asnwer 中提到的“IoT Hub Trigger”,并随时通知您。顺便问一下,您使用的是哪个版本的 Visual Studio?我使用的是 2017 年。
我有相同的版本,现在是 2017 年。而且我认为,即使您是从 VS 部署,您也可以重用博客中的大部分代码。从门户部署和从 VS 部署应该没有太大区别。
我有一些问题。将该功能部署到门户后,它不起作用。如何进行故障排除以及在哪里可以看到连接字符串?
对于故障排除,您可以根据需要编写尽可能多的日志,并从门户或 Visual Studio 中检查它们,在服务器资源管理器中您可以找到您的函数,然后右键单击并附加调试器。跨度>
是的,已解决。连接字符串不会自动部署到门户。我不得不在 azure 功能的“应用程序设置”中手动添加键。以上是关于如何在 Visual Studio 代码中创建和部署函数应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何在visual studio2008中创建,编译和运行C++程序,
如何在 Erlang Mnesia 中创建和使用(或模拟)多列索引
Visual Studio Code 中的 Flutter SDK 路径问题
找不到合适的 Visual Studio 工具链。请运行“颤振医生”以获取更多详细信息