You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Durable Functions中实现Blob存储追加写入?

实现Azure Durable Functions向Blob存储追加写入内容

Azure Functions的Blob输出绑定默认是覆盖写入逻辑,不支持直接追加操作。要实现向newblob容器下的test.txt追加内容,需要改用Azure Storage Blob SDK直接操作Append Blob类型的文件。

修改步骤

  1. 安装依赖包
    确保项目中安装Azure存储Blob SDK:
pip install azure-storage-blob
  1. 修改Activity函数逻辑
    移除原有的Blob输出绑定,通过SDK实现追加写入:
import azure.functions as func
import azure.durable_functions as df
import logging
import json
from azure.storage.blob import BlobClient
import os

app = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

### client function ###
@app.route(route="orchestrators/client_function")
@app.durable_client_input(client_name="client")
async def client_function(req: func.HttpRequest, client: df.DurableOrchestrationClient) -> func.HttpResponse:
    instance_id = await client.start_new("orchestrator", None, {})
    logging.info(f"Started orchestration with ID = '{instance_id}'.")
    await client.wait_for_completion_or_create_check_status_response(req, instance_id)
    status = await client.get_status(instance_id)
    return f"output: {status.output}"

### orchestrator function ###
@app.orchestration_trigger(context_name="context")
def orchestrator(context: df.DurableOrchestrationContext) -> str:
    result = yield context.call_activity("main", '')
    return "Inserted"

### activity function ###
@app.activity_trigger(input_name="blank")
def main(blank: str):
    # 从环境变量获取存储连接字符串
    connection_string = os.environ["BlobStorageConnection"]
    blob_client = BlobClient.from_connection_string(connection_string, container_name="newblob", blob_name="test.txt")
    
    # 准备追加的JSON数据,添加换行符便于后续读取
    data = {"size": 100, "time": 0.1}
    json_data = json.dumps(data) + "\n"
    
    try:
        # 尝试直接追加数据
        blob_client.append_block(json_data.encode('utf-8'))
    except Exception as e:
        # 若Blob不存在,先创建Append类型Blob再追加
        if "The specified blob does not exist" in str(e):
            blob_client.create_append_blob()
            blob_client.append_block(json_data.encode('utf-8'))
        else:
            # 抛出其他未知异常
            raise e
    
    return "Inserted"

核心说明

  • 移除@app.blob_output绑定,改用BlobClient直接操作存储资源
  • 使用append_block方法实现追加写入,该方法仅适用于Append Blob类型
  • 处理Blob不存在的边界情况:自动创建Append Blob后再执行追加操作
  • 每条JSON数据末尾添加换行符,避免多条数据耦合在一起

内容的提问来源于stack exchange,提问作者TY00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 06:35:24