我有一个在 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/