Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Контейнеры приложений Azure является единственным вариантом размещения, поддерживающим автомасштабирование на основе событий (масштабирование до нуля) для Устойчивые функции при использовании поставщика хранилища Microsoft SQL (MSSQL. Если вы используете другую серверную часть хранилища, необходимо задать минимальное число реплик больше нуля.
Tip
Для новых проектов рекомендуется использовать планировщик задач Durable Task Scheduler, который является рекомендуемым серверным сервером, управляемым Azure для устойчивых рабочих процессов. В этом руководстве описывается серверная часть MSSQL.
Дополнительные сведения о выполнении функций Функции Azure в Контейнеры приложений Azure см. в размещении Функции Azure в Контейнеры приложений Azure.
В этой статье вы узнаете, как:
- Создайте образ Docker из локального проекта устойчивых функций.
- Создайте приложение контейнера Azure и связанные ресурсы.
- Разверните образ в приложении контейнера Azure и настройте проверку подлинности.
Необходимые условия
- установлен Visual Studio Code.
- Пакет SDK для .NET 8.0.
- Docker и Идентификатор Docker
- Azure CLIверсии 2.47 или более поздней.
- Основные инструменты Функций Azure
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно.
- Средство тестирования HTTP, которое обеспечивает безопасность данных. Дополнительные сведения см. в статье Инструменты тестирования HTTP.
Создание локального проекта Устойчивые функции
В этом руководстве предполагается, что у вас есть рабочий .NET изолированный проект Устойчивые функции, настроенный с помощью серверной части MSSQL. Если у вас еще нет одного, следуйте краткому руководству ПО MSSQL , чтобы создать и проверить его локально, а затем вернитесь сюда.
Прежде чем продолжить, убедитесь, что:
- Проект предназначен для .NET 8.0 с изолированной рабочей моделью
- Поставщик хранилища MSSQL настроен в
host.json - Приложение успешно работает с
func start
Добавление файлов, связанных с Docker
Создайте Dockerfile в корневом каталоге проекта, описывающее минимальную необходимую среду для запуска приложения-функции в контейнере.
В корневом каталоге проекта создайте файл с именем Dockerfile.
Скопируйте и вставьте следующее содержимое в Dockerfile.
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS installer-env COPY . /src/dotnet-function-app RUN cd /src/dotnet-function-app && \ mkdir -p /home/site/wwwroot && \ dotnet publish *.csproj --output /home/site/wwwroot # To enable ssh & remote debugging on app service change the base image to the one below # FROM mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0-appservice FROM mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0 ENV AzureWebJobsScriptRoot=/home/site/wwwroot \ AzureFunctionsJobHost__Logging__Console__IsEnabled=true COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]Сохраните файл.
Добавьте dockerignore-файл со следующим содержимым:
local.settings.jsonСохраните файл dockerignore .
Создание образа контейнера
Выполните сборку образа Docker. Полный список поддерживаемых базовых образов функций Azure в базе функций Azure от Майкрософт | Центр Docker
Запустите демон Docker.
Войдите в Docker с помощью
docker loginкоманды.При появлении запроса войдите с помощью имени пользователя и пароля. Сообщение "Вход выполнен успешно" подтверждает, что вы успешно авторизовались в системе.
Перейдите в корневой каталог проекта.
Выполните следующую команду, чтобы создать образ, заменив
<DOCKER_ID>на ваш идентификатор учетной записи Docker Hub.dockerId=<DOCKER_ID> imageName=<IMAGE_NAME> imageVersion=v1.0.0 docker build --tag $dockerId/$imageName:$imageVersion .Note
Если вы работаете на компьютере Mac серии M, используйте
--platform linux/amd64вместо этого.Отправьте образ в Docker:
docker push $dockerId/$imageName:$imageVersionВ зависимости от скорости сети начальная отправка образа может занять несколько минут. Пока вы ждете, перейдите к следующему разделу.
Создание ресурсов Azure для Устойчивые функции в приложениях контейнеров
Создайте ресурсы Azure, необходимые для запуска устойчивых функций в приложении контейнера.
- Группа ресурсов Azure: Группа ресурсов, содержащая все созданные ресурсы.
- Среда приложения контейнера Azure: Среда, в которой размещено приложение контейнера.
- Azure Container App: Образ, содержащий приложение на основе Устойчивые функции, развертывается на этом приложении.
- Учетная запись хранения Azure: Требуется приложению-функции для хранения данных, связанных с приложениями, таких как код приложения.
Начальная настройка
В новом терминале войдите в подписку Azure:
az login az account set -s <subscription_name>Выполните необходимые команды, чтобы настроить расширение ИНТЕРФЕЙСА командной строки для приложений контейнеров Azure:
az upgrade az extension add --name containerapp --upgrade az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights
Создание приложения контейнера и связанных ресурсов
Профиль рабочей нагрузки определяет объем вычислительных ресурсов и ресурсов памяти, доступных для приложений-контейнеров, развернутых в среде. Создайте профиль рабочей нагрузки потребления для поддержки масштабирования до нуля и оплаты за использование.
Задайте переменные среды.
location=<REGION> resourceGroup=<RESOURCE_GROUP_NAME> storage=<STORAGE_NAME> containerAppEnv=<CONTAINER_APP_ENVIRONMNET_NAME> functionApp=<APP_NAME> vnet=<VNET_NAME>Создайте группу ресурсов.
az group create --name $resourceGroup --location $locationСоздайте среду приложения контейнера.
az containerapp env create \ --enable-workload-profiles \ --resource-group $resourceGroup \ --name $containerAppEnv \ --location $location \Создайте приложение-контейнер на основе образа устойчивых функций.
az containerapp create --resource-group $resourceGroup \ --name $functionApp \ --environment $containerAppEnv \ --image $dockerId/$imageName:$imageVersion \ --ingress external \ --kind functionapp \ --query properties.outputs.fqdnЗапишите URL-адрес приложения, который должен выглядеть примерно так
https://<APP_NAME>.<ENVIRONMENT_IDENTIFIER>.<REGION>.azurecontainerapps.io.
Создание баз данных
Создайте учетную запись хранения Azure, необходимую приложением-функцией.
az storage account create --name $storage --location $location --resource-group $resourceGroup --sku Standard_LRSНа портале Azure создайте базу данных SQL Azure для сохранения сведений о состоянии. Во время создания:
- Включите Azure службы и ресурсы для доступа к этому серверу (в Networking). Для рабочей среды используйте более строгие ограничения брандмауэра или конфигурации виртуальной сети .
- Задайте для параметра сортировки базы данных (в разделе "Дополнительные параметры") значение
Latin1_General_100_BIN2_UTF8.
Настройка проверки подлинности на основе удостоверений
Управляемые удостоверения обеспечивают безопасность приложения, устраняя секреты из приложения, например учетные данные в строках подключения. Хотя вы можете выбрать управляемое удостоверение, назначаемое системой и назначаемое пользователем, рекомендуется использовать управляемое удостоверение, назначаемое пользователем, так как оно не привязано к жизненному циклу приложения.
В этом разделе вы настраиваете управляемую идентичность, назначенную пользователем для служба хранилища Azure.
Задайте переменные среды.
subscription=<SUBSCRIPTION_ID> identity=<IDENTITY_NAME>Создать ресурс управляемой идентичности.
echo "Creating $identity" az identity create -g $resourceGroup -n $identity --location "$location"Назначьте идентификатор пользователя приложению-контейнеру.
echo "Assigning $identity to app" az containerapp identity assign --resource-group $resourceGroup --name $functionApp --user-assigned $identityЗадайте область разрешений управления доступом на основе ролей (RBAC).
scope="/subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Storage/storageAccounts/$storage"Получите удостоверение
clientIdпользователя.# Get the identity's ClientId clientId=$(az identity show --name $identity --resource-group $resourceGroup --query 'clientId' --output tsv)Назначьте роль владельца данных BLOB-объектов хранилища для доступа к учетной записи хранения.
echo "Assign Storage Blob Data Owner role to identity" az role assignment create --assignee "$clientId" --role "Storage Blob Data Owner" --scope "$scope"
Настройка параметров приложения
Note
Проверка подлинности в базе данных MSSQL с помощью управляемого удостоверения не поддерживается при размещении приложения Устойчивые функции в Контейнеры приложений Azure. В этом руководстве сейчас проверка подлинности осуществляется с помощью строк подключения.
В ресурсе базы данных SQL на портале Azure перейдите кстрокам подключения>, чтобы найти строку подключения.
Строка подключения должна иметь формат, аналогичный следующему:
dbserver=<SQL_SERVER_NAME> sqlDB=<SQL_DB_NAME> username=<DB_USER_LOGIN> password=<DB_USER_PASSWORD> connStr="Server=tcp:$dbserver.database.windows.net,1433;Initial Catalog=$sqlDB;Persist Security Info=False;User ID=$username;Password=$password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"Если вы забыли пароль на предыдущем этапе создания базы данных, его можно сбросить на ресурсе SQL Server.
Сохраните строку подключения базы данных SQL в виде секрета , называемого sqldbconnection в приложении-контейнере.
az containerapp secret set \ --resource-group $resourceGroup \ --name $functionApp \ --secrets sqldbconnection=$connStrДобавьте в приложение следующие параметры:
az containerapp update \ -n $functionApp \ -g $resourceGroup \ --set-env-vars SQLDB_Connection=secretref:sqldbconnection \ AzureWebJobsStorage__accountName=$storage \ AzureWebJobsStorage__clientId=$clientId \ AzureWebJobsStorage__credential=managedidentity \ FUNCTIONS_WORKER_RUNTIME=dotnet-isolated
Тестирование развернутого приложения Устойчивые функции
Используйте средство тестирования HTTP для отправки
POSTзапроса в конечную точку триггера HTTP, которая должна быть похожа на:https://<APP NAME>.<ENVIRONMENT_IDENTIFIER>.<REGION>.azurecontainerapps.io/api/DurableFunctionsOrchestrationCSharp1_HttpStartОтвет — это начальный результат функции HTTP, который дает вам знать, что оркестрация устойчивых функций успешно запущена. Хотя ответ содержит несколько полезных URL-адресов, он пока не отображает конечный результат оркестрации.
Скопируйте или вставьте значение
statusQueryGetUriURL-адреса в адресную строку браузера и выполните его. Кроме того, можно продолжать использовать средство тестирования HTTP для выдачиGETзапроса.Запрос к экземпляру оркестрации для проверки статуса. Вы должны увидеть, что экземпляр завершился и увидеть выходные данные или результаты приложения Устойчивые функции.
{ "name":"HelloCities", "instanceId":"7f99f9474a6641438e5c7169b7ecb3f2", "runtimeStatus":"Completed", "input":null, "customStatus":null, "output":"Hello, Tokyo! Hello, London! Hello, Seattle!", "createdTime":"2023-01-31T18:48:49Z", "lastUpdatedTime":"2023-01-31T18:48:56Z" }
Дальнейшие действия
- Размещение функций Azure в контейнерных приложениях Azure
- Архитектура, конфигурация и поведение рабочей нагрузки поставщика хранилища MSSQL
- Durable Task Scheduler — рекомендуемая серверная часть, управляемая Azure для новых проектов устойчивых рабочих процессов
- Общие сведения о устойчивых функциях