首页 > 解决方案 > Azure 函数 (PowerShell)

问题描述

安装 azure-core-functions v3 并将项目迁移到 v3 Powershell 项目后开始失败。将问题缩小为在运行时不再识别作为依赖项加载的 Az 模块。进一步的测试显示,函数 host.json 文件中的托管依赖项设置正确加载了 Az 模块,因为通过 Kudu 删除了 data/ManagedDependencies 文件夹并重新启动 Function App 恢复了 Az 模块,因此 requirements.psd1 正常工作 - Powershell 只是找不到下载的模块。

恢复到 v2 后,我在 v2 中发现了同样的问题。通过将所需的 AZ 模块添加到 Azure Function 项目的模块文件夹中,我能够暂时解决此问题。注意:Dev and Deploy 目前是通过 VS Code 进行的。

Powershell如何引用托管依赖项?解决参考问题的下一个途径是什么?

Host.json 内容:

 "version": "2.0",
 "managedDependency": {
 "enabled": true
  }
}

requirements.psd1 内容:

# This file enables modules to be automatically managed by the Functions service.
# See https://aka.ms/functionsmanageddependency for additional information.
#
@{
 'Az' = '3.*'
}

功能应用配置:

[
  {
    "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
    "value": "32178670-77eb-40aa-afbc-ca17946f0350",
    "slotSetting": false
  },
  {
    "name": "AzureWebJobsStorage",
    "value": "DefaultEndpointsProtocol=https;AccountName=REDACTED;EndpointSuffix=core.windows.net",
    "slotSetting": false
  },
  {
    "name": "FUNCTIONS_EXTENSION_VERSION",
    "value": "~2",
    "slotSetting": false
  },
  {
    "name": "FUNCTIONS_WORKER_RUNTIME",
    "value": "powershell",
    "slotSetting": false
  },
  {
    "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
    "value": "DefaultEndpointsProtocol=REDACTED;EndpointSuffix=core.windows.net",
    "slotSetting": false
  },
  {
    "name": "WEBSITE_CONTENTSHARE",
    "value": "rightrezmonitor7d0758",
    "slotSetting": false
  },
  {
    "name": "WEBSITE_NODE_DEFAULT_VERSION",
    "value": "~10",
    "slotSetting": false
  },
  {
    "name": "WEBSITE_RUN_FROM_PACKAGE",
    "value": "1",
    "slotSetting": false
  }
]

Kudu 中的 data/ManagedDependencies/200103210646931.r 目录包含 AZ 和 AZ.Module 文件夹

标签: azurepowershellazure-functions

解决方案


你还在看这个问题吗?您的函数应用程序是否依赖于 .Net Core 2.2?

我有一个 PowerShell 函数应用程序,它使用Get-AzKeyVaultSecretcmdlet 从 KeyVault 检索机密。此函数应用最初是为在 V2 上运行而创建的。但是,我手动进行了更改以将其移至 V3,并且一切都按预期继续工作。

要回答您的问题:

Powershell如何引用托管依赖项?

答:指向存储帐户的托管依赖项路径将附加到$env:PSModulePath第一次调用中。

解决参考问题的下一个途径是什么?

A:您可以尝试强制重新安装函数应用依赖项。为此,请转到门户并选择您的函数应用。转到概述并停止函数应用。之后,选择平台功能并转到 Kudu,如下所示。

在此处输入图像描述

进入 Kudu 后,转到调试控制台,然后选择 PowerShell,如下所示。

在此处输入图像描述

从那里,导航到D:\home\data\ManagedDependencies. 一旦运行Remove-Item * -Recurse -Force,例如,

cd D:\home\data\ManagedDependencies
Remove-Item * -Recurse -Force

接下来,启动函数应用程序,在第一次函数调用时,将下载依赖项并将路径附加到$env:PSModulePath.

如果您在将应用迁移到 V3 后仍然遇到问题,请在https://github.com/Azure/azure-functions-powershell-worker/issues打开一个问题,提供您的函数应用名称,我会采取看看。

干杯,

弗朗西斯科


推荐阅读