Azure Function App Blob Triggers using identity-based authentication returns 一个 powershell 错误
Azure Function App Blob Triggers using identity-based authentication returns a powershell error
我们有一个带有 blob 触发器的函数应用程序。最近,我根据这个 documentation 将触发器迁移到基于身份的身份验证。它在我的机器和函数应用程序上本地运行良好。请注意,该应用程序是用 Python 编写的。虽然,错误发生在调用应用程序之前,所以我怀疑语言是这里的一个因素。
我的同事最近开始就该功能进行协作。当他尝试在本地调试时,他一尝试启动该函数(当该函数将连接到触发器的队列服务时)就出现了这个错误
An unhandled exception has occurred. Host is shutting down. Azure.Identity: Azure PowerShell authentication failed due to an unknown error. 'az' is not recognized as an internal or external command, operable program or batch file.
我告诉他安装Azure CLI,错误切换为:
An unhandled exception has occurred. Host is shutting down. Azure.Identity: Azure PowerShell authentication failed due to an unknown error. 'pwsh' is not recognized as an internal or external command, operable program or batch file.
错误显然是缺少 powershell 核心 CLI。让我感到困扰的是,除了 windows 捆绑的 powershell 之外,pwsh 在我的机器上也不是可识别的命令。因此,我应该收到此错误,但我没有收到,而我的同事却收到了。
这是我们尝试过的:
- 我们尝试使用不同的存储帐户(同样的问题)
- 比较两个存储帐户的访问级别(无差异)
- 我们尝试使用密钥进行身份验证(有效)
- 由于前面提到的原因,我们还没有尝试安装 Powershell Core
我们致力于 Windows 10 19044
host.json
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[2.*, 5.0.0)"
},
"functionTimeout": "00:55:00",
"extensions": {
"blobs": {
"maxDegreeOfParallelism": 1
},
"queues": {
"batchSize": 1,
"newBatchThreshold": 0
}
}
}
function.json
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "myblob",
"type": "blobTrigger",
"direction": "in",
"path": "PROJECT/documents/{name}",
"connection": "PROJECT"
}
]
}
此错误的可能原因之一是用户(或系统)PATH 环境变量不包含 PowerShell 可执行文件所在的目录。它通常位于 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
,虽然 PATH 变量包含 C:\Windows\System32
目录,但 Windows 可能无法在其子文件夹中找到可执行文件。
解决方案需要将 PATH 环境变量设置为 PowerShell 可执行文件所在的目录。
- 在 Windows 搜索栏中,键入“环境变量”和 select 相应的控制面板项。
- 将打开名为“系统属性”的 window。在底部,单击“环境变量”。
- 修改 PATH 环境变量以包含 PowerShell 文件夹的路径。
- 必须重新启动代理才能使更改生效。您可能需要重新启动计算机以确保所有其他 Windows 部分都选择了新变量。
我通过阅读 this 弄明白了。
当无法从 VSC 获取用户上下文时,将通过 Azure CLI 进行身份验证。所以,这就解释了为什么我的同事和我有不同的结果。对我来说,该程序将使用我的 VSC 凭据进行身份验证,但它对我的同事不起作用。
为了解决这个问题,我们:
- 退出 VSC 并登录
- 使用
az login
来确保它正常工作
不能肯定地说这是解决问题的第一步,但已经解决了。
我们有一个带有 blob 触发器的函数应用程序。最近,我根据这个 documentation 将触发器迁移到基于身份的身份验证。它在我的机器和函数应用程序上本地运行良好。请注意,该应用程序是用 Python 编写的。虽然,错误发生在调用应用程序之前,所以我怀疑语言是这里的一个因素。
我的同事最近开始就该功能进行协作。当他尝试在本地调试时,他一尝试启动该函数(当该函数将连接到触发器的队列服务时)就出现了这个错误
An unhandled exception has occurred. Host is shutting down. Azure.Identity: Azure PowerShell authentication failed due to an unknown error. 'az' is not recognized as an internal or external command, operable program or batch file.
我告诉他安装Azure CLI,错误切换为:
An unhandled exception has occurred. Host is shutting down. Azure.Identity: Azure PowerShell authentication failed due to an unknown error. 'pwsh' is not recognized as an internal or external command, operable program or batch file.
错误显然是缺少 powershell 核心 CLI。让我感到困扰的是,除了 windows 捆绑的 powershell 之外,pwsh 在我的机器上也不是可识别的命令。因此,我应该收到此错误,但我没有收到,而我的同事却收到了。
这是我们尝试过的:
- 我们尝试使用不同的存储帐户(同样的问题)
- 比较两个存储帐户的访问级别(无差异)
- 我们尝试使用密钥进行身份验证(有效)
- 由于前面提到的原因,我们还没有尝试安装 Powershell Core
我们致力于 Windows 10 19044
host.json
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[2.*, 5.0.0)"
},
"functionTimeout": "00:55:00",
"extensions": {
"blobs": {
"maxDegreeOfParallelism": 1
},
"queues": {
"batchSize": 1,
"newBatchThreshold": 0
}
}
}
function.json
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "myblob",
"type": "blobTrigger",
"direction": "in",
"path": "PROJECT/documents/{name}",
"connection": "PROJECT"
}
]
}
此错误的可能原因之一是用户(或系统)PATH 环境变量不包含 PowerShell 可执行文件所在的目录。它通常位于 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
,虽然 PATH 变量包含 C:\Windows\System32
目录,但 Windows 可能无法在其子文件夹中找到可执行文件。
解决方案需要将 PATH 环境变量设置为 PowerShell 可执行文件所在的目录。
- 在 Windows 搜索栏中,键入“环境变量”和 select 相应的控制面板项。
- 将打开名为“系统属性”的 window。在底部,单击“环境变量”。
- 修改 PATH 环境变量以包含 PowerShell 文件夹的路径。
- 必须重新启动代理才能使更改生效。您可能需要重新启动计算机以确保所有其他 Windows 部分都选择了新变量。
我通过阅读 this 弄明白了。
当无法从 VSC 获取用户上下文时,将通过 Azure CLI 进行身份验证。所以,这就解释了为什么我的同事和我有不同的结果。对我来说,该程序将使用我的 VSC 凭据进行身份验证,但它对我的同事不起作用。
为了解决这个问题,我们:
- 退出 VSC 并登录
- 使用
az login
来确保它正常工作
不能肯定地说这是解决问题的第一步,但已经解决了。