azure - 当 'code' 是查询字符串中的参数时,为什么匿名 httptrigger azure 函数会抛出 500 内部服务器错误?

标签 azure azure-functions azure-functions-runtime azure-functions-core-tools azure-functions-docker

我有一个在 Kubernetes 容器中运行的函数应用程序。我的端点之一是具有匿名访问的 httptrigger。但是,查询字符串包含一个参数code(由无法控制其名称的第 3 方供应商提供),该参数会导致应用程序抛出 500 错误,并且没有日志指示发生了什么情况。奇怪的是,如果我将相同的函数部署到 Azure Function App,一切都会按预期运行。所以我的问题是需要设置哪些配置或环境变量才能使其正常运行?

与此相关的后续问题 - Azure Function running in AKS throws 500 on query string parameter for http trigger function

最佳答案

事实证明,运行时尝试将文件写入匿名函数的 azure-functions-host/Secrets 目录,其中 code 是查询字符串中的参数。由于 Kubernetes 在创建目录时挂载 secret 卷的方式,即使 readonly 为 false,它也会以只读方式设置权限。

作为解决方法,我最终在 docker 文件中创建了目录

# To enable ssh & remote debugging on app service change the base image to the one below
# FROM mcr.microsoft.com/azure-functions/dotnet:3.0-appservice
FROM mcr.microsoft.com/azure-functions/dotnet:3.0
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
    AzureFunctionsJobHost__Logging__Console__IsEnabled=true \
    FUNCTIONS_WORKER_RUNTIME=dotnet 
    
EXPOSE 80 443

RUN mkdir azure-functions-host/Secrets

COPY . /home/site/wwwroot

在 kubernetes 部署文件中,我将特定文件安装到该目录,以便安装操作不会干扰目录权限。

volumeMounts:
  - name: functionhostkeys-store
    mountPath: "/azure-functions-host/Secrets/host.json"
    subPath: "host.json"
    readOnly: false

这种方法允许运行时仍然根据需要写入该目录,但允许我管理 Azure KeyVault 中的功能 key 并在运行时以已知配置安装它们。

关于azure - 当 'code' 是查询字符串中的参数时,为什么匿名 httptrigger azure 函数会抛出 500 内部服务器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68411649/

相关文章:

通过 terraform azurerm_function_app_function 的 Azure 函数抛出 ClassNotFoundException

c# - 由于缺少 Azure 存储连接字符串和 SAS 连接 uri,Blob 存储的 secret 初始化失败

c# - Azure EventHub函数触发默认重试机制

Azure功能失败: ModuleNotFoundError: No module named _cffi_backend

wcf - 如何让 Azure 计算模拟器在 32 位模式下运行?

azure - SQL Azure 兼容性级别会影响性能吗?

azure - 来自 DNN 站点的 Sql Azure 数据库连接

Azure 函数 key 保管库应用程序设置不起作用

.net - 如何在 Azure Function 应用程序中的所有函数中添加点网依赖项

azure - 使用服务总线触发器在 Azure Functions 上进行本地测试时提供 UserProperties