Я застрял и, может быть, вы можете помочь мне. (Обновление: после расследования я знаю, что он не работает, потому что папка wwwroot для функции Azure после сборки / выпуска пуста. Главный вопрос - почему)
Я пытаюсь опубликовать sh Azure Функция с использованием Azure Реестр контейнеров (Linux). Этот шаг, я думаю, выполнен успешно. Я создал конвейер CI / CD, и все было опубликовано правильно.
Когда я захожу на главную страницу функции azure, например: https://myAzureFuncion.azurewebsites.net/ (это только пример)
Я вижу:
![enter image description here](https://i.stack.imgur.com/lchey.png)
В начале самой функции. Ничего особенного, так как я просто хотел проверить CI / CD, так что это шаблон AF. Я только что изменил Авторизацию на Аноним (чтобы исключить проблему с аутентификацией):
[FunctionName("MyAzureFunctionName")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request. Runned!");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
return name != null
? (ActionResult)new OkObjectResult($"Hello, {name}")
: new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}
Так что я хорошо go - верно? Нет, так как это не работает. Я пытаюсь вызвать эту функцию по HTTP-запросу:
https://myAzureFuncion.azurewebsites.net/api/MyAzureFunctionName?name=Mark
И я продолжаю получать 404 Not Found. Я проверил это с почтальоном: то же самое (ранее с авторизацией функции я пробовал с? Code = (code_in_host) и с заголовками x-functions-key. Все время та же информация -> 404 не найдена)
Поскольку эта функция не существует.
Конечно, когда я запускаю ее локально (используя docker для windows), все работает правильно. Я бегу:
https://localhost: some_port / api / MyAzureFunctionName? Name = Mark
И я получаю правильный ответ.
Можете ли вы указать мне, что проверить и как диагностировать проблему здесь? Я ввел App Insights Live Metrics -> но никаких запросов не замечено.
Как диагностировать проблему здесь?
[ОБНОВЛЕНИЕ 04.05.2020 01:35]
Вот как выглядит мой конвейер выпуска для этого компонента в YAML
steps:
- task: AzureFunctionAppContainer@1
displayName: 'Azure Function App on Container Deploy: MyFunctionName'
inputs:
azureSubscription: MySubscription
appName: MyFunctionName
imageName: 'myAcrContainer.azurecr.io/mobile/MyFunctionName:$(Build.BuildNumber)'
Я также увидел одну странную вещь в Azure Portal для этой Azure функции. Когда я go в меню функций - есть информация, что его нет:
![enter image description here](https://i.stack.imgur.com/e14jL.png)
То же самое появляется, когда я использую "новый Azure Опыт управления функциями "
![enter image description here](https://i.stack.imgur.com/XwnqH.png)
[ОБНОВЛЕНИЕ 04.05.2020 11:40]
Установка больше информации по делу. Вот как выглядит docker image:
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/azure-functions/dotnet:3.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["BuildChat/BuildChat.csproj", "BuildChat/"]
COPY ["MyFunctionName/MyFunctionName.csproj", "MyFunctionName/"]
RUN dotnet restore "MyFunctionName/MyFunctionName.csproj"
COPY . .
WORKDIR "/src/MyFunctionName"
RUN dotnet build "MyFunctionName.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "MyFunctionName.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENV AzureWebJobsScriptRoot=/app
А вот конвейер сборки, который я использую:
- stage: BuildMyAzureFunction
displayName: Build and push MyAzureFunction stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push image to container registry
inputs:
containerRegistry: $(dockerRegistryServiceConnection)
repository: $(imageRepositoryMyAzureFunction)
command: 'buildAndPush'
Dockerfile: $(dockerfilePathAzureMyAzureFunction)
tags: |
$(tag)
Я не знаю, что еще я могу дать вам: )
Возможно настройки контейнера в Azure Портал:
![enter image description here](https://i.stack.imgur.com/k9JPH.png)
И журналы с последней docker версии:
2020-05-04 09:32:32.693 INFO - Recycling container because of AppSettingsChange and isMainSite = True
2020-05-04 09:32:32.777 INFO - Pulling image: myAcrContainer.azurecr.io/mobile/myAzureFunction:20200503.11
2020-05-04 09:32:33.829 INFO - 20200503.11 Pulling from mobile/myAzureFunction
2020-05-04 09:32:33.832 INFO - Digest: sha256:688090984dbc5d257b7d4eefff886affa451c59407edd46792dfc81726f393ec
2020-05-04 09:32:33.832 INFO - Status: Image is up to date for myAcrContainer.azurecr.io/mobile/myAzureFunction:20200503.11
2020-05-04 09:32:33.835 INFO - Pull Image successful, Time taken: 0 Minutes and 1 Seconds
2020-05-04 09:32:33.959 INFO - Starting container for site
2020-05-04 09:32:33.961 INFO - docker run -d -p 7287:80 --name myAzureFunction_1_84dd4d10 -e WEBSITE_CORS_ALLOWED_ORIGINS=https://functions.azure.com,https://functions-staging.azure.com,https://functions-next.azure.com -e WEBSITE_CORS_SUPPORT_CREDENTIALS=False -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITE_SITE_NAME=myAzureFunction -e WEBSITE_AUTH_ENABLED=False -e PORT=80 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=myAzureFunction.azurewebsites.net -e WEBSITE_INSTANCE_ID=8da8a02a13a3cdde53ad6aafcd4eb717ca00dd6bc65ff07378d74a0cd859e1c0 -e HTTP_LOGGING_ENABLED=1 myAcrContainer.azurecr.io/mobile/myAzureFunction:20200503.11
2020-05-04 09:32:39.421 INFO - Starting container for site
2020-05-04 09:32:39.422 INFO - docker run -d -p 1500:8081 --name myAzureFunction_1_84dd4d10_middleware -e WEBSITE_CORS_ALLOWED_ORIGINS=https://functions.azure.com,https://functions-staging.azure.com,https://functions-next.azure.com -e WEBSITE_CORS_SUPPORT_CREDENTIALS=False -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITE_SITE_NAME=myAzureFunction-e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=myAzureFunction.azurewebsites.net -e WEBSITE_INSTANCE_ID=8da8a02a13a3cdde53ad6aafcd4eb717ca00dd6bc65ff07378d74a0cd859e1c0 -e HTTP_LOGGING_ENABLED=1 appsvc/middleware:2001061754 /Host.ListenUrl=http://0.0.0.0:8081 /Host.DestinationHostUrl=http://172.16.2.6:80 /Host.UseFileLogging=true
2020-05-04 09:32:44.658 INFO - Initiating warmup request to container myAzureFunction_1_84dd4d10 for site myAzureFunction
2020-05-04 09:33:00.400 INFO - Waiting for response to warmup request for container myAzureFunction_1_84dd4d10. Elapsed time = 15.7420671 sec
2020-05-04 09:33:16.088 INFO - Waiting for response to warmup request for container myAzureFunction_1_84dd4d10. Elapsed time = 31.4308809 sec
2020-05-04 09:33:33.284 INFO - Waiting for response to warmup request for container myAzureFunction_1_84dd4d10. Elapsed time = 48.6269148 sec
2020-05-04 09:33:56.001 INFO - Container myAzureFunction_1_84dd4d10 for site myAzureFunctioninitialized successfully and is ready to serve requests.
2020-05-04 09:33:56.004 INFO - Initiating warmup request to container myAzureFunction_1_84dd4d10_middleware for site myAzureFunction
2020-05-04 09:34:04.506 INFO - Container myAzureFunction_1_84dd4d10_middleware for site myAzureFunction initialized successfully and is ready to serve requests.
2020_05_04_RD501AC582A899_easyauth_docker.log:
2020_05_04_RD501AC582A899_default_docker.log:
2020-05-04T09:21:14.187664147Z Hosting environment: Production
2020-05-04T09:21:14.187744046Z Content root path: /app
2020-05-04T09:21:14.187750446Z Now listening on: http://[::]:80
2020-05-04T09:21:14.187754446Z Application started. Press Ctrl+C to shut down.
2020-05-04T09:33:49.229983024Z Hosting environment: Production
2020-05-04T09:33:49.232401696Z Content root path: /app
2020-05-04T09:33:49.232413096Z Now listening on: http://[::]:80
2020-05-04T09:33:49.232417396Z Application started. Press Ctrl+C to shut down.
[ОБНОВЛЕНИЕ 04.05.2020 15:55]
Я проверил центр развертывания, и он выглядит нормально:
![enter image description here](https://i.stack.imgur.com/axf4s.png)
Но поскольку я публикую 3 функции (1 концентратор SignalR и 2 azure функций - конечно, обе "не работают"), я думаю - возможно, это как-то смешалось ( и в этом azure приложении функции - на самом деле SignalR публикуется?
Я проверил этот журнал задач выпуска (который предполагает публикацию sh MyAzureFunction), и все выглядит правильно (везде моя функция MyAzureFunction в log):
![enter image description here](https://i.stack.imgur.com/UlLUA.png)
Вот как выглядит мой конвейер Release:
![enter image description here](https://i.stack.imgur.com/vdIFT.png)
А вот конфигурация триггера непрерывного развертывания:
![enter image description here](https://i.stack.imgur.com/PyIiS.png)
А вот настройки предустановки этапа 2 (для публикации azure):
![enter image description here](https://i.stack.imgur.com/eKnyu.png)
И, наконец, сам шаг выпуска (хотя я уже опубликовал его версию YAML. Чтобы быть хонами - все проверено. В имени изображения / приложения нет несоответствия)
![enter image description here](https://i.stack.imgur.com/td3Pc.png)
[ОБНОВЛЕНИЕ 04.05.2020 16:15]
Так что сейчас на 100% я знаю, что происходит. После успешного выпуска без каких-либо ошибок / предупреждений функция azure просто пуста:)
Я проверил с помощью расширенных инструментов содержимое wwwroot (после перехода к https://myAzureFunction.scm.azurewebsites.net/wwwroot/)
Вот результат:
![enter image description here](https://i.stack.imgur.com/Mr4bF.png)
Так что вполне понятно, почему он не работает :) Главный вопрос "Что, черт возьми, случилось" ?:)
I пытался в центре развертывания синхронизировать код c (как предложено @djsly), но он не работает (возможно, потому что он управляется контейнерами), но я добавляю сообщение, когда пытаюсь синхронизировать c:
![enter image description here](https://i.stack.imgur.com/Zj9xN.png)
[ОБНОВЛЕНИЕ 05.05.2020 00:18]
Я подключился к Azure реестру контейнера и скачал образ, который должен быть изображением, работающим с этой Azure функцией в Azure.
Итак, я запустил:
docker login myAcrContainer.azurecr.io
docker pull myAcrContainer.azurecr.io/mobile/myAzureFunction:20200503.11
docker run -it --rm -p 31234:80 myAcrContainer.azurecr.io/mobile/myAzureFunction:20200503.11
и нажал http://localhost: 31234 / api / MyAzureFuncionFuns
и все работает правильно. Таким образом, это подтверждает мои подозрения, что изображение неправильно «запускается» в функции Azure на портале Azure.
Вопрос: я делаю что-то не так - или это Azure ошибка?
Возник вопрос относительно моего плана обслуживания приложений. Вот как это выглядит (при создании функции Azure):
![enter image description here](https://i.stack.imgur.com/oRKLR.png)
А вот детали плана:
![enter image description here](https://i.stack.imgur.com/0vEjr.png)
Сейчас это бесплатная пробная версия (как они предлагали, когда я ее создавал) Может ли это быть причиной? Разве они не должны запрещать что-то вместо того, чтобы позволять, а потом ломать вещи?;)