Руководство: Развертывание приложения ASP.NET Core и База данных SQL Azure в Служба приложений Azure

В этом руководстве вы узнаете, как развернуть приложение на основе данных ASP.NET Core для Служба приложений Azure и подключиться к База данных SQL Azure. Служба приложений Azure — это высокомасштабируемая, самовосстанавливающаяся веб-хостинговая служба, которая может легко развертывать приложения на Windows или Linux. Хотя в этом учебном процессе используется приложение ASP.NET Core 10.0, процесс аналогичный для других версий ASP.NET Core.

В этом руководстве описано следующее:

  • Создайте безопасную по умолчанию архитектуру для App Service и SQL Database.
  • Обеспечение безопасности секретов подключения с использованием управляемой идентичности и ссылок на Key Vault.
  • Разверните пример приложения ASP.NET Core в службе приложений из репозитория GitHub.
  • Доступ к Служба приложений строка подключения и параметрам приложения в коде приложения.
  • Создание обновлений и повторное развертывание кода приложения.
  • Создайте схему базы данных, загрузив пакет миграций.
  • Передача потоковых данных журналов диагностики из Azure.
  • Управление приложением на портале Azure.
  • Подготовьте ту же архитектуру и разверните с помощью Azure CLI разработчика.
  • Оптимизируйте рабочий процесс разработки с помощью GitHub пространства кода и GitHub Copilot.

Необходимые условия

  • Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, вы можете создать ее бесплатно.
  • Учетная запись GitHub. Вы также можете получить его бесплатно.
  • Знание разработки ASP.NET Core.
  • (необязательно) Чтобы попробовать GitHub Copilot, вам понадобится учетная запись GitHub Copilot. Доступна 30-дневная бесплатная пробная версия.
  • Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, вы можете создать ее бесплатно.
  • Azure Developer CLI установлен. Вы можете следовать указаниям с помощью Azure Cloud Shell, потому что в нем уже установлен инструментарий командной строки Azure для разработчиков.
  • Знание разработки ASP.NET Core.
  • (необязательно) Чтобы попробовать GitHub Copilot, вам понадобится учетная запись GitHub Copilot. Доступна 30-дневная бесплатная пробная версия.

Перейти к концу

Если вы просто хотите увидеть, как пример приложения из этого руководства работает в Azure, выполните следующие команды в Azure Cloud Shell и следуйте инструкциям:

dotnet tool install --global dotnet-ef --version 10.*
mkdir msdocs-app-service-sqldb-dotnetcore
cd msdocs-app-service-sqldb-dotnetcore
azd init --template msdocs-app-service-sqldb-dotnetcore .
azd up

1. Запустите пример

Сначала настройте пример приложения на основе данных в качестве отправной точки. Для удобства пример репозитория включает конфигурацию контейнера разработки . В контейнере разработчика есть всё необходимое для разработки приложения, включая базу данных и все переменные среды, необходимые примерному приложению. Контейнер разработки может выполняться в пространстве кода GitHub, что означает, что вы можете запустить пример на любом компьютере с веб-браузером.

Шаг 1. В новом окне браузера:

  1. Войдите в учетную запись GitHub.
  2. Перейдите к https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore/fork.
  3. Отмена выбора только для копирования основной ветви. Вы хотите все ветви.
  4. Выберите Создать ответвление.

Step 2: В форке на GitHub:

  1. Выберите основную>начальную-ветвь-без-инфраструктуры для стартовой ветви. Эта ветвь содержит только пример проекта и не содержит файлов или конфигурации, связанных с Azure.
  2. Выберите Code>Codespaces>Создать рабочее пространство на starter-no-infra. Настройка кодового пространства занимает несколько минут.

Шаг 3. В терминале кодового пространства:

  1. Восстановите пакеты NuGet с помощью dotnet restore.
  2. Выполните миграции базы данных с dotnet ef database update.
  3. Запустите приложение, выполнив команду dotnet run.
  4. Когда появится уведомление Your application running on port 5093 is available., нажмите кнопку "Открыть в браузере". Пример приложения должен отображаться на новой вкладке браузера. Чтобы остановить приложение, введите Ctrl+C.

Совет

Вы можете попросить GitHub Copilot об этом репозитории. Например:

  • @workspace Что делает этот проект?
  • @workspace Что делает папка devcontainer?

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

2. Создать сервис приложений и базу данных

На этом шаге вы создадите эти ресурсы Azure. Шаги этого учебника создают набор защищённых по умолчанию ресурсов, включающих App Service и База данных SQL Azure. Для процесса создания укажите:

  • Имя веб-приложения. Он используется в качестве части DNS-имени приложения.
  • Регион, в котором приложение будет физически запускаться в мире. Он также используется в качестве части DNS-имени приложения.
  • Стек среды выполнения для приложения. Здесь вы выбираете версию .NET, используемую для приложения.
  • План размещения для приложения. Это ценовая категория, которая включает набор функций и емкость масштабирования для вашего приложения.
  • Группа ресурсов для приложения. Группа ресурсов позволяет группировать (в логическом контейнере) все Azure ресурсы, необходимые для приложения.

Войдите на портал Azure и выполните следующие действия, чтобы создать ресурсы Служба приложений Azure.

Step 1: На портале Azure:

  1. В верхней строке поиска введите службу приложений.
  2. Выберите элемент, помеченный службой приложений , под заголовком "Службы ".
  3. Выберите "Создать>веб-приложение". Вы также можете перейти к мастеру настройки напрямую.

Шаг 2: Настройте новое приложение В Create Web App заполните форму следующим образом.

  1. Имя: msdocs-core-sql-XYZ. Для вас будет создана группа ресурсов с именем msdocs-core-sql-XYZ_group .
  2. Стек среды выполнения: .NET 10 (LTS).
  3. Операционная система: Linux.
  4. Регион: предпочитаемый регион.
  5. План Linux: Создайте новый и используйте имя msdocs-core-sql-XYZ.
  6. Тарифный план: Базовый B1. Когда вы будете готовы, вы можете увеличить масштаб до другой ценовой категории.

Шаг 3. Добавление базы данных

  1. Перейдите на вкладку "База данных ".
  2. Выберите "Создать базу данных".
  3. В обработчике выберите SQLAzure. Имя сервера и имя базы данных задаются по умолчанию соответствующими значениями.
  4. Не нажимайте кнопку "Создать Кэш Azure для Redis". Этот тип службы больше не поддерживается.

Шаг 4. Настройка развертывания GitHub

  1. Перейдите на вкладку "Развертывание ".
  2. Включите непрерывное развертывание.
  3. В Organization выберите псевдоним GitHub.
  4. В репозитории выберите msdocs-app-service-sqldb-dotnetcore.
  5. В ветке выберите starter-no-infra.
  6. Убедитесь, что обычная проверка подлинности отключена.
  7. Выберите Просмотреть и создать.
  8. После завершения проверки щелкните Создать.

Шаг 5. Развертывание занимает несколько минут. После завершения развертывания нажмите кнопку Перейти к ресурсу. Вы перейдете непосредственно в приложение Службы приложений, но будут созданы следующие ресурсы:

  • Группа ресурсов: контейнер для всех созданных ресурсов.
  • План службы приложений: Определяет вычислительные ресурсы для службы приложений. Создается план Linux на уровне Базовый.
  • Служба приложений: Представляет ваше приложение и работает в плане Служба приложений.
  • Виртуальная сеть: интегрированная с приложением Служба приложений и изолирует внутренний сетевой трафик.
  • Частные конечные точки: Конечные точки доступа к хранилищу ключей и серверу базы данных в виртуальной сети.
  • Сетевые интерфейсы: представляет частные IP-адреса, по одному для каждой из частных конечных точек.
  • сервер База данных SQL Azure: доступен только из частной конечной точки.
  • База данных SQL Azure: база данных и пользователь создаются на сервере.
  • Хранилище ключей: доступно только из своей частной конечной точки. Используется для управления секретами для приложения Служба приложений.
  • Частная зона DNS-зоны: Включите разрешение DNS для хранилища ключей и сервера базы данных в виртуальной сети.

3. Безопасные секреты подключения

Мастер создания уже создал переменную подключения для вас в виде строк подключения .NET и настроек приложения. Однако, лучшей практикой безопасности является полностью исключить хранение секретов в Службе приложений. Вы переместите секреты в хранилище ключей и измените параметр приложения на ссылки на хранилище ключей с помощью соединителей служб.

Совет

Чтобы использовать проверку подлинности без пароля, обратитесь к разделу Как изменить подключение к SQL Database, чтобы использовать управляемое удостоверение?

Шаг 1: Получение существующей строки подключения

  1. В левом меню на странице службы приложений выберите Параметры > переменных среды, > строки подключения.
  2. Выберите AZURE_SQL_CONNECTIONSTRING.
  3. В поле Add/Edit строка подключения в поле Value найдите часть Password= в конце строки.
  4. Скопируйте строку пароля после password= для последующего использования. Это строка подключения позволяет подключаться к базе данных SQL, защищенной за частной конечной точкой. Однако секретный ключ сохраняется прямо в приложении App Service, что не является оптимальным вариантом. Вы измените это.

Шаг 2. Создание хранилища ключей для безопасного управления секретами

  1. В верхней строке поиска введите "key vault", а затем выберите Marketplace>Key Vault.
  2. В группе ресурсов выберите msdocs-core-sql-XYZ_group.
  3. В имени хранилища ключей введите имя, состоящее только из букв и чисел.
  4. В регионе задайте для него то же расположение, что и группа ресурсов.

Шаг 3. Защита хранилища ключей с помощью частной конечной точки

  1. Перейдите на вкладку Сеть.
  2. Отмена выбора включения общедоступного доступа.
  3. Выберите "Создать частную конечную точку".
  4. В группе ресурсов выберите msdocs-core-sql-XYZ_group.
  5. В диалоговом окне, в разделе Расположение, выберите то же местоположение, что и ваше приложение в Службе приложений.
  6. В поле Name введите msdocs-core-sql-XYZVvaultEndpoint.
  7. В виртуальной сети выберите виртуальную сеть в группе msdocs-core-sql-XYZ_group .
  8. В подсети выберите доступную совместимую подсеть. Мастер веб-приложений создал его для удобства.
  9. Нажмите ОК.
  10. Выберите Проверить и создать, а затем выберите Создать. Дождитесь завершения развертывания хранилища ключей. Должно появиться сообщение "Развертывание завершено".

Шаг 4.

  1. В верхней строке поиска введите msdocs-core-sql, затем найдите ресурс Службы приложений с именем msdocs-core-sql-XYZ.
  2. На странице Служба приложений в меню слева выберите Настройки Соединитель службы>. Уже есть коннектор для базы данных SQL, который мастер создания приложений создал для вас.
  3. Отметьте флажок рядом с коннектором База данных SQL, а затем выберите "Изменить".
  4. Выберите вкладку Аутентификация.
  5. Вставьте пароль, скопированный ранее.
  6. Выберите Store Secret в Key Vault.
  7. В разделе Подключение Key Vault выберите Создать новое. Диалоговое окно создания подключения открывается поверх диалогового окна редактирования.

Шаг 5: Установите подключение к "Key Vault"

  1. В диалоговом окне Создание подключения, для подключения Key Vault, выберите хранилище ключей, которое вы создали ранее.
  2. Выберите Review + Create.
  3. После завершения проверки нажмите кнопку "Создать".

Скриншот, демонстрирующий процесс создания соединителя службы Key Vault.

Шаг 6. Завершение настройки соединителя База данных SQL

  1. Вы вернулись в диалоговом окне редактирования для defaultConnector. На вкладке Проверка подлинности дождитесь создания соединителя хранилища ключей. По завершении раскрывающийся список Key Vault Connection автоматически выберет его.
  2. Выберите Далее: сеть.
  3. Выберите " Настроить правила брандмауэра", чтобы включить доступ к целевой службе. Мастер создания приложения уже защитил базу данных SQL с помощью частной конечной точки.
  4. Выберите Сохранить. Подождите, пока появится уведомление об успешном обновлении.

Шаг 7. Проверка интеграции Key Vault

  1. В меню слева снова выберите Настройки> Переменные среды> Строки подключения.
  2. Рядом с AZURE_SQL_CONNECTIONSTRING выберите "Показать значение". Значение должно быть @Microsoft.KeyVault(...), то есть это ссылка на хранилище ключей key vault так как секрет теперь управляется в хранилище ключей.

Вкратце, процесс обеспечения безопасности данных доступа включал:

  • Извлечение секретов подключения из переменных среды приложения Служба приложений.
  • Создание хранилища ключей.
  • Создание подключения к Key Vault с использованием управляемой системой назначенной управляемой идентичности.
  • Обновление разъёма SQL Database для хранения секрета в хранилище ключей.

4. Развертывание примера кода

На этом шаге вы настроите развертывание GitHub с помощью GitHub Actions. Это всего лишь один из множества способов развертывания в Службе приложений, но это также отличный способ обеспечения непрерывной интеграции в процессе развертывания. По умолчанию каждое git push в вашем репозитории GitHub инициирует сборку и развертывание.

Step 1: Вернитесь в пространство кода GitHub вашей вилки примера и запустите git pull origin starter-no-infra. Это извлекает только что зафиксированный файл рабочего процесса в пространство кода.

Step 2 (вариант 1: с GitHub Copilot):

  1. Запустите новый сеанс чата, выбрав представление чата, а затем выберите +.
  2. Спросите: «@workspace Как приложение подключается к базе данных?— Copilot мог бы объяснить тебе этот MyDatabaseContext класс и как он настроен в Program.cs.
  3. Спросите: «В рабочем режиме я хочу, чтобы приложение использовало для подключения к базе данных строку подключения с именем AZURE_SQL_CONNECTIONSTRING». Copilot может предложить фрагмент кода, аналогичный тому, что приводится далее в шагах Вариант 2: без GitHub Copilot, и даже подсказать внести изменение в файл Program.cs.
  4. Откройте Program.cs в обозревателе и добавьте предложение кода. GitHub Copilot не дает вам одинаковый ответ каждый раз, и это не всегда правильно. Вам может потребоваться задать дополнительные вопросы, чтобы точно настроить ответ. Советы см. в статье "Что можно сделать с помощью GitHub Copilot в моем пространстве кода?

Step 2 (вариант 2: без GitHub Copilot):

  1. Откройте Program.cs в обозревателе.
  2. Найдите закомментированный рабочий блок else и раскомментируйте его. Этот код подключается к базе данных с помощью AZURE_SQL_CONNECTIONSTRING.

Step 3 (вариант 1: с GitHub Copilot):

  1. Откройте github/workflows/starter-no-infra_msdocs-core-sql-XYZ в обозревателе. Мастер создания службы приложений создал этот файл.
  2. Выделите шаг dotnet publish и выберите .
  3. Попросите Copilot: «Установите инструменты EF Core для .NET 10, восстановите активы среды выполнения Linux x64 и создайте пакет миграций Linux x64 в той же выходной папке.»
  4. Если предложение приемлемо, нажмите кнопку "Принять". GitHub Copilot не дает вам одинаковый ответ каждый раз, и это не всегда правильно. Вам может потребоваться задать дополнительные вопросы, чтобы точно настроить ответ. Советы см. в статье "Что можно сделать с помощью GitHub Copilot в моем пространстве кода?

Снимок экрана: использование GitHub Copilot в рабочем файле процессов GitHub.

Step 3 (вариант 2: без GitHub Copilot):

  1. Откройте github/workflows/starter-no-infra_msdocs-core-sql-XYZ в обозревателе. Мастер создания службы приложений создал этот файл.
  2. На шаге dotnet publish добавьте шаг для установки средства Entity Framework Core с помощью команды dotnet tool install -g dotnet-ef --version 10.*.
  3. В рамках нового шага добавьте ещё один шаг для восстановления ресурсов Linux с помощью команды dotnet restore --runtime linux-x64.
  4. На этапе восстановления добавьте ещё один шаг, чтобы создать пакет миграции базы данных в пакет развертывания: dotnet ef migrations bundle --runtime linux-x64 -o ${{env.DOTNET_ROOT}}/myapp/migrationsbundle. Пакет миграции — это автономный исполняемый файл, который можно запустить в рабочей среде, не требуя пакета SDK для .NET. Контейнер App Service Linux содержит только среду выполнения .NET и не включает .NET SDK.

Снимок экрана, показывающий шаги, добавленные в файл рабочего процесса GitHub для набора миграции базы данных.

Шаг 4.

  1. Выберите расширение Исходный код.
  2. В текстовом поле введите сообщение с подтверждением вроде Configure Azure database connection. Или выберите и позвольте GitHub Copilot создать комментарий к коммиту.
  3. Нажмите кнопку "Зафиксировать", а затем подтвердите значение "Да".
  4. Нажмите кнопку "Синхронизировать изменения 1", а затем нажмите кнопку "ОК".

Step 5: Назад на странице Центра развертывания на портале Azure:

  1. Перейдите на вкладку "Журналы", затем выберите "Обновить", чтобы увидеть новый запуск развертывания.
  2. В элементе журнала для запуска развертывания выберите запись "Журналы сборки/развертывания" с последней меткой времени.

Step 6: Вы перейдете в репозиторий GitHub и увидите, что выполняется действие GitHub. Файл рабочего процесса определяет два отдельных этапа: сборку и развертывание. Дождитесь, пока выполнение GitHub покажет статус Success. Это занимает около 5 минут.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

5. Создание схемы базы данных

В случае, если база данных SQL защищена виртуальной сетью, легче всего запустить миграции dotnet баз данных в SSH-сеансе с контейнером Linux в службе приложений.

Шаг 1. Назад на странице Служба приложений в меню слева

  1. Выберите Средства разработки>SSH.
  2. Выберите Перейти. (Запуск занимает несколько минут.)

Шаг 2. В сеансе SSH:

  1. Запустите cd /home/site/wwwroot. Вот все развернутые файлы.
  2. Запустите пакет миграции, созданный рабочим процессом GitHub, с помощью команды ./migrationsbundle -- --environment Production. При успешном завершении Служба приложений успешно подключается к База данных SQL. Помните, что --environment Production соответствует изменениям кода, внесенным в Program.cs.

В сеансе SSH только изменения в файлах внутри /home могут сохраняться после перезапуска приложения. Изменения за пределами /home не сохраняются.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

6. Перейдите к приложению

Шаг 1. На странице Служба приложений:

  1. В меню слева выберите Обзор.
  2. Выберите URL-адрес своего приложения.

Шаг 2. Добавление нескольких задач в список. Поздравляем, вы запускаете веб-приложение в Служба приложений Azure с безопасным подключением к База данных SQL Azure.

7. Потоковая передача журналов диагностики

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

Шаг 1. На странице Служба приложений:

  1. В меню слева выберите Мониторинг>журналы службы приложений.
  2. Под элементом Ведение журнала приложения выберите Файловая система.
  3. В меню сверху выберите Сохранить.

Шаг 2. В меню слева выберите поток журналов. Вы увидите логи для своего приложения, включая логи платформы и логи внутри контейнера.

8. Очистка ресурсов

По завершении вы можете удалить все ресурсы из подписки Azure, удалив группу ресурсов.

Step 1: В строке поиска в верхней части портала Azure:

  1. Введите имя группы ресурсов.
  2. Выберите группу ресурсов.

Шаг 2. На странице группы ресурсов выберите "Удалить группу ресурсов".

Шаг 3.

  1. Введите имя группы ресурсов для подтверждения удаления.
  2. Выберите команду Удалить.

2. Создание ресурсов Azure и развертывание примера приложения

На этом шаге вы создадите ресурсы Azure и развернете пример приложения для Служба приложений в Linux. Шаги в этом учебнике создают набор защищённых по умолчанию ресурсов, включающих App Service, База данных SQL Azure и, по желанию, Azure Managed Redis.

В контейнере разработки уже установлен Интерфейс командной строки разработчика Azure (AZD).

  1. Выполните команду azd initиз корневого каталога репозитория.

    azd init --template dotnet-app-service-sqldb-infra .
    
  2. При появлении запроса укажите следующие ответы:

    Вопрос Ответ
    Текущий каталог не пуст. Вы хотите инициализировать проект в каталоге '<your-directory>' здесь? Y
    Что вы хотите сделать с этими файлами? Сохранение существующих файлов без изменений
    Введите новое имя среды Введите уникальное имя. Шаблон AZD использует это имя как часть DNS-имени веб-приложения в Azure (<app-name>-<hash>.azurewebsites.net). Разрешены буквенно-цифровые символы и дефисы.
  3. Войдите в Azure, выполнив команду azd auth login и следуя инструкциям.

    azd auth login
    
  4. Создайте необходимые ресурсы Azure и разверните код приложения с помощью команды azd up. Следуйте предложению, чтобы выбрать нужную подписку и местоположение для ресурсов Azure.

    azd up
    

    Выполнение azd up команды занимает около семи минут (Azure Managed Redis занимает больше всего времени). Он также компилирует и развертывает код приложения, но позже необходимо изменить код для работы со службой приложений. Во время выполнения команда предоставляет сообщения о процессе подготовки и развертывания, включая ссылку на развертывание в Azure. По завершении команда также отображает ссылку на развернутое приложение.

    Этот шаблон AZD содержит файлы (azure.yaml и каталог infra), создающие архитектуру, безопасную по умолчанию, со следующими ресурсами Azure:

    • Группа ресурсов: контейнер для всех созданных ресурсов.
    • План службы приложений: Определяет вычислительные ресурсы для службы приложений. Создается план Linux на уровне Базовый.
    • Служба приложений: Представляет ваше приложение и работает в плане Служба приложений.
    • Виртуальная сеть: интегрированная с приложением Служба приложений и изолирует внутренний сетевой трафик.
    • Частные конечные точки: Конечные точки доступа к хранилищу ключей и серверу базы данных в виртуальной сети.
    • Сетевые интерфейсы: представляет частные IP-адреса, по одному для каждой из частных конечных точек.
    • сервер База данных SQL Azure: доступен только из частной конечной точки.
    • База данных SQL Azure: база данных и пользователь создаются на сервере.
    • Azure Managed Redis: доступен только через свою частную конечную точку.
    • Хранилище ключей: доступно только из своей частной конечной точки. Используется для управления секретами для приложения Служба приложений.
    • Частная зона DNS-зоны: Включите разрешение DNS для хранилища ключей и сервера базы данных в виртуальной сети.

    Когда команда завершит создание ресурсов и развертывание кода приложения в первый раз, развернутое пример приложения еще не работает, так как необходимо внести небольшие изменения, чтобы подключиться к базе данных в Azure.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

3. Проверка строк подключения

Совет

SQL строка подключения базы данных по умолчанию использует аутентификацию SQL. Для более безопасной аутентификации без пароля, см. Как изменить подключение к базе данных SQL, чтобы использовать управляемое удостоверение.

Шаблон AZD, который вы используете, генерирует переменные подключения для вас уже в качестве настроек приложения и выводит их в терминал для вашего удобства. Параметры приложения — это один из способов хранения секретов подключения вне репозитория кода.

  1. В выходе AZD найдите настройки AZURE_SQL_CONNECTIONSTRING. Отображаются только имена параметров. Они выглядят следующим образом в выходных данных AZD:

     App Service app has the following connection strings:
         - AZURE_SQL_CONNECTIONSTRING
         - AZURE_REDIS_CONNECTIONSTRING
         - AZURE_KEYVAULT_RESOURCEENDPOINT
         - AZURE_KEYVAULT_SCOPE
     

    AZURE_SQL_CONNECTIONSTRING содержит строку подключения к базе данных SQL в Azure. Позже его необходимо использовать в коде.

  2. Для удобства шаблон AZD отображает прямую ссылку на страницу параметров приложения. Найдите ссылку и откройте ее на новой вкладке браузера.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

4. Изменение примера кода и повторное развертывание

  1. В пространстве кода GitHub запустите новый сеанс чата, выбрав представление Chat, а затем выберите +.

  2. Спросите: «@workspace Как приложение подключается к базе данных?— Copilot мог бы объяснить тебе этот MyDatabaseContext класс и как он настроен в Program.cs.

  3. Спросите: «В рабочем режиме я хочу, чтобы приложение использовало для подключения к базе данных строку подключения с именем AZURE_SQL_CONNECTIONSTRING». Copilot может предложить фрагмент кода, аналогичный тому, что приводится далее в шагах Вариант 2: без GitHub Copilot, и даже подсказать внести изменение в файл Program.cs.

  4. Откройте Program.cs в обозревателе и добавьте предложение кода.

    GitHub Copilot не дает вам одинаковый ответ каждый раз, и это не всегда правильно. Вам может потребоваться задать дополнительные вопросы, чтобы точно настроить ответ. Советы см. в статье "Что можно сделать с помощью GitHub Copilot в моем пространстве кода?

Перед развертыванием этих изменений необходимо создать пакет миграции.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

5. Создание схемы базы данных

С базой данных SQL, защищённой виртуальной сетью, проще всего запустить миграцию баз данных в сеансе SSH с контейнером службы приложений. Однако контейнеры Службы приложений Linux не имеют пакета SDK для .NET, поэтому самый простой способ выполнить миграцию базы данных — отправить автономный пакет миграций.

  1. Восстановите ресурсы Linux и сгенерируйте набор миграций для вашего проекта с помощью следующих команд:

    dotnet restore --runtime linux-x64
    dotnet ef migrations bundle --runtime linux-x64 -o migrationsbundle
    

    Совет

    Пример приложения (см. DotNetCoreSqlDb.csproj) настроен для включения этого файла migrationsbundle. azd package На этапе migrationsbundle будет добавлен в пакет развертывания.

  2. Разверните все изменения с помощью azd up.

    azd up
    
  3. В выходных данных AZD найдите URL-адрес сеанса SSH и перейдите к нему в браузере. Это выглядит следующим образом в выходных данных:

     Open SSH session to App Service container at: <URL>
     
  4. Выполните следующие команды в сеансе SSH:

    cd /home/site/wwwroot
    ./migrationsbundle -- --environment Production
    

    При успешном завершении Служба приложений успешно подключается к базе данных. Помните, что --environment Production соответствует изменениям кода, внесенным в Program.cs.

    Замечание

    После перезапуска приложения могут сохраняться только изменения в файлах в /home. Изменения за пределами /home не сохраняются.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

6. Перейдите к приложению

  1. В выходных данных AZD найдите URL-адрес приложения и перейдите к нему в браузере. URL-адрес выглядит следующим образом в выходных данных AZD:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <URL>
     
  2. Добавьте несколько задач в список.

    Снимок экрана веб-приложения ASP.NET Core с базой данных SQL, запускаемых на платформе Azure, показывающий задачи.

    Поздравляем, вы запускаете веб-приложение в Служба приложений Azure с безопасным подключением к База данных SQL Azure.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

7. Потоковая передача журналов диагностики

Служба приложений Azure могут записывать журналы консоли для диагностики проблем с приложением. Для удобства шаблон AZD уже включено ведение журнала в локальной файловой системе и отправка журналов в рабочую область Log Analytics.

Пример приложения включает стандартные инструкции ведения журнала для демонстрации этой возможности, как показано в следующем фрагменте кода:

    return RedirectToAction(nameof(Index));
}

private async Task<TodosIndexViewModel> BuildIndexViewModel(Todo? newTodo = null)
{
    _logger.LogInformation("Data from database.");
    return new TodosIndexViewModel
    {
        NewTodo = newTodo ?? new Todo(),

В выходных данных AZD найдите ссылку для потоковой передачи журналов в Службе приложений и перейдите по ней в браузере. Ссылка выглядит следующим образом в выходных данных AZD:

Stream App Service logs at: <URL>

Дополнительные сведения о входе в приложения .NET в серии Enable Azure Monitor OpenTelemetry для .NET, Node.js, Python и Java приложений.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

8. Очистка ресурсов

Чтобы удалить все Azure ресурсы в текущей среде развертывания, запустите azd down и следуйте инструкциям.

azd down

Устранение неполадок

Представление развертывания портала для База данных SQL Azure отображает состояние конфликта

В зависимости от выбранной подписки и выбранного региона может появиться состояние развертывания для База данных SQL Azure Conflict со следующим сообщением в разделе "Сведения об операции".

Location '<region>' is not accepting creation of new Windows Azure SQL Database servers at this time.

Эта ошибка, скорее всего, вызвана ограничением подписки для выбранного региона. Попробуйте выбрать другой регион для развертывания.

На портале Azure пользовательский интерфейс потока журналов для веб-приложения отображает сетевые ошибки.

Вы можете увидеть эту ошибку:

Unable to open a connection to your app. This may be due to any network security groups or IP restriction rules that you have placed on your app. To use log streaming, please make sure you are able to access your app directly from your current network.

Обычно это временная ошибка при первом запуске приложения. Подождите несколько минут и проверьте еще раз.

Сеанс SSH в браузере отображается SSH CONN CLOSED

Для запуска контейнера Linux потребуется несколько минут. Подождите несколько минут и проверьте еще раз.

На странице потока журнала портала отображаются Connected! журналы, но журналы отсутствуют

После настройки журналов диагностики приложение перезапущено. Возможно, потребуется обновить страницу, чтобы изменения вступили в силу в браузере.

Часто задаваемые вопросы

Сколько стоит такая конфигурация?

Цены на созданные ресурсы приведены следующим образом:

  • План службы приложений создается на уровне Базовый, и его можно масштабировать вверх или вниз. См. цены на Службу приложений.
  • База данных SQL Azure создается в бессерверном слое общего назначения на оборудовании серии Standard с минимальными ядрами. Существует небольшая стоимость и может быть распределена по другим регионам. Вы можете свести к минимуму затраты еще больше, уменьшая максимальный размер или масштабируя его, изменяя уровень обслуживания, уровень вычислений, конфигурацию оборудования, количество ядер, размер базы данных и избыточность зоны. См. сведения о ценах База данных SQL Azure.
  • Экземпляр Azure Managed Redis создается на уровне Balanced B0 с минимальным размером кэша. Существует небольшая стоимость, связанная с этим уровнем. Его можно масштабировать до более высоких уровней производительности для повышения доступности, кластеризации и других функций. См. цены Azure Managed Redis.
  • Плата за виртуальную сеть не взимается, если только вы не настроите дополнительные функциональные возможности, такие как пиринг. См. сведения о ценах Azure Virtual Network.
  • За частную зону DNS взимается небольшая плата. См. сведения о ценах Azure DNS.

Как подключиться к серверу База данных SQL Azure, защищённому внутри виртуальной сети, с использованием других инструментов?

  • Для базового доступа из программы командной строки можно запустить sqlcmd из терминала SSH приложения. Контейнер приложения не предоставляется вместе с sqlcmd, поэтому его необходимо установить вручную. Помните, что установленный клиент не сохраняется во время перезапуска приложения.
  • Чтобы подключиться из клиента SQL Server Management Studio или из Visual Studio, компьютер должен находиться в виртуальной сети. Например, это может быть Azure VM, подключенный к одной из подсетей, или компьютер в локальной сети, который имеет подключение по VPN межсайтовое подключение с виртуальной сетью Azure.

Как разработка локальных приложений работает с GitHub Actions?

Примером можно воспользоваться автоматически созданным файлом рабочего процесса из службы приложений. Каждый git push запускает новый процесс сборки и развертывания. Из локального клона репозитория GitHub вы делаете нужные обновления и отправляете их на GitHub. Например:

git add .
git commit -m "<some-message>"
git push origin main

Как выполнить отладку ошибок во время развертывания GitHub Actions?

Если шаг завершается ошибкой в автогенерируемом в GitHub файле рабочего процесса, попробуйте изменить неудавшуюся команду, чтобы создать более подробный вывод. Например, можно получить больше выходных данных от любой команды dotnet, добавив этот параметр -v. Зафиксируйте и отправьте изменения, чтобы активировать дополнительное развертывание для Службы приложений.

У меня нет разрешений на создание идентичности, назначенной пользователем

См. раздел Настройка развертывания GitHub Actions из Центра развертывания.

Как изменить подключение к базе данных SQL, чтобы использовать управляемое удостоверение вместо этого?

Компонент Service Connector управляет строкой подключения по умолчанию к базе данных SQL с именем defaultConnector и использует SQL аутентификацию. Чтобы заменить его на подключение, использующее управляемое удостоверение, выполните следующие команды в облачной оболочке после замены заполнителей:

az extension add --name serviceconnector-passwordless --upgrade
az sql server update --enable-public-network true
az webapp connection delete sql --connection defaultConnector --resource-group <group-name> --name <app-name>
az webapp connection create sql --connection defaultConnector --resource-group <group-name> --name <app-name> --target-resource-group <group-name> --server <database-server-name> --database <database-name> --client-type dotnet --system-identity --config-connstr true
az sql server update --enable-public-network false

По умолчанию команда az webapp connection create sql --client-type dotnet --system-identity --config-connstr выполняет следующие действия:

  • Назначает вашего пользователя администратором Microsoft Entra ID на сервере SQL баз данных.
  • Создаёт управляемую личность, назначенную системой, и предоставляет доступ к базе данных.
  • Создает строку подключения без пароля под названием AZURE_SQL_CONNECTIONGSTRING, которую приложение уже использует в конце руководства.

Теперь приложение должно иметь подключение к базе данных SQL. Дополнительные сведения см. в разделе Tutorial: подключение к базам данных Azure из службы приложений без секретов с помощью управляемого удостоверения.

Совет

Не хотите включить подключение к общедоступной сети? Вы можете пропустить az sql server update --enable-public-network true и выполнить команды из интегрированной с вашей виртуальной сетью облачной оболочки Azure, если у вас есть назначение роли владелец в вашей подписке.

Чтобы предоставить идентификации необходимый доступ к базе данных, защищённой виртуальной сетью, az webapp connection create sql требуется прямое подключение с аутентификацией Microsoft Entra ID к серверу базы данных. По умолчанию Azure cloud shell не имеет этого доступа к защищенной сети базе данных.

Что можно сделать с GitHub Copilot в моем пространстве кода?

Возможно, вы заметили, что чат GitHub Copilot уже был доступен при создании кодового пространства. Для удобства мы добавим расширение чата GitHub Copilot в определение контейнера (см. раздел .devcontainer/devcontainer.json). Однако вам нужна учетная запись GitHub Copilot (доступна бесплатная пробная версия 30 дней).

Некоторые советы для вас при разговоре с GitHub Copilot:

  • В рамках одного сеанса общения вопросы и ответы развиваются друг из друга, и вы можете изменять свои вопросы, чтобы уточнить получаемый ответ.
  • По умолчанию GitHub Copilot не имеет доступа к файлу в репозитории. Чтобы задать вопросы о файле, сначала откройте файл в редакторе.
  • Для доступа GitHub Copilot ко всем файлам в репозитории при подготовке ответов начните вопрос с @workspace. Дополнительные сведения см. в разделе Use the @workspace agent.
  • В сеансе чата GitHub Copilot может предлагать изменения и (с @workspace) даже указывать, где их вносить, но самостоятельно изменения вносить нельзя. Вам нужно добавить предлагаемые изменения и проверить их.

Вот некоторые другие вещи, которые вы можете сказать, чтобы точно настроить ответ, который вы получаете:

  • Я хочу, чтобы этот код выполнялся только в рабочем режиме.
  • Я хочу, чтобы этот код выполнялся только в Служба приложений Azure, а не локально.
  • Параметр --output-path, кажется, неподдерживаемый.

Перейдите к следующему руководству, чтобы узнать, как защитить приложение с помощью личного домена и сертификата.

Также ознакомьтесь с другими ресурсами: