在Azure Python中使用环境变量进行路径绑定
function.json
{
"scriptFile": "__init__.py",
"disabled": false,
"bindings": [
{
"name": "blob",
"type": "blobTrigger",
"direction": "in",
"path": "{CONTAINERNAME}",
"connectionStringSetting": "BLOB_CONNECTION_STRING"
}
]
}
app/init.py
CONTAINERNAME =os.environ.get("CONTAINERNAME")
def main(blob: func.InputStream):
logging.info(f"Python blob trigger function processed blob \n"
f"Name:{blob.name}\n"
f"Blob Size: {blob.length} bytes")
我需要把动态的容器名称传递给 function.json,因为这个名称将来可能会改变。所以我想通过环境变量来传递这个名称。我尝试了几种不同的方法,比如:
- %CONTAINERNAME%
- ${CONTAINERNAME}
- {CONTAINERNAME}
- "pathStringSetting": "{CONTAINERNAME}",
但是我遇到了同样的错误:'app' 函数出错:无法配置类型为 'blobTrigger' 的绑定 'blob'。这可能意味着 function.json 的属性不正确。我搞不清楚该调用哪个构造函数。
1 个回答
0
我把动态的容器名称传递给了function.json,格式是%CONTAINERNAME%/{name},然后成功执行了blob触发的函数。
代码:
import os
import logging
import azure.functions as func
CONTAINERNAME = os.environ.get("CONTAINERNAME")
def main(blob: func.InputStream):
logging.info(f"Python blob trigger function processed blob \n"
f"Name:{blob.name}\n"
f"Blob Size: {blob.length} bytes")
function.json:
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "blob",
"type": "blobTrigger",
"direction": "in",
"path": "%CONTAINERNAME%/{name}",
"connection": "kamblobfuncstr_STORAGE"
}
]
}
local.settings.json:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<storage_connec_string>",
"FUNCTIONS_WORKER_RUNTIME": "python",
"kamblobfuncstr_STORAGE": "<storage_connec_string>",
"CONTAINERNAME": "<containe_name>"
}
}
输出:
下面的blob触发函数代码成功触发了blob,如下所示:
* Executing task: .venv\Scripts\activate && func host start
Found Python version 3.10.11 (py).
Azure Functions Core Tools
Core Tools Version: 4.0.5030 Commit hash: N/A (64-bit)
Function Runtime Version: 4.15.2.20177
Functions:
BlobTrigger1: blobTrigger
For detailed output, run func with --verbose flag.
[2024-03-13T06:49:09.828Z] Worker process started and initialized.
[2024-03-13T06:49:23.397Z] Host lock lease acquired by instance ID '00000000xxxxxxxxxxx'.
[2024-03-13T06:49:35.791Z] Executing 'Functions.BlobTrigger1' (Reason='New blob detected(LogsAndContainerScan): samples-workitems/samplekam.txt', Id=143133a3-c1e5xxxxxxxxxxxxx)
[2024-03-13T06:49:35.797Z] Trigger Details: MessageId: dd61e79axxxxxxxxxx, DequeueCount: 1, InsertedOn: 2024-03-13T06:49:34.000+00:00, BlobCreated: 2024-03-13T06:49:27.000+00:00, BlobLastModified: 2024-03-13T06:49:27.000+00:00
[2024-03-13T06:49:35.887Z] Python blob trigger function processed blob
Name:samples-workitems/samplekam.txt
Blob Size: None bytes
[2024-03-13T06:49:35.911Z] Executed 'Functions.BlobTrigger1' (Succeeded, Id=1431xxxxxxxxxxxxxx, Duration=907ms)
Azure门户:
下面是我发送到samples-workitems容器的blob。