Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функции Azure обеспечивают интегрированную поддержку разработки, развертывания и управления контейнерными приложениями-функциями в приложениях контейнеров Azure. Используйте приложения контейнеров Azure для приложений функций, если необходимо выполнять в той же среде, что и другие микрослужбы, API, веб-сайты, рабочие процессы или любые размещенные в контейнере программы. Дополнительные сведения о запуске функций Azure в приложениях контейнеров.
Замечание
Хотя Durable Functions поддерживают нескольких поставщиков хранилищ или другие бэкенды, приложения с автомасштабированием, размещенные в Azure Container Apps, доступны только с использованием бэкенда Microsoft SQL (MSSQL). Если используется другая серверная часть, необходимо задать минимальное число реплик больше нуля.
В этой статье вы узнаете, как:
- Создайте образ Docker из локального проекта устойчивых функций.
- Создайте приложение контейнера Azure и связанные ресурсы.
- Разверните образ в приложении контейнера Azure и настройте проверку подлинности.
Предпосылки
- Visual Studio Code установлен.
- Пакет SDK для .NET 8.0.
- Docker и Идентификатор Docker
- Azure CLIверсии 2.47 или более поздней.
- Основные инструменты Функций Azure
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Средство тестирования HTTP, которое обеспечивает безопасность данных. Дополнительные сведения см. в статье Инструменты тестирования HTTP.
Создание локального проекта Durable Functions
В Visual Studio Code создайте проект изолированных устойчивых функций .NET , настроенный для использования серверной части MSSQL.
Протестируйте приложение локально и вернитесь в эту статью.
Добавление файлов, связанных с 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 .Замечание
Если вы работаете на компьютере Mac серии M, используйте
--platform linux/amd64вместо этого.Отправьте образ в Docker:
docker push $dockerId/$imageName:$imageVersionВ зависимости от скорости сети начальная отправка образа может занять несколько минут. Пока вы ждете, перейдите к следующему разделу.
Создание ресурсов Azure
Создайте ресурсы Azure, необходимые для запуска устойчивых функций в приложении контейнера.
- Группа ресурсов Azure: Группа ресурсов, содержащая все созданные ресурсы.
- Среда приложения контейнера Azure: Среда, в которой размещено приложение контейнера.
- Azure Container App: Образ, содержащий приложение на основе Durable Functions, развертывается на этом приложении.
- Учетная запись хранения 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 (в разделе "Сеть")
- Задайте для параметра сортировки базы данных (в разделе "Дополнительные параметры") значение
Latin1_General_100_BIN2_UTF8.
Замечание
Не разрешать службам и ресурсам Azure доступ к этому параметру сервера для рабочих сценариев. Рабочие приложения должны реализовать более безопасные подходы, такие как более строгие ограничения брандмауэра или конфигурации виртуальной сети.
Настройка проверки подлинности на основе удостоверений
Управляемые удостоверения обеспечивают безопасность приложения, устраняя секреты из приложения, например учетные данные в строках подключения. Хотя вы можете выбрать управляемое удостоверение, назначаемое системой и назначаемое пользователем, рекомендуется использовать управляемое удостоверение, назначаемое пользователем, так как оно не привязано к жизненному циклу приложения.
В этом разделе вы настраиваете управляемую идентичность, назначенную пользователем для Azure Storage.
Задайте переменные среды.
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"
Настройка параметров приложения
Замечание
Проверка подлинности в базе данных MSSQL с помощью управляемого удостоверения не поддерживается при размещении приложения Durable Functions в Azure Container Apps. В этом руководстве сейчас проверка подлинности осуществляется с помощью строк подключения.
В ресурсе базы данных 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запроса.Запрос запрашивает экземпляр оркестрации для состояния. Вы должны увидеть, что экземпляр завершился и увидеть выходные данные или результаты приложения Durable Functions.
{ "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.
- Компонент хранилища, управляемого Azure, Durable Task Scheduler.