Почему анонимная лазерная функция httptrigger выдает внутреннюю ошибку сервера 500, если в строке запроса является параметром «код»?
У меня есть приложение-функция, работающее в контейнере в Kubernetes. Одна из моих конечных точек - httptrigger с анонимным доступом. Однако строка запроса содержит параметр
code
(предоставляется сторонним поставщиком, не контролирующим свое имя), в результате чего приложение выдает ошибку 500 без журнала, указывающего, что произошло. Странная часть состоит в том, что если я развертываю ту же функцию в приложении-функции Azure, все работает должным образом. Итак, мой вопрос в том, какие переменные конфигурации или среды необходимо установить, чтобы это работало правильно?
Связанный с этим в качестве дополнительного вопроса - функция Azure, работающая в AKS, выдает 500 в параметре строки запроса для функции триггера http.
1 ответ
Проблема оказалась в том, что среда выполнения пытается записать файлы в
azure-functions-host/Secrets
каталог для анонимных функций, где
code
- параметр в строке запроса. Из-за того, как Kubernetes монтирует тома для секретов при создании каталога, он устанавливает разрешения в режиме только для чтения, даже если
readonly
ложно.
В качестве обходного пути я создал каталог в файле докеров.
# 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 и монтировать их во время выполнения в известной конфигурации.