在Azure Python中使用环境变量进行路径绑定

0 投票
1 回答
47 浏览
提问于 2025-04-14 16:26

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。

在这里输入图片描述

撰写回答