我刚刚上传了几十GB的文件到Azure CloudStorage。每个文件都应该被FunctionApp拾取和处理,以响应BlobTrigger
:
[FunctionName(nameof(ImportDataFile))]
public async Task ImportDataFile(
// Raw JSON Text file containing data updates in expected schema
[BlobTrigger("%AzureStorage:DataFileBlobContainer%/{fileName}", Connection = "AzureStorage:ConnectionString")]
Stream blobStream,
string fileName)
{
//...
}
字符串
这在一般情况下工作,但愚蠢的是,我没有做一个最后的测试,该功能之前上传所有的文件到我们的UAT系统.
上传花了几天时间(由于CoViD-19,在我的国内互联网上行链路上运行),所以我真的不想重新做。
**是否有某种方法可以“重播”BlobUpload触发器?**这样函数就可以再次触发,就好像我刚刚重新上传文件一样.
5条答案
按热度按时间iaqfqrcu1#
根据此
link
Azure Functions将Blob收据存储在Azure存储帐户中名为
azure-webjobs-hosts
的容器中,用于您的函数应用(由应用设置AzureWebJobsStorage
定义)。要强制重新处理blob,请从azure-webjobs-hosts容器中手动删除该blob的blob收据。虽然重新处理可能不会立即发生,但保证会在稍后的时间点发生。要立即重新处理,可以更新azure-webjobs-hosts/blobscaninfo中的scaninfo blob。将再次扫描上次修改时间戳在LatestScan属性之后的任何blob。
jei2mxaa2#
我发现了一个hacky-AF的工作,重新处理现有的文件:
如果将元数据添加到Blob,则会重新触发BlobStorage Function Trigger。
在Azure存储资源管理器中访问,但右键单击Blob >属性>添加元数据。
我是设置键:“ForceRefresh”,值“测试”.
tcbh2hod3#
我在代码中处理blob时遇到了一个问题,这意味着
webjobs-blobtrigger-poison
队列中有一堆消息。我必须将它们移回azure-webjobs-blobtrigger-name-of-function-app
。如果没有上述步骤,删除blob收据并调整scaninfo
blob将无法工作。幸运的是,Azure存储资源管理器有一个菜单选项,可以将消息从一个队列移动到另一个队列:
x1c 0d1x的数据
uelo1irk4#
我发现了一个变通办法,如果你不投资的文件名:
Azure存储资源管理器在顶部栏中有一个“克隆新名称”按钮,它将添加一个新文件(并触发函数),而无需通过本地计算机传输数据。
sqserrrh5#
其他的答案要么不适合我,要么是太昂贵的操作是可行的。由于停机,我不得不这样做100k+ blob,这是我写的应用程序来管理此功能。需要两个包:
<PackageReference Include="Azure.Storage.Blobs" Version="12.19.0" />
<PackageReference Include="System.Linq.Async" Version="6.0.1" />
字符串
这实际上不需要下载或重置任何blob,并维护元数据