如何将Blob Trigger Azure Function连接至AzureWebJobsStorage应用设置以外的Storage Account
如何将Blob Trigger Azure Function连接至AzureWebJobsStorage应用设置以外的Storage Account
嗨,这个场景我碰到过好多次啦!当你的函数应用默认用的存储(就是配置在AzureWebJobsStorage__accountName里的那个)和要监控的Blob容器所在的存储不是同一个时,只需要两步就能搞定Blob Trigger的跨存储连接:
第一步:给目标存储账户添加专属的应用设置
首先登录Azure门户,找到你的函数应用,进入配置 -> 应用程序设置页面,添加一个新的应用设置:
- 名称可以自定义,比如
TargetBlobStorageConnection(好记就行) - 值填你要监控的那个存储账户的连接字符串(在存储账户的“访问密钥”页面就能找到)
- 如果你不想用连接字符串,也可以用账户名+托管标识的方式(更安全,后面会提)
第二步:在Blob Trigger里显式指定这个连接
接下来要在代码里告诉Blob Trigger用你刚新建的连接,而不是默认的AzureWebJobsStorage:
如果你用的是C#
在BlobTrigger属性里加上Connection参数,指定你刚才设置的应用名称:
[FunctionName("BlobMonitorFunction")] public static void Run( [BlobTrigger("your-target-container/{blobName}", Connection = "TargetBlobStorageConnection")] Stream blobStream, string blobName, ILogger log) { log.LogInformation($"成功处理Blob:{blobName},大小:{blobStream.Length}字节"); }
如果你用的是Python
修改function.json里的bindings配置,添加connection字段并指定应用设置名称:
{ "scriptFile": "__init__.py", "bindings": [ { "name": "blob_data", "type": "blobTrigger", "direction": "in", "path": "your-target-container/{blobName}", "connection": "TargetBlobStorageConnection" } ] }
进阶:用托管标识替代连接字符串(更安全)
要是你不想把存储账户的密钥放在应用设置里(毕竟密钥泄露风险高),可以这么操作:
- 给你的函数应用开启系统分配托管标识(在函数应用的“标识”页面就能开)
- 去目标存储账户的“访问控制(IAM)”页面,给这个托管标识添加存储Blob数据参与者或存储Blob数据所有者的角色
- 回到函数应用的应用设置,添加
TargetBlobStorage__accountName,值填目标存储账户的名称(不需要填密钥) - 最后在Blob Trigger里把
Connection参数指定为TargetBlobStorage(注意这里不用加__accountName,系统会自动识别)
这样函数就能通过托管标识安全地访问目标存储账户的Blob容器啦!
备注:内容来源于stack exchange,提问作者stevestevesteve
相关产品推荐
相关产品推荐

