我正在尝试开发一个 Azure 函数来与 IoTHub 交互。我正在 python 版本 3.7.8 中使用 Visual Studio Code 1.47.2 进行本地开发。该函数是第 2 版,使用 Azure Functions Core Tools 2.7.2628。对于开发,我使用的是 Azure Storage Emulator 5.10.0.0
我所做的是使用 EventHub 触发器在 python 中创建一个默认项目。然后修改以下文件:
function.json
{
"scriptFile": "__init__.py",
"bindings": [
{
"type": "eventHubTrigger",
"name": "event",
"direction": "in",
"eventHubName": "IoTHubName", #Got from the Event Hub-compatible name in Build-in endpoints
"connection": "IoTHubConnectionString", #Got from Event Hub-compatible endpoint
"cardinality": "many",
"consumerGroup": "$Default",
"dataType": "binary"
}
]
}
local.setting.json
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python",
"eventHubConnectionString": "here the Event Hub-compatible endpoint"
}
}
因为我想首先查看该功能是否有效,所以我对该功能使用了以下代码:
_init_.py
from typing import List
import logging
import azure.functions as func
def main(event: func.EventHubEvent):
logging.info('Python EventHub trigger processed an event: %s',
event.get_body().decode('utf-8'))
我用 F5 开始调试,终端显示如下:
> Executing task: .venv\Scripts\python -m pip install -r requirements.txt <
Requirement already satisfied: azure-functions in c:\...\pythontries\pyfuncappeventhub1\.venv\lib\site-packages (from -r requirements.txt (line 1)) (1.3.0)
Terminal will be reused by tasks, press any key to close it.
> Executing task: .venv\Scripts\activate ; func host start <
Found Python version 3.7.8 (py).
%%%%%%
%%%%%%
@ %%%%%% @
@@ %%%%%% @@
@@@ %%%%%%%%%%% @@@
@@ %%%%%%%%%% @@
@@ %%%% @@
@@ %%% @@
@@ %% @@
%%
%
Azure Functions Core Tools (2.7.2628 Commit hash: 42e149f5313330f1f0a5e721a7e59d9ef7d27e6f)
Function Runtime Version: 2.0.13907.0
AZURE_FUNCTIONS_ENVIRONMENT: Development
[22.07.2020 10:07:12] Building host: startup suppressed: 'False', configuration suppressed: 'False', startup operation id: 'somecode'
[22.07.2020 10:07:12] Reading host configuration file 'C:...\host.json'
[22.07.2020 10:07:12] Host configuration file read:
[22.07.2020 10:07:12] {
[22.07.2020 10:07:12] "version": "2.0",
[22.07.2020 10:07:12] "logging": {
[22.07.2020 10:07:12] "applicationInsights": {
[22.07.2020 10:07:12] "samplingSettings": {
[22.07.2020 10:07:12] "isEnabled": true
[22.07.2020 10:07:12] }
[22.07.2020 10:07:12] }
[22.07.2020 10:07:12] },
[22.07.2020 10:07:12] "extensionBundle": {
[22.07.2020 10:07:12] "id": "Microsoft.Azure.Functions.ExtensionBundle",
[22.07.2020 10:07:12] "version": "[1.*, 2.0.0)"
[22.07.2020 10:07:12] }
[22.07.2020 10:07:12] }
[22.07.2020 10:07:12] FUNCTIONS_WORKER_RUNTIME set to python. Skipping WorkerConfig for language:java
[22.07.2020 10:07:12] FUNCTIONS_WORKER_RUNTIME set to python. Skipping WorkerConfig for language:node
[22.07.2020 10:07:12] FUNCTIONS_WORKER_RUNTIME set to python. Skipping WorkerConfig for language:powershell
[22.07.2020 10:07:12] Loading functions metadata
[22.07.2020 10:07:12] Reading functions metadata
[22.07.2020 10:07:12] 1 functions found
[22.07.2020 10:07:12] 1 functions loaded
[22.07.2020 10:07:12] Looking for extension bundle Microsoft.Azure.Functions.ExtensionBundle at C:\...\AppData\Local\Temp\Functions\ExtensionBundles\Microsoft.Azure.Functions.ExtensionBundle
[22.07.2020 10:07:12] Found a matching extension bundle at C:\...\AppData\Local\Temp\Functions\ExtensionBundles\Microsoft.Azure.Functions.ExtensionBundle\1.3.0
[22.07.2020 10:07:12] Fetching information on versions of extension bundle Microsoft.Azure.Functions.ExtensionBundle available on https://functionscdn.azureedge.net/public/ExtensionBundles/Microsoft.Azure.Functions.ExtensionBundle/index.json
[22.07.2020 10:07:13] Skipping bundle download since it already exists at path C:\...\AppData\Local\Temp\Functions\ExtensionBundles\Microsoft.Azure.Functions.ExtensionBundle\1.3.0
[22.07.2020 10:07:13] Loading extension bundle from C:\...\AppData\Local\Temp\Functions\ExtensionBundles\Microsoft.Azure.Functions.ExtensionBundle\1.3.0
[22.07.2020 10:07:13] Loading startup extension 'EventHubs'
[22.07.2020 10:07:13] Loaded extension 'EventHubs' (3.0.6.0)
[22.07.2020 10:07:13] FUNCTIONS_WORKER_RUNTIME set to python. Skipping WorkerConfig for language:java
[22.07.2020 10:07:13] FUNCTIONS_WORKER_RUNTIME set to python. Skipping WorkerConfig for language:node
[22.07.2020 10:07:13] FUNCTIONS_WORKER_RUNTIME set to python. Skipping WorkerConfig for language:powershell
[22.07.2020 10:07:13] Initializing Warmup Extension.
[22.07.2020 10:07:13] Initializing Host. OperationId: 'somecode'.
[22.07.2020 10:07:13] Host initialization: ConsecutiveErrors=0, StartupCount=1, OperationId=somecode
[22.07.2020 10:07:13] LoggerFilterOptions
[22.07.2020 10:07:13] {
[22.07.2020 10:07:13] "MinLevel": "None",
[22.07.2020 10:07:13] "Rules": [
[22.07.2020 10:07:13] {
[22.07.2020 10:07:13] "ProviderName": null,
[22.07.2020 10:07:13] "CategoryName": null,
[22.07.2020 10:07:13] "LogLevel": null,
[22.07.2020 10:07:13] "Filter": "<AddFilter>b__0"
[22.07.2020 10:07:13] },
[22.07.2020 10:07:13] {
[22.07.2020 10:07:13] "ProviderName": "Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics.SystemLoggerProvider",
[22.07.2020 10:07:13] "CategoryName": null,
[22.07.2020 10:07:13] "LogLevel": "None",
[22.07.2020 10:07:13] "Filter": null
[22.07.2020 10:07:13] },
[22.07.2020 10:07:13] {
[22.07.2020 10:07:13] "ProviderName": "Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics.SystemLoggerProvider",
[22.07.2020 10:07:13] "CategoryName": null,
[22.07.2020 10:07:13] "LogLevel": null,
[22.07.2020 10:07:13] "Filter": "<AddFilter>b__0"
[22.07.2020 10:07:13] }
[22.07.2020 10:07:13] ]
[22.07.2020 10:07:13] }
[22.07.2020 10:07:13] FunctionResultAggregatorOptions
[22.07.2020 10:07:13] {
[22.07.2020 10:07:13] "BatchSize": 1000,
[22.07.2020 10:07:13] "FlushTimeout": "00:00:30",
[22.07.2020 10:07:13] "IsEnabled": true
[22.07.2020 10:07:13] }
[22.07.2020 10:07:13] SingletonOptions
[22.07.2020 10:07:13] {
[22.07.2020 10:07:13] "LockPeriod": "00:00:15",
[22.07.2020 10:07:13] "ListenerLockPeriod": "00:00:15",
[22.07.2020 10:07:13] "LockAcquisitionTimeout": "10675199.02:48:05.4775807",
[22.07.2020 10:07:13] "LockAcquisitionPollingInterval": "00:00:05",
[22.07.2020 10:07:13] "ListenerLockRecoveryPollingInterval": "00:01:00"
[22.07.2020 10:07:13] }
[22.07.2020 10:07:13] HttpOptions
[22.07.2020 10:07:13] {
[22.07.2020 10:07:13] "DynamicThrottlesEnabled": false,
[22.07.2020 10:07:13] "MaxConcurrentRequests": -1,
[22.07.2020 10:07:13] "MaxOutstandingRequests": -1,
[22.07.2020 10:07:13] "RoutePrefix": "api"
[22.07.2020 10:07:13] }
[22.07.2020 10:07:13] EventHubOptions
[22.07.2020 10:07:13] {
[22.07.2020 10:07:13] "BatchCheckpointFrequency": 1,
[22.07.2020 10:07:13] "EventProcessorOptions": {
[22.07.2020 10:07:13] "EnableReceiverRuntimeMetric": false,
[22.07.2020 10:07:13] "InvokeProcessorAfterReceiveTimeout": false,
[22.07.2020 10:07:13] "MaxBatchSize": 10,
[22.07.2020 10:07:13] "PrefetchCount": 300,
[22.07.2020 10:07:13] "ReceiveTimeout": "00:01:00"
[22.07.2020 10:07:13] },
[22.07.2020 10:07:13] "PartitionManagerOptions": {
[22.07.2020 10:07:13] "LeaseDuration": "00:00:30",
[22.07.2020 10:07:13] "RenewInterval": "00:00:10"
[22.07.2020 10:07:13] }
[22.07.2020 10:07:13] }
[22.07.2020 10:07:13] Starting JobHost
[22.07.2020 10:07:13] Starting Host (HostId=somecode, InstanceId=somecode, Version=2.0.13907.0, ProcessId=somecode, AppDomainId=1, InDebugMode=False, InDiagnosticMode=False, FunctionsExtensionVersion=(null))
[22.07.2020 10:07:13] Loading functions metadata
[22.07.2020 10:07:13] Loading proxies metadata
[22.07.2020 10:07:13] Initializing Azure Function proxies
[22.07.2020 10:07:14] 0 proxies loaded
[22.07.2020 10:07:14] 1 functions loaded
[22.07.2020 10:07:14] Starting worker process:py c:/U.../.vscode/extensions/ms-python.python-2020.7.94776/pythonFiles/lib/python/debugpy --listen 127.0.0.1:9091 --wait-for-client "C:\ProgramData\chocolatey\lib\azure-functions-core-tools\tools\workers\python\3.7/WINDOWS/X64/worker.py" --host 127.0.0.1 --port 51794 --workerId somecode --requestId somecode --grpcMaxMessageLength 2147483647
[22.07.2020 10:07:14] py process with Id=19880 started
[22.07.2020 10:07:14] Generating 1 job function(s)
[22.07.2020 10:07:14] Found the following functions:
[22.07.2020 10:07:14] Host.Functions.pyEventHubTrigger1
[22.07.2020 10:07:14]
[22.07.2020 10:07:14] Initializing function HTTP routes
[22.07.2020 10:07:14] No HTTP routes mapped
[22.07.2020 10:07:14]
[22.07.2020 10:07:14] Host initialized (768ms)
[22.07.2020 10:07:16] Host started (2577ms)
[22.07.2020 10:07:16] Job host started
Hosting environment: Development
Content root path: C:\...\pythonTries\pyFuncAppEventHub1
Now listening on: http://0.0.0.0:7071
Application started. Press Ctrl+C to shut down.
[22.07.2020 10:07:21] Host lock lease acquired by instance ID '000000000000000000000000F61C9814'.
[22.07.2020 10:07:22] INFO: Starting Azure Functions Python Worker.
[22.07.2020 10:07:22] INFO: Worker ID: somecode, Request ID: somecode, Host Address: someaddress
[22.07.2020 10:07:22] INFO: Successfully opened gRPC channel to someaddress
[22.07.2020 10:07:22] INFO: Detach console logging. Switch to gRPC logging
[22.07.2020 10:07:22] Detach console logging. Switch to gRPC logging
[22.07.2020 10:07:22] INFO: Received WorkerInitRequest, request ID somecode
[22.07.2020 10:07:22] Received WorkerInitRequest, request ID somecode
[22.07.2020 10:07:22] INFO: Received FunctionLoadRequest, request ID: somecode, function ID: somecode
[22.07.2020 10:07:22] Received FunctionLoadRequest, request ID: somecode, function ID: somecode
[22.07.2020 10:09:32] INFO: Successfully processed FunctionLoadRequest, request ID: somecode, function ID: somecode
[22.07.2020 10:09:35] Successfully processed FunctionLoadRequest, request ID: 6somecode, function ID: somecode
我启动将遥测消息发送到集线器的 ac# 模拟器,我可以看到在 Azure 门户中收到的消息,但这些函数没有显示任何日志。我已经尝试了 4 天来为此类问题找到任何示例或解决方案,但没有成功。我希望你能帮助我。