Центр развертывания службы приложений Azure — что делает «Отключение» и как «повторно подключиться»?

У меня есть служба приложений, в которой размещается приложение FastAPI в реестре контейнеров. На изображении ниже показана страница настроек Центра развертывания службы приложений в Azure.

Я нажал на нее, чтобы увидеть все параметры, которые в противном случае были бы скрыты, и теперь я не могу их отменить. Обработка команды «отключить» заняла около 20 секунд, и хотя я развертываю приложение с помощью конвейеров Azure DevOps CICD, соединение «Azure Repos» не восстанавливается.

В документации мало что сказано, а скриншоты кажутся устаревшими. Однако там говорится, что для Azure Pipelines на портале Azure нечего настраивать, только в Azure DevOps, что уже сделано, и я ожидал снова увидеть кнопку «Отключить» после следующего развертывания — этого не произошло.

Я пытаюсь понять, что именно я сделал (кстати, это среда разработки/тестирования). Еще я бы предпочел вернуть кнопку "Отключить", по крайней мере она указывает на то, что соединение есть.

Редактировать: @wadezhou-MSFT это задача развертывания:

- task: Docker@2
  displayName: login to ACR
  inputs:
     command: login
     repository: $(acrImageName)
     containerRegistry: "$(dockerRegistryServiceConnectionDev)"
- script: |
     docker pull $(dev_docker_registry_name)/$(acrImageName):$(tag)
     docker tag $(dev_docker_registry_name)/$(acrImageName):$(tag) $(dev_docker_registry_name)/$(acrImageName):latest
     docker push $(dev_docker_registry_name)/$(acrImageName):latest
  displayName: Build and push dev image

Служба приложений развертывается с помощью бицепса с помощью Azure CLI (ранее это была задача AzureResourceManagerTemplateDeployment@3):

resource appService 'Microsoft.Web/sites@2023-01-01' = {
  name: appServiceName
  location: location
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    serverFarmId: appPlan.id
    httpsOnly: true
    clientAffinityEnabled: false
    siteConfig: {
      ftpsState: 'Disabled'
      minTlsVersion: '1.2'
      scmType: 'VSTSRM'
      linuxFxVersion: linuxFxVersion
      appCommandLine: dockerRegistryStartupCommand
      appSettings: [
        {
           name: 'WEBSITE_RUN_FROM_PACKAGE'
           value: '1'
        }
        {
           name: 'WEBSITE_ENABLE_SYNC_UPDATE_SITE'
           value: 'true'
        }
        ...
      ]
      ...
    }
  }
}

Пожалуйста, покажите deployment task detail в конвейере DevOps. Вы использовали AzureWebAppContainer@1 задание?

wade zhou - MSFT 05.06.2024 06:00

@wadezhou-MSFT Я добавил больше деталей в первоначальный пост.

dvlsc 05.06.2024 10:23

Я обновил свой ответ на основе вашей информации. Можете ли вы проверить, ответил ли я на ваш вопрос?

Vlad DX 05.06.2024 22:49
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
3
129
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Существуют разные модели развертывания службы приложений в Azure. Они эксклюзивны. Если вы используете один, вам следует игнорировать другие.

Модели развертывания службы приложений:

  1. sFTP.
  2. Continuous deployment from a code repo.
  3. Local Git.
  4. Continuous deployment of a Docker image.
  5. ZIP deploy.
  6. Run from package.

Итак, если развертывание выполняется через Azure DevOps Pipeline, обычно используется #5 - ZIP deploy.

В вашем случае вы публикуете образ Docker только через конвейер Azure DevOps. Но развертывание работает с использованием "4 - Continuous deployment of a Docker image.

«Источник: Azure Repos» — для #2 - Continuous deployment from a code repo.

Они взаимоисключающие. Не следует ожидать повторного появления Disconnect (#2) после развертывания с использованием #4 или #5.


Моё субъективное мнение:

  • sFTP — древнее решение, которое не стоит обсуждать. Вам необходимо управлять SFTP-соединением. Это не атомно.

  • Continuous deployment from a code repo не предназначен для производственного использования. Он развертывает каждое изменение кода без каких-либо тестов или подготовки инфраструктуры.

  • Развертывание Local Git аналогично Continuous deployment from a code repo

  • Continuous deployment for a Docker image — хорошее решение для подхода на основе Docker. Однако вы можете рассмотреть возможность использования контейнерных приложений вместо служб приложений для Docker.

  • ZIP deploy — приемлемая модель, которую можно и нужно использовать из конвейера CI/CD. Наиболее часто используемый подход.

  • Run from package может быть лучшим подходом из-за преимуществ. Преимущества:

    • Атомное развертывание
    • Более быстрое развертывание
    • Уменьшен холодный запуск приложений на основе JavaScript.

Ресурс приложения не должен знать, как он развернут. Поэтому для производства следует использовать только подходы Docker-based, ZIP Deploy и Run from package.

Кроме того, этап развертывания должен быть частью конвейера CI/CD. Вышеупомянутые подходы можно использовать в конвейере (например, Azure Pipelines, GitHub Actions и т. д.).


Ссылки:

Ответ принят как подходящий

В вашем конвейере yaml он только входит в ACR, создает образ и отправляет его в ACR, но еще не связан со службой приложений.

Вы развертываете веб-сервис через Azure CLI с помощью бицепса, но в вашем бицепсе не обнаружено никаких элементов управления исходным кодом. Соединение невозможно создать, если вы перезапустите конвейер, поскольку вы не выполняете развертывание из конвейера. Попробуйте выполнить развертывание из конвейера, чтобы еще раз проверить соединение.

Пример Ямла:

    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        containerRegistry: '$(dockerRegistryServiceConnection)'
        repository: '$(imageRepository)'
        command: 'buildAndPush'
        Dockerfile: '**/Dockerfile'
        tags: '$(tag)'

    - task: AzureWebAppContainer@1
      inputs:
        azureSubscription: 'ARMConn6'
        appName: 'wadeapp3'
        containers: '$(containerRegistry)/$(imageRepository):$(tag)'

Нажмите view log на странице обзора службы приложений, и вы перейдете к сведениям о центре развертывания, но, как упоминал @VladDX, not registry settings content но к содержимому репозитория.

Если использовать Azure Cli, например az webapp create --name Dev-App \ --plan Dev-AppServicePlan \ --resource-group chat-Dev \ --deployment-container-image-name devcontainerregistry.azurecr.io/chat-node:latest, в центре развертывания, это будет:

Под «развертыванием из конвейера» вы подразумеваете использование задачи AzureResourceManagerTemplateDeployment вместо запуска сценария az, верно? Learn.microsoft.com/en-us/azure/azure-resource-manager/bicep‌​/…

dvlsc 05.06.2024 12:44

Задача AzureResourceManagerTemplateDeployment@3 не создаст соединение в центре развертывания, поскольку у бицепса нет элементов управления исходным кодом. В вашем конвейере вы можете использовать AzureWebAppContainer@1 для развертывания образа ACR в службе приложений.

wade zhou - MSFT 05.06.2024 16:35

@wadezhou-MSFT Bicep только создает ресурс. Это не имеет ничего общего с развертыванием рабочей нагрузки. Вопрос в развертывании нагрузки, а не в ARM или Bicep.

Vlad DX 05.06.2024 22:41

Спасибо @VladDX, поэтому задача AzureResourceManagerTemplateDeployment не работает и не рекомендуется, даже если у нее есть элементы управления исходным кодом (на самом деле она создает внешнее соединение git, а не репозитории auzre), если вы хотите восстановиться из конвейера Devops, задача AzureWebAppContainer@1 может создать Azure repos связь, но у нее действительно нет Registry settings , а Project ,repo, branch. Если бы только хотелось disconnect вернуть, можно.

wade zhou - MSFT 06.06.2024 06:45

Спасибо за подробные пояснения! Я немного смущен тем, почему у меня уже было соединение с репозиториями Azure в текущей настройке (унаследованный код), но остальное ясно.

dvlsc 06.06.2024 10:42

Другие вопросы по теме

План службы приложений Azure потребляет 70 % памяти без развертывания кода
На информационной панели Azure: предоставьте пользователю доступ к одному серверу приложений, базе данных SQL и хранилищу Azure
Ограничение сценария запуска служб приложений Azure
API конвертера файлов HTML в PDF работает в локальной среде, но не при развертывании (node.Js, Express.Js, html-pdf, веб-службы Azure)
Как задать отдельные строки подключения к базе данных для слотов развертывания службы приложений Azure
Проблема запуска контейнера при развертывании приложения Quart в службе приложений Azure
Попытка использовать функцию «Поставщик удостоверений» веб-приложения Azure с веб-приложением, использующим Python Azure SDK (azure.identity)
Solr — Ошибка после изменения security.json на JWT — Ищете Solr? Вы должны ввести правильный путь. Солр ответит
Можно ли бесплатно/тестировать дополнительный/второй домен?
Доступ к файлу kudu через веб-приложение Azure