Почему анонимная лазерная функция 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 и монтировать их во время выполнения в известной конфигурации.