Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Azure Functions poskytuje integrovanou podporu vývoje, nasazování a správy kontejnerizovaných aplikací Function Apps v Azure Container Apps. Použijte Azure Container Apps pro své aplikace funkcí, když potřebujete spustit ve stejném prostředí jako jiné mikroslužby, rozhraní API, webové stránky, pracovní postupy nebo programy hostované v kontejnerech. Přečtěte si další informace o spouštění Azure Functions v kontejnerových aplikacích.
Poznámka:
Durable Functions sice podporuje několik poskytovatelů úložiště nebo back-endů, ale automatické škálování aplikací hostovaných v Azure Container Apps je dostupné jenom s back-endem Microsoft SQL (MSSQL). Pokud se použije jiný back-end, musíte nastavit minimální počet replik na hodnotu větší než nula.
V tomto článku se naučíte:
- Vytvořte image Dockeru z místního projektu Durable Functions.
- Vytvořte aplikaci kontejneru Azure a související prostředky.
- Nasaďte image do aplikace Azure Container App a nastavte ověřování.
Požadavky
- Nainstalován Visual Studio Code
- .NET 8.0 SDK.
- Docker a Docker ID
- Azure CLIverze 2.47 nebo novější
- Azure Functions Core Tools
- Účet Azure s aktivním předplatným. Vytvořte si bezplatný účet.
- Testovací nástroj HTTP, který udržuje vaše data v bezpečí. Další informace najdete v tématu Nástroje pro testování HTTP.
Vytvoření místního projektu Durable Functions
V editoru Visual Studio Code vytvořte projekt Durable Functions v izolovaném prostředí .NET nakonfigurovaný tak, aby používal back-end MSSQL.
Otestujte aplikaci místně a vraťte se k tomuto článku.
Přidání souborů souvisejících s Dockerem
V kořenovém adresáři projektu vytvořte soubor Dockerfile , který popisuje minimální požadované prostředí pro spuštění aplikace funkcí v kontejneru.
V kořenovém adresáři projektu vytvořte nový soubor s názvem Dockerfile.
Zkopírujte nebo vložte následující obsah do souboru 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"]Uložte soubor.
Přidejte soubor .dockerignore s následujícím obsahem:
local.settings.jsonUložte soubor .dockerignore .
Sestavit obraz kontejneru
Sestavte dockerový obraz. Úplný seznam podporovaných základních imagí pro Azure Functions najdete v Azure Functions Base od Microsoftu | Docker Hub
Spusťte démona Dockeru.
Přihlaste se k Dockeru pomocí
docker loginpříkazu.Po zobrazení výzvy se přihlaste pomocí svého uživatelského jména a hesla. Zpráva "Přihlášení bylo úspěšné" potvrzuje, že jste přihlášení.
Přejděte do kořenového adresáře projektu.
Spuštěním následujícího příkazu sestavte image a nahraďte
<DOCKER_ID>ID účtu Docker Hubu:dockerId=<DOCKER_ID> imageName=IMAGE_NAME> imageVersion=v1.0.0 docker build --tag $dockerId/$imageName:$imageVersion .Poznámka:
Pokud používáte mac řady M,použijte
--platform linux/amd64místo toho.Nasdílejte image do Dockeru:
docker push $dockerId/$imageName:$imageVersionV závislosti na rychlosti sítě může počáteční nasdílení imagí trvat několik minut. Během čekání přejděte k další části.
Vytvoření zdrojů Azure
Vytvořte prostředky Azure potřebné pro spouštění Durable Functions v aplikaci kontejneru.
- Skupina prostředků Azure: Skupina prostředků obsahující všechny vytvořené prostředky.
- Prostředí Azure Container App: Prostředí hostující aplikaci kontejneru
- Aplikace kontejneru Azure: Image obsahující aplikaci Durable Functions se nasadí do této aplikace.
- Účet služby Azure Storage: Aplikace funkcí vyžaduje ukládání dat souvisejících s aplikacemi, jako je například kód aplikace.
Počáteční nastavení
V novém terminálu se přihlaste k předplatnému Azure:
az login az account set -s <subscription_name>Spuštěním požadovaných příkazů nastavte rozšíření Azure Container Apps CLI:
az upgrade az extension add --name containerapp --upgrade az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights
Vytvořte aplikaci kontejneru a související prostředky
Profil úlohy určuje množství výpočetních a paměťových prostředků dostupných pro aplikace kontejnerů nasazené v prostředí. Vytvořte profil úlohy Consumption pro podporu škálování na nulu a průběžné platby za použití.
Nastavte proměnné prostředí.
location=<REGION> resourceGroup=<RESOURCE_GROUP_NAME> storage=<STORAGE_NAME> containerAppEnv=<CONTAINER_APP_ENVIRONMNET_NAME> functionApp=<APP_NAME> vnet=<VNET_NAME>Vytvořte skupinu prostředků.
az group create --name $resourceGroup --location $locationVytvořte prostředí kontejnerové aplikace.
az containerapp env create \ --enable-workload-profiles \ --resource-group $resourceGroup \ --name $containerAppEnv \ --location $location \Vytvořte aplikaci kontejneru založenou na imagi Durable Functions.
az containerapp create --resource-group $resourceGroup \ --name $functionApp \ --environment $containerAppEnv \ --image $dockerId/$imageName:$imageVersion \ --ingress external \ --kind functionapp \ --query properties.outputs.fqdnPoznamenejte si adresu URL aplikace, která by měla vypadat podobně jako
https://<APP_NAME>.<ENVIRONMENT_IDENTIFIER>.<REGION>.azurecontainerapps.io.
Vytvoření databází
Vytvořte účet Azure Storage, který vyžaduje aplikace funkcí.
az storage account create --name $storage --location $location --resource-group $resourceGroup --sku Standard_LRSNa webu Azure Portal vytvořte databázi Azure SQL pro zachování informací o stavu. Během vytváření:
- Povolit službám a prostředkům Azure přístup k tomuto serveru (v části Sítě)
- Nastavte hodnotu kolace databáze (v části Další nastavení) na
Latin1_General_100_BIN2_UTF8hodnotu .
Poznámka:
V produkčních scénářích nepovolte povolit službám a prostředkům Azure přístup k tomuto nastavení serveru . Produkční aplikace by měly implementovat bezpečnější přístupy, jako jsou silnější omezení brány firewall nebo konfigurace virtuální sítě.
Konfigurace ověřování na základě identit
Spravované identity usnadňují zabezpečení vaší aplikace odstraněním tajných kódů z vaší aplikace, jako jsou přihlašovací údaje v připojovacích řetězcích. I když si můžete vybrat mezi spravovanou identitou přiřazenou systémem a spravovanou identitou přiřazenou uživatelem, doporučuje se spravovaná identita přiřazená uživatelem, protože není svázaná s životním cyklem aplikace.
V této části nastavíte spravovanou identitu přiřazenou uživatelem pro Azure Storage.
Nastavte proměnné prostředí.
subscription=<SUBSCRIPTION_ID> identity=<IDENTITY_NAME>Vytvořte prostředek spravované identity.
echo "Creating $identity" az identity create -g $resourceGroup -n $identity --location "$location"Přiřaďte identitu uživatele k aplikaci kontejneru.
echo "Assigning $identity to app" az containerapp identity assign --resource-group $resourceGroup --name $functionApp --user-assigned $identityNastavte obor oprávnění řízení přístupu na základě role (RBAC).
scope="/subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Storage/storageAccounts/$storage"Získejte identitu
clientIduživatele .# Get the identity's ClientId clientId=$(az identity show --name $identity --resource-group $resourceGroup --query 'clientId' --output tsv)Přiřaďte roli Vlastník dat úložiště Blob pro přístup k úložnému účtu.
echo "Assign Storage Blob Data Owner role to identity" az role assignment create --assignee "$clientId" --role "Storage Blob Data Owner" --scope "$scope"
Nastavení aplikace
Poznámka:
Ověřování v databázi MSSQL pomocí spravované identity se při hostování aplikace Durable Functions v Azure Container Apps nepodporuje. Prozatím se tato příručka ověřuje pomocí připojovacích řetězců.
Z prostředku databáze SQL v Azure portálu přejděte do Nastavení>Připojovací řetězce a vyhledejte připojovací řetězec.
Připojovací řetězec by měl mít podobný formát:
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;"Pokud zapomenete heslo z předchozího kroku vytvoření databáze, můžete ho resetovat na prostředku SQL Serveru.
Uložte připojovací řetězec databáze SQL jako tajný klíč s názvem sqldbconnection v aplikaci kontejneru.
az containerapp secret set \ --resource-group $resourceGroup \ --name $functionApp \ --secrets sqldbconnection=$connStrPřidejte do aplikace následující nastavení:
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
Místní testování
Pomocí testovacího nástroje HTTP odešlete
POSTpožadavek do koncového bodu triggeru HTTP, který by měl vypadat nějak takto:https://<APP NAME>.<ENVIRONMENT_IDENTIFIER>.<REGION>.azurecontainerapps.io/api/DurableFunctionsOrchestrationCSharp1_HttpStartOdpověď je počáteční výsledek funkce HTTP, který vás informuje, že orchestrace Durable Functions byla úspěšně spuštěna. Odpověď sice obsahuje několik užitečných adres URL, ale zatím nezobrazuje konečný výsledek orchestrace.
Zkopírujte nebo vložte hodnotu adresy URL do
statusQueryGetUriadresního řádku prohlížeče a spusťte ji. Alternativně můžete k vydáníGETpožadavku dál používat testovací nástroj HTTP.Požadavek se dotazuje instance orchestrace na stav. Měli byste vidět, že instance byla dokončena a výstupy nebo výsledky aplikace 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" }
Další kroky
Další informace o:
- Azure Container Apps hostování služby Azure Functions.
- Architektura, konfigurace a chování poskytovatele úložiště MSSQL
- Backend úložiště spravovaný Azure, Durable Task Scheduler.