提问人:mattsmith5 提问时间:5/28/2021 最后编辑:mattsmith5 更新时间:6/5/2023 访问量:29268
Azure Functions:对 Blob 存储机密存储库执行读取操作时出错
Azure Functions: There was an error performing a read operation on the Blob Storage Secret Repository
问:
在本地测试 Azure Functions 时,我收到以下错误:
“在 Blob 存储上执行读取操作时出错 机密存储库。请确保“AzureWebJobsStorage”连接 字符串是有效的。
我设置了 Azure Blob 存储,包括存储模拟器和存储资源管理器。如何解决这个问题?
答:
我在使用 Azure Durable Functions 时遇到了这个问题,我在这里找到了解决它的方法: https://github.com/Azure/azure-functions-host/issues/3795#issuecomment-430337085
在 中,添加一个名为 的新设置,并将其设置为“files”。local.settings.json
AzureWebJobsSecretStorageType
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"AzureWebJobsSecretStorageType": "files"
}
}
评论
"AzureWebJobsSecretStorageType": "files"
请不要将“AzureWebJobsStorage”参数更改为实时存储帐户,因为可能会产生额外费用,并且可能会对在线环境产生不可预见的副作用或影响。
存储模拟器早已弃用,应使用 azurite 在本地模拟存储。例如,您可以使用 npm () 或以许多其他方式下载 azurite。npm install -g azurite
“UseDevelopmentStorage=true”是完全在本地环境中使用的正确设置,尤其是在要使用持久函数或其他计算或 I/O 密集型任务时。 关于您的问题,azurite 会在您为其虚拟存储后端执行它的文件夹中创建多个 json 文件。如果在没有任何参数的情况下运行 azurite,则应存在以下文件:
- __azurite_db_blob_extent__.json
- __azurite_db_queue__.json
- __azurite_db_queue_extent__.json
- __azurite_db_table__.json
此外,通常有两个或多个文件夹,如下所示:
- __blobstorage__
- __queuestorage__
若要强制 azure-functions-core-tools 运行时重置存储声明和句柄,请先停止 azurite 和所有实例,删除上述文件和文件夹,然后重新启动它(首先是 azurite)。func
当然,所有内容都会消失,但本地开发存储绝不应用于持久性数据。
评论
我的两分钱。
我正在尝试在本地计算机上运行持久函数。
我收到这个错误。
对 Blob 存储机密存储库执行读取操作时出错。请确保“AzureWebJobsStorage”连接字符串有效
我完全删除了我的文件夹,其路径如下
C:\Users\YourUserName\AppData\Local\Temp\Azurite
现在一切又运行良好了。
文件夹如下所示。
注意:用户注意到它有效,但必须删除我的整个 Temp 文件夹 - 删除 Azurite 文件夹不足以解决问题
评论
对于设置后继续收到 blob 读取错误的任何其他人,将包从 v5 降级到 v4 可以修复它。(我用过)。"AzureWebJobsSecretStorageType": "Files"
Microsoft.Azure.WebJobs.Extensions.Storage
v4.0.5
这可能特定于 .NET 项目。如果不熟悉修改 c# 依赖项,请在文件中找到 PackageReference 对象并更改版本。然后,您可以运行以更新/刷新。.csproj
dotnet restore
对于那些不喜欢阅读文本的人:
project-name.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
</PropertyGroup>
<ItemGroup>
...
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="4.0.5"/>
...
</ItemGroup>
...
</Project>
为了SEO,这是我的错误:
System.InvalidOperationException: Secret initialization from Blob storage failed due to missing both an Azure Storage connection string and a SAS connection uri. For Blob Storage, please provide at least one of these. If you intend to use files for secrets, add an App Setting key 'AzureWebJobsSecretStorageType' with value 'Files'.
其他答案都不适合我,所以我将在这里分享我的解决方案。我试过了:
- 改变
AzureWebJobsSecretStorageType
- 终止蓝铜矿进程并重新启动它
- 从 AppData 中删除所有文件
这些都行不通。我的解决方法是使用 安装 azurite,然后使用 .在那之后,我的旧项目又开始工作了。npm install -g azurite
azurite
如果使用的是 Visual Studio 2019 或更高版本,则需要确保“Azurite”服务正在运行。
如何确定?- 重新启动 VS 并检查输出窗口
如果您使用的是 VS Code 或 Rider,则应手动运行 Azurite。
这个解决方案对我有用 -
以管理员身份运行 cmd。
运行命令并复制第一个 IP 地址的 PID。就我而言,它是.netstat -ano | findstr :10000
18220
然后运行taskkill /PID 18220 /F
然后运行以重新启动 Azure 存储模拟器。"%programfiles(x86)%\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe" init
最后运行以启动 Azure 存储模拟器。"%programfiles(x86)%\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe" start
评论
为此苦苦挣扎了一天左右,事实证明我只需要安装一个 NuGet 包
Microsoft.Azure.WebJobs.Extensions.Storage
评论