繁体   English   中英

Azure Function 使用基于身份的身份验证的 App Blob 触发器返回 powershell 错误

[英]Azure Function App Blob Triggers using identity-based authentication returns a powershell error

我们有一个带有 blob 触发器的 function 应用程序。 最近,我已根据此文档将触发器迁移到基于身份的身份验证。 它在我的机器和 function 应用程序上本地运行良好。 请注意,该应用程序是在 Python 中编写的。尽管错误发生在应用程序被调用之前,所以我怀疑语言是这里的一个因素。

我的同事最近开始在function上进行协作。当他尝试在本地调试时,当他尝试启动function时(当function将连接到触发器的队列服务时),他就出现了这个错误

发生了未处理的异常。 主机正在关闭。 Azure.Identity: Azure PowerShell 由于未知错误,身份验证失败。 'az' 不是内部或外部命令,也不是可运行的程序或批处理文件。

我告诉他安装 Azure CLI,错误切换为:

发生了未处理的异常。 主机正在关闭。 Azure.Identity: Azure PowerShell 由于未知错误,身份验证失败。 'pwsh' 不是内部或外部命令,也不是可运行的程序或批处理文件。

该错误显然似乎是缺少 powershell 核心 CLI。 让我感到困扰的是,除了 windows 捆绑的 powershell 之外,pwsh 在我的机器上也不是可识别的命令。 因此,我应该得到这个错误,但我的同事却没有。

这是我们尝试过的:

  • 我们尝试使用不同的存储帐户(同样的问题)
  • 比较两个存储帐户的访问级别(无差异)
  • 我们尝试使用密钥进行身份验证(有效)
  • 由于前面提到的原因,我们还没有尝试安装 Powershell Core

我们在 Windows 10 19044 工作

主机.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"
    }
  ]
}

我通过阅读this弄明白了。

当无法从 VSC 获取用户上下文时,身份验证将通过 Azure CLI 进行。 所以,这就解释了为什么我的同事和我有不同的结果。 对我来说,该程序将使用我的 VSC 凭据进行身份验证,但它对我的同事不起作用。

为了解决这个问题,我们:

  • 注销 VSC 并登录
  • 使用az login来确保它正常工作

不能肯定地说这是解决它的第一步,但它已经解决了。

此错误的可能原因之一是用户(或系统)PATH 环境变量不包含 PowerShell 可执行文件所在的目录。 它通常位于C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe ,虽然 PATH 变量包含C:\Windows\System32目录,但 Windows 可能无法在其子文件夹中找到可执行文件。

解决方案需要将PATH环境变量设置为 PowerShell 可执行文件所在的目录。

  1. 在 Windows 搜索栏中,键入“环境变量”和 select 相应的控制面板项。
  2. 将打开名为 System Properties 的 window。 在底部,单击“环境变量”。
  3. 修改PATH环境变量以包含 PowerShell 文件夹的路径。
  4. 必须重新启动代理才能使更改生效。 您可能需要重新启动计算机以确保新变量被所有其他 Windows 部分获取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM