Учебник. Развертывание приложения ASP.NET Core с подключением к Базе данных SQL Azure в Службе приложений Azure
В этом руководстве вы узнаете, как развернуть управляемое данными приложение ASP.NET Core для приложение Azure Service и подключиться к База данных SQL Azure. Вы также развернете Кэш Azure для Redis, чтобы включить код кэширования в приложении. Служба приложений Azure — это высокомасштабируемая веб-служба с поддержкой самостоятельного исправления, которая позволяет легко развертывать приложения в Windows или Linux. Хотя в этом руководстве используется приложение ASP.NET Core 8.0, процесс совпадает с другими версиями ASP.NET Core.
В этом руководстве описано следующее:
- Создание безопасной по умолчанию архитектуры кэша Служба приложений, База данных SQL и Redis
- Защита секретов подключения с помощью управляемого удостоверения и ссылок Key Vault.
- Разверните пример приложения ASP.NET Core, чтобы Служба приложений из репозитория GitHub.
- Acces Служба приложений строка подключения и параметры приложения в коде приложения.
- Создание обновлений и повторное развертывание кода приложения.
- Создайте схему базы данных путем отправки пакета миграций.
- Потоковая передача журналов диагностики из Azure.
- Управление приложением в портал Azure.
- Подготовьте ту же архитектуру и разверните с помощью Интерфейса командной строки разработчика Azure.
- Оптимизируйте рабочий процесс разработки с помощью GitHub Codespaces и GitHub Copilot.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, ее можно создать бесплатно.
- Учетная запись GitHub. Вы также можете получить его бесплатно.
- Знания о разработке ASP.NET Core.
- (Необязательно) Чтобы попробовать GitHub Copilot, учетная запись GitHub Copilot. Доступна 30-дневная бесплатная пробная версия.
- Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, ее можно создать бесплатно.
- Установлен интерфейс командной строки разработчика Azure. Вы можете выполнить действия с помощью Azure Cloud Shell , так как он уже установлен с помощью Интерфейса командной строки разработчика Azure.
- Знания о разработке ASP.NET Core.
- (Необязательно) Чтобы попробовать GitHub Copilot, учетная запись GitHub Copilot. Доступна 30-дневная бесплатная пробная версия.
Перейти к концу
Вы можете быстро развернуть пример приложения в этом руководстве и увидеть его выполнение в Azure. Просто выполните следующие команды в Azure Cloud Shell и следуйте инструкциям в командной строке:
dotnet tool install --global dotnet-ef
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. В новом окне браузера:
- Войдите в свою учетную запись GitHub.
- Перейдите к https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore/fork.
- Отмена выбора только для копирования основной ветви. Вы хотите, чтобы все ветви.
- Щелкните Создать вилку.
Шаг 2. В вилке GitHub:
- Выберите основную начальную>ветвь без инфраструктуры для начальной ветви. Эта ветвь содержит только пример проекта и не содержит файлов или конфигурации, связанных с Azure.
- Выберите пространство кода "Создать код>" на начальном экране без инфраструктуры. Пространство кода занимает несколько минут, чтобы настроить.
Шаг 3. В терминале пространства кода:
- Запуск миграции базы данных с
dotnet ef database update
помощью . - Запустите приложение, выполнив команду
dotnet run
. - Когда появится уведомление
Your application running on port 5093 is available.
, нажмите кнопку "Открыть в браузере". Пример приложения должен отображаться на новой вкладке браузера. Чтобы остановить приложение, введитеCtrl
+C
.
Совет
Вы можете попросить GitHub Copilot об этом репозитории. Например:
- @workspace Что делает этот проект?
- @workspace Что делает папка devcontainer?
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
2. Создание Служба приложений, базы данных и кэша
В этом шаге вы создадите ресурсы Azure. Действия, используемые в этом руководстве, создают набор защищенных по умолчанию ресурсов, которые включают Служба приложений, База данных SQL Azure и кэш Azure. В процессе создания вы укажете следующее:
- Имя веб-приложения. Он используется в качестве части DNS-имени приложения в виде
https://<app-name>-<hash>.<region>.azurewebsites.net
. - Регион для физического запуска приложения. Он также используется в качестве части DNS-имени приложения.
- Стек среды выполнения для приложения. Здесь вы выбираете версию .NET, используемую для вашего приложения.
- План размещения для приложения. Это ценовая категория, которая включает набор функций и емкость масштабирования для вашего приложения.
- Группа ресурсов для приложения. Группа ресурсов позволяет группировать (в логическом контейнере) все ресурсы Azure, необходимые для приложения.
Войдите на портал Azure и выполните следующие действия, чтобы создать ресурсы Службы приложений Azure.
Шаг 1. В портал Azure:
- Введите "веб-приложение база данных" в строке поиска в верхней части портала Azure.
- Выберите элемент с меткой Веб-приложение и база данных под заголовком Marketplace. Вы также можете перейти напрямую к мастеру создания.
Шаг 2. На странице "Создание веб-приложения + база данных " заполните форму следующим образом.
- Группа ресурсов: выберите "Создать" и используйте имя msdocs-core-sql-tutorial.
- Регион: любой регион Azure рядом с вами.
- Имя: msdocs-core-sql-XYZ, где XYZ является тремя случайными символами. Это имя должно быть уникальным в Azure.
- Стек среды выполнения: .NET 8 (LTS).
- Подсистема: SQLAzure. База данных SQL Azure — это полностью управляемая платформа как служба (PaaS), которая всегда работает в последней стабильной версии SQL Server.
- Добавьте Кэш Azure для Redis?: Да.
- План размещения: базовый. Когда вы будете готовы, вы можете масштабировать до рабочей ценовой категории.
- Выберите Review + create (Просмотреть и создать).
- После завершения проверки щелкните Создать.
Шаг 3. Развертывание занимает несколько минут. После завершения развертывания нажмите кнопку Перейти к ресурсу. Вы перейдете непосредственно в приложение Службы приложений, но будут созданы следующие ресурсы:
- Группа ресурсов: контейнер для всех созданных ресурсов.
- Служба приложений план. Определяет вычислительные ресурсы для Служба приложений. Создается план Linux на уровне Базовый.
- Служба приложений. Представляет приложение и запускается в плане Служба приложений.
- Виртуальная сеть: интегрированная с приложением Служба приложений и изолирует внутренний сетевой трафик.
- Частные конечные точки: доступ к конечным точкам для хранилища ключей, сервера базы данных и кэша Redis в виртуальной сети.
- Сетевые интерфейсы: представляет частные IP-адреса, по одному для каждой из частных конечных точек.
- сервер База данных SQL Azure: доступен только за частной конечной точкой.
- База данных SQL Azure: база данных и пользователь создаются на сервере.
- Кэш Azure для Redis: доступен только от частной конечной точки.
- Хранилище ключей: доступно только из своей частной конечной точки. Используется для управления секретами для приложения Служба приложений.
- Частная зона DNS зонах: включите разрешение DNS хранилища ключей, сервера базы данных и кэш Redis в виртуальной сети.
3. Безопасные секреты подключения
Мастер создания создал строку подключения для вас уже как строка подключения .NET и параметры приложения. Однако рекомендуется сохранить секреты из Служба приложений полностью. Вы переместите секреты в хранилище ключей и измените параметры приложения на ссылки Key Vault с помощью соединителей служб.
Совет
Чтобы использовать проверку подлинности без пароля, см. Разделы справки изменить подключение База данных SQL вместо использования управляемого удостоверения?
Шаг 1. На странице Служба приложений:
- В меню слева выберите "Параметры > переменных > среды" строки подключения.
- Выберите AZURE_SQL_CONNECTIONSTRING.
- В поле "Добавление и изменение" строка подключения найдите часть Password= в конце строки.
- Скопируйте строку пароля после password= для последующего использования. Это строка подключения позволяет подключаться к базе данных SQL, защищенной за частной конечной точкой. Пароль сохраняется непосредственно в приложении Служба приложений, что не является лучшим. Аналогичным образом кэш Redis строка подключения на вкладке "Параметры приложения" содержит секрет. Вы измените это.
Шаг 2. Создание хранилища ключей для безопасного управления секретами.
- В верхней строке поиска введите "хранилище ключей", а затем выберите Marketplace>Key Vault.
- В группе ресурсов выберите msdocs-core-sql-tutorial.
- В имени хранилища ключей введите имя, состоящее только из букв и чисел.
- В регионе задайте для него образец расположения в качестве группы ресурсов.
Шаг 3.
- Перейдите на вкладку Сеть.
- Отмена выбора включения общедоступного доступа.
- Выберите "Создать частную конечную точку".
- В группе ресурсов выберите msdocs-core-sql-tutorial.
- В имени хранилища ключей введите имя, состоящее только из букв и чисел.
- В регионе задайте для него образец расположения в качестве группы ресурсов.
- В диалоговом окне в расположении выберите то же расположение, что и приложение Служба приложений.
- В группе ресурсов выберите msdocs-core-sql-tutorial.
- В поле Name введите msdocs-core-sql-XYZVvaultEndpoint.
- В виртуальной сети выберите msdocs-core-sql-XYZVnet.
- В подсети msdocs-core-sql-XYZSubnet.
- Нажмите ОК.
- Выберите Проверить и создать, а затем выберите Создать. Дождитесь завершения развертывания хранилища ключей. Должно появиться сообщение "Развертывание завершено".
Шаг 4.
- В верхней строке поиска введите msdocs-core-sql, а затем Служба приложений ресурс msdocs-core-sql-XYZ.
- На странице Служба приложений в меню слева выберите "Параметры > соединителя службы". Существует уже два соединителя, созданные мастером создания приложения.
- Установите флажок рядом с соединителем База данных SQL, а затем нажмите кнопку "Изменить".
- Выберите вкладку Аутентификация.
- Вставьте пароль, скопированный ранее.
- Выберите "Сохранить секрет" в Key Vault.
- В разделе "Подключение к Key Vault" выберите "Создать". Диалоговое окно создания подключения открывается поверх диалогового окна редактирования.
Шаг 5. В диалоговом окне создания подключения для подключения Key Vault:
- В Key Vault выберите созданное ранее хранилище ключей.
- Выберите Review + Create (Просмотреть и создать). Вы увидите, что управляемое удостоверение, назначаемое системой, имеет значение Selected.
- После завершения проверки нажмите кнопку "Создать".
Шаг 6. Вы снова в диалоговом окне редактирования для defaultConnector.
- На вкладке "Проверка подлинности" дождитесь создания соединителя хранилища ключей. По завершении раскрывающийся список подключения Key Vault автоматически выбирает его.
- Выберите Далее: сеть.
- Выберите " Настроить правила брандмауэра", чтобы включить доступ к целевой службе. Мастер создания приложения уже защитил базу данных SQL с помощью частной конечной точки.
- Выберите Сохранить. Подождите, пока появится уведомление об успешном обновлении.
Шаг 7. На странице соединителей служб:
- Установите флажок рядом с соединителем Cache for Redis, а затем нажмите кнопку "Изменить".
- Выберите вкладку Аутентификация.
- Выберите "Сохранить секрет" в Key Vault.
- В разделе "Подключение к Key Vault" выберите созданное хранилище ключей.
- Выберите Далее: сеть.
- Выберите " Настроить правила брандмауэра", чтобы включить доступ к целевой службе. Мастер создания приложения уже защитил базу данных SQL с помощью частной конечной точки.
- Выберите Сохранить. Подождите, пока появится уведомление об успешном обновлении.
Шаг 8. Чтобы проверить изменения, выполните следующее.
- В меню слева снова выберите строки подключения переменных > среды.
- Рядом с AZURE_SQL_CONNECTIONSTRING выберите "Показать значение". Значение должно быть
@Microsoft.KeyVault(...)
. Это означает, что это ссылка на хранилище ключей, так как секрет теперь управляется в хранилище ключей. - Чтобы проверить строка подключения Redis, перейдите на вкладку "Параметры приложения". Рядом с AZURE_REDIS_CONNECTIONSTRING выберите "Показать значение". Значение должно быть
@Microsoft.KeyVault(...)
слишком.
4. Развертывание примера кода
На этом шаге вы настроите развертывание GitHub с помощью GitHub Actions. Это всего лишь один из множества способов развертывания в Службе приложений, но это также отличный способ обеспечения непрерывной интеграции в процессе развертывания. По умолчанию каждый git push
из репозитория GitHub запускает действие сборки и развертывания.
Шаг 1. В меню слева выберите центр развертывания>.
Шаг 2. На странице Центра развертывания:
- В поле Источник выберите GitHub. По умолчанию в качестве поставщика сборки выбрано GitHub Actions.
- Войдите в свою учетную запись GitHub и следуйте инструкциям по авторизации Azure.
- В поле Организация выберите свою учетную запись.
- В репозитории выберите msdocs-app-service-sqldb-dotnetcore.
- В ветви выберите starter-no-infra. Это та же ветвь, в которую вы работали с примером приложения, без файлов или конфигурации, связанных с Azure.
- Для типа проверки подлинности выберите удостоверение, назначаемое пользователем.
- В меню сверху выберите Сохранить.
Служба приложений фиксирует файл рабочего процесса в выбранном репозитории GitHub в каталоге
.github/workflows
. По умолчанию центр развертывания создает назначаемое пользователем удостоверение для рабочего процесса для проверки подлинности с помощью Microsoft Entra (проверка подлинности OIDC). Дополнительные сведения о вариантах проверки подлинности см. в статье "Развертывание в Служба приложений с помощью GitHub Actions".
Шаг 3. Вернитесь в пространство кода GitHub примера вилки, выполните команду git pull origin starter-no-infra
.
Это извлекает только что зафиксированный файл рабочего процесса в пространство кода.
Шаг 4 (вариант 1: с GitHub Copilot):
- Запустите новый сеанс чата, выбрав представление чата, а затем выберите +.
- Спросите: "@workspace Как приложение подключается к базе данных и кэшу?". Copilot может дать вам некоторое объяснение
MyDatabaseContext
о классе и его настройке в Program.cs. - Спросите: "В рабочем режиме приложение будет использовать строка подключения с именем AZURE_SQL_CONNECTIONSTRING для базы данных и параметра приложения с именем AZURE_REDIS_CONNECTIONSTRING*". Copilot может дать вам предложение по коду, аналогичное варианту 2: без шагов GitHub Copilot ниже и даже сообщить вам внести изменения в файл Program.cs.
- Откройте Program.cs в обозревателе и добавьте предложение кода. GitHub Copilot не дает вам одинаковый ответ каждый раз, и это не всегда правильно. Вам может потребоваться задать дополнительные вопросы, чтобы точно настроить ответ. Советы см. в статье "Что можно сделать с помощью GitHub Copilot в моем пространстве кода?".
Шаг 4 (вариант 2: без GitHub Copilot):
- Откройте Program.cs в обозревателе.
- Найдите закомментируемый код (строки 12–21) и раскомментируйте его.
Этот код подключается к базе данных с помощью
AZURE_SQL_CONNECTIONSTRING
кэша Redis и подключается к нему с помощью параметраAZURE_REDIS_CONNECTIONSTRING
приложения.
Шаг 5 (вариант 1: с GitHub Copilot):
- Откройте github/workflows/starter-no-infra_msdocs-core-sql-XYZ в обозревателе. Этот файл был создан мастером создания Служба приложений.
dotnet publish
Выделите шаг и выберите .- Спросите Copilot: "Установите dotnet ef, а затем создайте пакет миграций в той же выходной папке".
- Если предложение приемлемо, нажмите кнопку "Принять". GitHub Copilot не дает вам одинаковый ответ каждый раз, и это не всегда правильно. Вам может потребоваться задать дополнительные вопросы, чтобы точно настроить ответ. Советы см. в статье "Что можно сделать с помощью GitHub Copilot в моем пространстве кода?".
Шаг 5 (вариант 2: без GitHub Copilot):
- Откройте github/workflows/starter-no-infra_msdocs-core-sql-XYZ в обозревателе. Этот файл был создан мастером создания Служба приложений.
- На шаге
dotnet publish
добавьте шаг, чтобы установить средство Entity Framework Core с помощью командыdotnet tool install -g dotnet-ef --version 8.*
. - На новом шаге добавьте еще один шаг, чтобы создать пакет миграции базы данных в пакете развертывания:
dotnet ef migrations bundle --runtime linux-x64 -o ${{env.DOTNET_ROOT}}/myapp/migrationsbundle
Пакет миграции — это автономный исполняемый файл, который можно запустить в рабочей среде, не требуя пакета SDK для .NET. Контейнер linux Служба приложений имеет только среду выполнения .NET, а не пакет SDK для .NET.
Шаг 6.
- Выберите расширение Система управления версиями.
- В текстовом поле введите сообщение фиксации, например
Configure Azure database and cache connections
. Кроме того, выберите и позвольте GitHub Copilot создать сообщение о фиксации. - Нажмите кнопку "Зафиксировать", а затем подтвердите значение "Да".
- Нажмите кнопку "Синхронизировать изменения 1", а затем нажмите кнопку "ОК".
Шаг 7. Назад на странице Центра развертывания в портал Azure:
- Перейдите на вкладку "Журналы" , а затем нажмите кнопку "Обновить ", чтобы увидеть новое выполнение развертывания.
- В элементе журнала для запуска развертывания выберите запись "Сборка и развертывание журналов " с последней меткой времени.
Шаг 8. Вы перейдете в репозиторий GitHub и увидите, что действие GitHub выполняется. Файл рабочего процесса определяет два отдельных этапа: сборку и развертывание. Дождитесь запуска GitHub, чтобы отобразить состояние успешности. Это занимает около 5 минут.
5. Создание схемы базы данных
С помощью База данных SQL, защищенной виртуальной сетью, проще всего запустить миграцию баз данных dotnet в сеансе SSH с контейнером Служба приложений.
Шаг 1. Вернитесь на страницу Служба приложений в меню слева выберите SSH средств>разработки, а затем нажмите кнопку "Перейти".
Шаг 2. В терминале SSH:
- Запустите
cd /home/site/wwwroot
. Вот все развернутые файлы. - Запустите пакет миграции, созданный рабочим процессом GitHub, с помощью команды
./migrationsbundle -- --environment Production
. При успешном завершении Служба приложений успешно подключается к База данных SQL. Помните, что соответствует изменениям кода,--environment Production
внесенным в Program.cs.
В сеансе SSH только изменения в файлах могут /home
сохраняться после перезапуска приложения. Изменения за пределами /home
не сохраняются.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
6. Перейдите к приложению
Шаг 1. На странице Служба приложений:
- В меню слева выберите Обзор.
- Выберите URL-адрес своего приложения.
Шаг 2. Добавление нескольких задач в список. Поздравляем, вы работаете с безопасным приложением на основе данных ASP.NET Core в службе приложение Azure.
Совет
Пример приложения реализует шаблон кэша в сторону . Когда вы посещаете представление данных во второй раз или перезагрузите ту же страницу после внесения изменений данных, время обработки на веб-странице показывает гораздо быстрее, так как загружает данные из кэша вместо базы данных.
7. Потоковая передача журналов диагностики
Служба приложений Azure захватывает все сообщения, выводимые на консоль, чтобы помочь в диагностике проблем приложения. Пример приложения выводит сообщения журнала консоли в каждой из своих конечных точек для демонстрации этой возможности.
Шаг 1. На странице Служба приложений:
- В меню слева выберите "Мониторинг> Служба приложений журналы.
- В разделе "Ведение журнала приложений" выберите "Файловая система", а затем нажмите кнопку "Сохранить".
Шаг 2. В меню слева выберите поток журналов. Вы увидите журналы для своего приложения, включая журналы платформы и журналы из контейнера.
8. Очистка ресурсов
По завершении работы можно удалить все ресурсы из вашей подписки Azure, удалив соответствующую группу ресурсов.
Шаг 1. В строке поиска в верхней части портал Azure:
- Введите имя группы ресурсов.
- Выберите группу ресурсов.
Шаг 2. На странице группы ресурсов выберите "Удалить группу ресурсов".
Шаг 3.
- Введите имя группы ресурсов для подтверждения удаления.
- Выберите команду Удалить.
2. Создание ресурсов Azure и развертывание примера приложения
На этом шаге вы создадите ресурсы Azure и развернете пример приложения для Служба приложений в Linux. Действия, используемые в этом руководстве, создают набор защищенных ресурсов по умолчанию, включая Служба приложений, База данных SQL Azure и Кэш Azure для Redis.
Контейнер разработки уже имеет интерфейс командной строки разработчика Azure (AZD).
Выполните команду
azd init
из корневого каталога репозитория.azd init --template dotnet-app-service-sqldb-infra
При появлении запроса укажите следующие ответы:
Вопрос Ответ Текущий каталог не пуст. Вы хотите инициализировать проект здесь в каталоге<>? Y Что вы хотите сделать с этими файлами? Сохранение существующих файлов без изменений Введите новое имя среды Введите уникальное имя. Шаблон AZD использует это имя как часть DNS-имени веб-приложения в Azure ( <app-name>-<hash>.azurewebsites.net
). Разрешены буквенно-цифровые символы и дефисы.Войдите в Azure, выполнив
azd auth login
команду и выполнив следующую команду:azd auth login
Создайте необходимые ресурсы Azure и разверните код приложения с
azd up
помощью команды. Следуйте запросу, чтобы выбрать нужную подписку и расположение для ресурсов Azure.azd up
Выполнение
azd up
команды занимает около 15 минут (кэш Redis занимает больше всего времени). Он также компилирует и развертывает код приложения, но вы измените код позже, чтобы работать с Служба приложений. Во время выполнения команда предоставляет сообщения о процессе подготовки и развертывания, включая ссылку на развертывание в Azure. По завершении команда также отображает ссылку на приложение развертывания.Этот шаблон AZD содержит файлы (azure.yaml и инфракрасный каталог), создающие безопасную архитектуру по умолчанию со следующими ресурсами Azure:
- Группа ресурсов: контейнер для всех созданных ресурсов.
- Служба приложений план. Определяет вычислительные ресурсы для Служба приложений. Создается план Linux на уровне Базовый.
- Служба приложений. Представляет приложение и запускается в плане Служба приложений.
- Виртуальная сеть: интегрированная с приложением Служба приложений и изолирует внутренний сетевой трафик.
- Частные конечные точки: доступ к конечным точкам для хранилища ключей, сервера базы данных и кэша Redis в виртуальной сети.
- Сетевые интерфейсы: представляет частные IP-адреса, по одному для каждой из частных конечных точек.
- сервер База данных SQL Azure: доступен только за частной конечной точкой.
- База данных SQL Azure: база данных и пользователь создаются на сервере.
- Кэш Azure для Redis: доступен только от частной конечной точки.
- Хранилище ключей: доступно только из своей частной конечной точки. Используется для управления секретами для приложения Служба приложений.
- Частная зона DNS зонах: включите разрешение DNS хранилища ключей, сервера базы данных и кэш Redis в виртуальной сети.
Когда команда завершит создание ресурсов и развертывание кода приложения в первый раз, развернутое пример приложения еще не работает, так как необходимо внести небольшие изменения, чтобы подключиться к базе данных в Azure.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
3. Проверка строка подключения
Совет
База данных SQL по умолчанию строка подключения использует проверку подлинности SQL. Для более безопасной проверки подлинности без пароля см. Разделы справки изменить База данных SQL подключение, чтобы использовать управляемое удостоверение?
Шаблон AZD, который вы используете, создали переменные подключения для вас уже в качестве параметров приложения и выводит их в терминал для удобства. Параметры приложения — это один из способов сохранения секретов подключения из репозитория кода.
В выходных
AZURE_SQL_CONNECTIONSTRING
данных AZD найдите параметры иAZURE_REDIS_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 иAZURE_REDIS_CONNECTIONSTRING
содержит строка подключения в кэш Redis Azure. Позже их необходимо использовать в коде.Для удобства шаблон AZD отображает прямую ссылку на страницу параметров приложения. Найдите ссылку и откройте ее на новой вкладке браузера.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
4. Изменение примера кода и повторное развертывание
В пространстве кода GitHub запустите новый сеанс чата, выбрав представление чата, а затем выберите +.
Спросите: "@workspace Как приложение подключается к базе данных и кэшу?". Copilot может дать вам некоторое объяснение
MyDatabaseContext
о классе и его настройке в Program.cs.Спросите: "В рабочем режиме приложение будет использовать строка подключения с именем AZURE_SQL_CONNECTIONSTRING для базы данных и параметра приложения с именем AZURE_REDIS_CONNECTIONSTRING*". Copilot может дать вам предложение по коду, аналогичное варианту 2: без шагов GitHub Copilot ниже и даже сообщить вам внести изменения в файл Program.cs.
Откройте Program.cs в обозревателе и добавьте предложение кода.
GitHub Copilot не дает вам одинаковый ответ каждый раз, и это не всегда правильно. Вам может потребоваться задать дополнительные вопросы, чтобы точно настроить ответ. Советы см. в статье "Что можно сделать с помощью GitHub Copilot в моем пространстве кода?".
Перед развертыванием этих изменений необходимо создать пакет миграции.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
5. Создание схемы базы данных
С помощью База данных SQL, защищенной виртуальной сетью, проще всего запустить миграцию баз данных в сеансе SSH с контейнером Служба приложений. Однако Служба приложений контейнерах Linux нет пакета SDK для .NET, поэтому самый простой способ выполнить миграцию баз данных — отправить автономный пакет миграций.
Создайте пакет миграций для проекта с помощью следующей команды:
dotnet ef migrations bundle --runtime linux-x64 -o migrationsbundle
Совет
Пример приложения (см . DotNetCoreSqlDb.csproj) настроен для включения этого файла migrationsbundle .
azd package
На этапе миграция будет добавлена в пакет развертывания.Разверните все изменения с
azd up
помощью .azd up
В выходных данных azd найдите URL-адрес сеанса SSH и перейдите к нему в браузере. Это выглядит следующим образом в выходных данных:
Open SSH session to App Service container at: https://<app-name>-<hash>.scm.azurewebsites.net/webssh/host
В терминале SSH выполните следующие команды:
cd /home/site/wwwroot ./migrationsbundle -- --environment Production
При успешном завершении Служба приложений успешно подключается к базе данных. Помните, что соответствует изменениям кода,
--environment Production
внесенным в Program.cs.
В сеансе SSH только изменения в файлах могут /home
сохраняться после перезапуска приложения. Изменения за пределами /home
не сохраняются.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
6. Перейдите к приложению
В выходных данных AZD найдите URL-адрес приложения и перейдите к нему в браузере. URL-адрес выглядит следующим образом в выходных данных AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
Добавьте несколько задач в список.
Поздравляем, вы запускаете веб-приложение в службе приложение Azure с безопасным подключением к База данных SQL Azure.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
7. Потоковая передача журналов диагностики
служба приложение Azure может записывать журналы консоли для диагностики проблем с приложением. Для удобства шаблон AZD уже включил ведение журнала в локальную файловую систему и отправляет журналы в рабочую область Log Analytics.
Пример приложения включает стандартные инструкции ведения журнала для демонстрации этой возможности, как показано в следующем фрагменте кода:
public async Task<IActionResult> Index()
{
var todoItems = await _cache.GetAsync(_TodoItemsCacheKey);
if (todoItems != null)
{
_logger.LogInformation("Data from cache.");
var todoList = JsonConvert.DeserializeObject<List<Todo>>(Encoding.UTF8.GetString(todoItems));
return View(todoList);
}
else
{
_logger.LogInformation("Data from database.");
var todoList = await _context.Todo.ToListAsync();
var serializedTodoList = JsonConvert.SerializeObject(todoList);
await _cache.SetAsync(_TodoItemsCacheKey, Encoding.UTF8.GetBytes(serializedTodoList));
return View(todoList);
}
}
В выходных данных AZD найдите ссылку для потоковой передачи журналов Служба приложений и перейдите к нему в браузере. Ссылка выглядит следующим образом в выходных данных AZD:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Дополнительные сведения о ведении журнала в приложениях .NET в серии см . в разделе "Включить Azure Monitor OpenTelemetry" для приложений .NET, Node.js, Python и Java.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
8. Очистка ресурсов
Чтобы удалить все ресурсы Azure в текущей среде развертывания, выполните azd down
и следуйте инструкциям.
azd down
Устранение неполадок
- Представление развертывания портала для База данных SQL Azure отображает состояние конфликта
- В портал Azure пользовательский интерфейс потока журналов для веб-приложения отображает сетевые ошибки.
- Сеанс SSH в браузере отображается
SSH CONN CLOSED
- На странице потока журнала портала отображаются
Connected!
журналы, но журналы отсутствуют
Представление развертывания портала для База данных 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, защищенному за виртуальной сетью с другими средствами?
- Как осуществляется разработка локальных приложений с использованием GitHub Actions?
- Разделы справки ошибки отладки во время развертывания GitHub Actions?
- Разделы справки изменить подключение База данных SQL, чтобы использовать управляемое удостоверение?
- У меня нет разрешений на создание удостоверения, назначаемого пользователем
- Что можно сделать с помощью GitHub Copilot в моем пространстве кода?
Сколько стоит такая конфигурация?
Цены на созданные ресурсы приведены следующим образом:
- План службы приложений создается на уровне Базовый, и его можно масштабировать вверх или вниз. См. цены на Службу приложений.
- База данных SQL Azure создается в общем назначении, бессерверный уровень на оборудовании серии "Стандартный" с минимальными ядрами. Существует небольшая стоимость и может быть распределена по другим регионам. Вы можете свести к минимуму затраты еще больше, уменьшая максимальный размер или масштабируя его, изменяя уровень обслуживания, уровень вычислений, конфигурацию оборудования, количество ядер, размер базы данных и избыточность зоны. См. страницу Цены на Базу данных SQL Azure.
- Кэш Azure для Redis создается на уровне "Базовый" с минимальным размером кэша. Существует небольшая стоимость, связанная с этим уровнем. Его можно масштабировать до более высоких уровней производительности для повышения доступности, кластеризации и других функций. См. Кэш Azure для Redis цены.
- Плата за виртуальную сеть не взимается, если только вы не настроите дополнительные функциональные возможности, такие как пиринг. См. цены на виртуальные сети Azure.
- За частную зону DNS взимается небольшая плата. См. цены на Azure DNS.
Разделы справки подключиться к серверу База данных SQL Azure, защищенному за виртуальной сетью с другими средствами?
- Для базового доступа из программы командной строки можно запустить
sqlcmd
из терминала SSH приложения. Контейнер приложения не предоставляется вместе сsqlcmd
, поэтому его необходимо установить вручную. Помните, что установленный клиент не сохраняется во время перезапуска приложения. - Чтобы подключиться из клиента SQL Server Management Studio или из Visual Studio, компьютер должен находиться в виртуальной сети. Например, это может быть виртуальная машина Azure, подключенная к одной из подсетей, или компьютер в локальной сети с 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, чтобы использовать управляемое удостоверение?
Строка подключения по умолчанию для базы данных 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 сервера базы данных SQL.
- Создайте управляемое удостоверение, назначаемое системой, и предоставляет ему доступ к базе данных.
- Создает строка подключения без пароля, который
AZURE_SQL_CONNECTIONGSTRING
приложение уже использует в конце руководства.
Теперь приложение должно иметь подключение к базе данных SQL. Дополнительные сведения см. в руководстве по подключению к базам данных Azure из Служба приложений без секретов с помощью управляемого удостоверения.
Совет
Не хотите включить подключение к общедоступной сети? Вы можете пропустить az sql server update --enable-public-network true
, выполнив команды из облачной оболочки Azure, интегрированной с виртуальной сетью , если в подписке назначена роль владельца .
Чтобы предоставить удостоверению необходимый доступ к базе данных, защищенной виртуальной сетью, az webapp connection create sql
требуется прямое подключение с проверкой подлинности идентификатора Записи к серверу базы данных. По умолчанию облачная оболочка Azure не имеет этого доступа к защищенной сети базе данных.
Что можно сделать с помощью 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, кажется, неподдерживаемый.
Связанный контент
Перейдите к следующему руководству, чтобы узнать, как защитить приложение с помощью личного домена и сертификата.
Также ознакомьтесь с другими ресурсами: