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.
Funkce Durable Functions, která je funkcí Azure Functions, slouží k zápisu stavových funkcí v bezserverovém prostředí. Durable Functions spravuje stav, kontrolní body a restartuje ve vaší aplikaci.
Durable Functions podporuje několik poskytovatelů úložiště, označovaných také jako back-endy, pro ukládání orchestrace a stavu modulu runtime entity. V tomto rychlém startu vytvoříte aplikaci Durable Functions pro použití zprostředkovatele úložiště Microsoft SQL Server (MSSQL) pomocí editoru Visual Studio Code.
Tento rychlý start vytvoří aplikaci .NET (izolovaný model) pro demonstrační účely. Obsah uvedený v tomto článku se vztahuje na jiné jazyky podobným způsobem.
Poznámka:
Back-end MSSQL byl navržen tak, aby maximalizoval přenositelnost aplikací a kontrolu nad vašimi daty. Používá Microsoft SQL Server k zachování všech dat centra úloh, aby uživatelé získali výhody moderní infrastruktury systému pro správu databází na podnikové úrovni (DBMS). Další informace o tom, kdy použít poskytovatele úložiště MSSQL, najdete v přehledu poskytovatelů úložiště.
Migrace dat centra úloh mezi poskytovateli úložiště se v současné době nepodporuje. Aplikace funkcí, které mají existující data modulu runtime, začínají po přechodu na back-end MSSQL s čerstvým prázdným centrem úloh. Podobně nelze zachovat obsah centra úloh vytvořený pomocí MSSQL, pokud přepnete na jiného poskytovatele úložiště.
Požadavky
K dokončení tohoto rychlého startu potřebujete:
Nainstalován Visual Studio Code
Nainstalované rozšíření Editoru Visual Studio Code pro Azure Functions
Nainstalovaná nejnovější verze nástrojů Azure Functions Core Tools .
Nainstalovaná sada .NET 8.0 SDK.
Předplatné služby Azure.
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í projektu služby Azure Functions
V editoru Visual Studio Code vytvořte místní projekt Azure Functions.
V nabídce Zobrazit vyberte paletu příkazů (nebo vyberte Ctrl+Shift+P).
Na příkazovém řádku (
>) zadejte a pak vyberte Azure Functions: Vytvořit nový projekt.
Vyberte Procházet. V dialogovém okně Vybrat složku přejděte do složky, která se má použít pro váš projekt, a pak zvolte Vybrat.
Na příkazovém řádku vyberte nebo zadejte následující hodnoty:
Podnět Činnost Popis Výběr jazyka pro projekt aplikace funkcí Vyberte .NET. Vytvoří místní projekt funkcí jazyka C#. Výběr modulu runtime .NET Vyberte izolovanou technologii .NET 8.0. Vytvoří projekt Functions, který podporuje .NET 8 spuštěný v izolovaném pracovním procesu a modul runtime Azure Functions 4.0. Výběr šablony pro první funkci projektu Vyberte Orchestraci trvalých funkcí. Vytvoří orchestraci Durable Functions. Volba typu odolného úložiště Vyberte MSSQL. Vybere poskytovatele úložiště MSSQL. Zadejte název funkce. Zadejte HelloOrchestration. Název funkce orchestrace. Zadání oboru názvů Zadejte Company.Function. Obor názvů pro vygenerovanou třídu. Vyberte, jak chcete projekt otevřít. Vyberte Otevřít v aktuálním okně. Otevře Visual Studio Code ve složce, kterou jste vybrali.
Visual Studio Code nainstaluje Nástroje Azure Functions Core Tools, pokud je potřeba k vytvoření projektu. Vytvoří také projekt aplikace funkcí ve složce. Tento projekt obsahuje konfigurační soubory host.json a local.settings.json .
Další soubor, HelloOrchestration.cs, obsahuje základní stavební bloky aplikace Durable Functions:
Další informace o těchto funkcích naleznete v tématu Durable Functions typy a funkce.
Nastavte si databázi
Poznámka:
Pokud už máte databázi kompatibilní s MSSQL, můžete tuto část přeskočit a přeskočit další část o nastavení místní databáze založené na Dockeru.
Vzhledem k tomu, že back-end MSSQL je navržený pro přenositelnost, máte několik možností, jak nastavit zálohovací databázi. Můžete například nastavit místní instanci SQL Serveru, použít plně spravovanou instanci Azure SQL Database nebo použít jakoukoli jinou možnost hostování kompatibilní s SQL Serverem.
Místní offline vývoj můžete provést také pomocí SQL Serveru Express na místním počítači s Windows nebo použít image Dockeru SQL Serveru spuštěnou v kontejneru Dockeru.
Tento rychlý start se zaměřuje na použití image Dockeru SQL Serveru.
Nastavení místní instance SQL Serveru založeného na Dockeru
Pomocí následujících příkazů PowerShellu nastavte místní databázi SQL Serveru v Dockeru. PowerShell můžete nainstalovat ve Windows, macOS nebo Linuxu.
# primary parameters
$pw = "yourStrong(!)Password"
$edition = "Developer"
$port = 1433
$tag = "2019-latest"
$dbname = "DurableDB"
$collation = "Latin1_General_100_BIN2_UTF8"
# pull the image from the Microsoft container registry
docker pull mcr.microsoft.com/mssql/server:$tag
# run the image and provide some basic setup parameters
docker run --name mssql-server -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=$pw" -e "MSSQL_PID=$edition" -p ${port}:1433 -d mcr.microsoft.com/mssql/server:$tag
# wait a few seconds for the container to start...
# create the database with strict binary collation
docker exec -it mssql-server /opt/mssql-tools/bin/sqlcmd -S . -U sa -P "$pw" -Q "CREATE DATABASE [$dbname] COLLATE $collation"
# if sqlcmd is in the mssql-tools18 folder
# docker exec -it mssql-server /opt/mssql-tools18/bin/sqlcmd -C -S . -U sa -P "$pw" -Q "CREATE DATABASE [$dbname] COLLATE $collation"
Teď byste měli mít místní SQL Server spuštěný v Dockeru a naslouchat na portu 1443. Pokud dojde ke konfliktu portů 1443 s jinou službou, spusťte tyto příkazy znovu po změně proměnné $port na jinou hodnotu.
Pokud chcete ověřit instalaci databáze, zadejte dotaz na novou databázi SQL:
docker exec -it mssql-server /opt/mssql-tools/bin/sqlcmd -S . -U sa -P "$pw" -Q "SELECT name FROM sys.databases"
Pokud se instalace databáze úspěšně dokončila, zobrazí se ve výstupu příkazového řádku název databáze (například DurableDB):
name
--------------------------------------------------------------
master
tempdb
model
msdb
DurableDB
Poznámka:
Pokud chcete zastavit a odstranit spuštěný kontejner, můžete ho použít docker stop <containerName> a docker rm <containerName> v uvedeném pořadí. Tyto příkazy můžete použít k opětovnému vytvoření kontejneru a k zastavení kontejneru po dokončení tohoto rychlého startu. Pokud potřebujete další pomoc, spusťte docker --helppříkaz .
Řešení problémů
Pokud při spuštění docker exec databáze narazíte na chybovou odpověď démona: Modul runtime OCI exec selhal, pravděpodobně /opt/mssql-tools/bin/sqlcmd složka neexistuje. Otevřete Docker Desktop, vyberte kontejner Dockeru SQL Serveru, vyberte Soubory a vyhledejte složku mssql-tools. Zkontrolujte, jestli má tato složka jiný název, například /opt/mssql-tools18/bin/sqlcmd. Odpovídajícím způsobem aktualizujte příkaz.
V ovladači ODBC 18 pro SQL Server je možnost Šifrovat připojení nastavena na true ve výchozím nastavení. Pokud při provádění databázových operací narazíte na "chybu:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:self signed certificate", připojte docker exec, což odpovídá možnosti ADO.net -C.
Přidání připojovacího řetězce SQL do local.settings.json
Back-end MSSQL potřebuje pro přístup k vaší databázi připojovací řetězec. Způsob získání připojovací řetězec závisí především na konkrétním poskytovateli serveru MSSQL.
Pokud použijete předchozí příkazy Dockeru beze změny parametrů, vaše připojovací řetězec je:
Server=localhost,1433;Database=DurableDB;User Id=sa;Password=yourStrong(!)Password;
V local.settings.json přiřaďte připojovací řetězec instance SQL Serveru běžícího na Dockeru do SQLDB_Connection. Tuto proměnnou přidal Visual Studio Code, když jste jako back-end pro aplikaci Durable Functions vybrali MSSQL:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"SQLDB_Connection": "Server=localhost,1433;Database=DurableDB;User Id=sa;Password=yourStrong(!)Password;",
"FUNCTIONS_WORKER_RUNTIME": "<dependent on your programming language>"
}
}
Místní testování
Otevřete okno terminálu v kořenové složce aplikace a spusťte azurite start. Azurite je emulátor služby Azure Storage, který je nutný pro spuštění libovolné aplikace funkcí.
Otevřete v kořenové složce aplikace další okno terminálu a spusťte aplikaci Funkcí spuštěním func host startpříkazu .
V okně terminálu zkopírujte koncový bod adresy URL funkce aktivované protokolem HTTP.
Pomocí testovacího nástroje HTTP odešlete požadavek HTTP POST do koncového bodu adresy URL.
Odpověď je počáteční výsledek funkce HTTP. Dá vám vědět, že orchestrace Durable Functions byla úspěšně spuštěna. Zatím nezobrazuje konečný výsledek orchestrace. Odpověď obsahuje několik užitečných adres URL.
Zkopírujte hodnotu adresy URL ,
statusQueryGetUrivložte ji do adresního řádku prohlížeče a spusťte požadavek. Alternativně můžete k vydání požadavku GET 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 že obsahuje výstupy nebo výsledky aplikace Durable Functions, jako je v tomto příkladu:
{ "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" }
Spuštění aplikace v Azure
Pokud chcete aplikaci spustit v Azure, musíte vytvořit různé prostředky. Pro pohodlné pozdější vyčištění vytvořte všechny prostředky ve stejné skupině zdrojů.
Vytvoření databáze Azure SQL
Poznámka:
Pokud už máte databázi Azure SQL nebo jinou veřejně přístupnou instanci SQL Serveru, kterou chcete použít, můžete přejít k další části.
Neaktivujte nastavení Povolit službám a prostředkům Azure přístup k tomuto serveru [SQL] pro produkční scénáře. Skuteč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ě.
Na webu Azure Portal můžete vytvořit databázi Azure SQL. 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 .
Vytvoření aplikace Azure Functions a podpůrných prostředků
Otevřete okno terminálu a přihlaste se k Azure:
az loginVe stejné skupině prostředků a oblasti jako databázi SQL vytvořte následující prostředky:
- Účet úložiště pro obecné účely, který slouží k ukládání důležitých dat aplikace, jako je samotný kód aplikace. Názvy účtů úložiště musí obsahovat jenom číslice se třemi až 24 znaky a malými písmeny.
- Plán aplikace Function Premium
- Aplikace funkcí
# Variables location=<REGION> resourceGroup=<RESOURCE_GROUP_NAME> storage=<STORAGE_NAME> planName=<PREMIUM_PLAN_NAME> functionApp=<APP_NAME> skuStorage="Standard_LRS" skuPlan="EP1" functionsVersion="4" # Create an Azure storage account echo "Creating $storage" az storage account create --name $storage --location "$location" --resource-group $resourceGroup --sku $skuStorage --allow-blob-public-access false # Create a premium plan echo "Creating $premiumPlan" az functionapp plan create --name $planName --resource-group $resourceGroup --location "$location" --sku $skuPlan # Create a function app hosted in the premium plan echo "Creating $functionApp" az functionapp create --name $functionApp --storage-account $storage --plan $planName --resource-group $resourceGroup --functions-version $functionsVersion
Vytvoření spravované identity Azure
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. Můžete si vybrat mezi spravovanou identitou přiřazenou systémem a přiřazenou uživatelem. Tento rychlý start ukazuje nastavení spravované identity přiřazené uživatelem, což je doporučená možnost, protože není svázaná s životním cyklem aplikace.
Následující příkazy vytvoří prostředek identity a přiřadí ho aplikaci:
# Variables
subscription=<SUBSCRIPTION_ID>
identity=<IDENTITY_NAME>
# Create a managed identity resource
echo "Creating $identity"
az identity create -g $resourceGroup -n $identity --location "$location"
# Construct the identity resource ID
resourceId="/subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identity"
# Assign the identity to the Azure Functions app
echo "Assigning $identity to app"
az functionapp identity assign -g $resourceGroup -n $functionApp --identities "$resourceId"
# Get the identity's ClientId and PrincipalId (also called ObjectId) for a later step.
clientId=$(az identity show --name $identity --resource-group $resourceGroup --query 'clientId' --output tsv)
principalId=$(az identity show --name $identity --resource-group $resourceGroup --query 'principalId' --output tsv)
Udělení přístupu ke službě Azure Storage a Azure SQL Database
Azure Storage
Přiřaďte roli Vlastník dat objektu blob úložiště pro přístup k účtu úložiště.
# Set the scope of the access
scope="/subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Storage/storageAccounts/$storage"
# Assign the role
echo "Assign Storage Blob Data Owner role to identity"
az role assignment create --assignee "$clientId" --role "Storage Blob Data Owner" --scope "$scope"
Azure SQL Database
Poznámka:
Ověřování v databázi Azure SQL pomocí spravované identity se při hostování aplikace Durable Functions v plánu Flex Consumption nepodporuje. Pokud je vaše aplikace hostovaná v plánu Flex Consumption, přejděte do části Nastavení aplikace .
Začněte nastavením identity vývojáře jako správce databáze.
Přiřazená osoba je vaše identita, proto ji změňte na svůj e-mail.
assignee=$(az ad user show --id "someone@example.com" --query "id" --output tsv)Nastavte přiřazeného jako správce databáze Azure SQL.
az sql server ad-admin create --resource-group $resourceGroup --server-name <SQL_SERVER_NAME> --display-name ADMIN --object-id "$assignee"Připojte se k dříve vytvořené databázi SQL pomocí nástrojů, jako je Azure Data Studio nebo SQL Management Server Studio. Nebo můžete spustit následující příkaz SQLCMD pro připojení:
sqlcmd -S <SQL_SERVER_NAME>.database.windows.net -d <DATABASE_NAME> -U <someone@example.com> -P "ACCOUNT_PASSWORD" -G -l 30Udělením přístupu vaší identitě db_owner spusťte následující dotaz na databázi. Jedná se
IDENTITY_OBJECT_IDo Id objektu zabezpečení z kroku vytvoření identity.CREATE USER "<IDENTITY_NAME>" FROM EXTERNAL PROVIDER With OBJECT_ID='<IDENTITY_OBJECT_ID>' ALTER ROLE db_owner ADD MEMBER "<IDENTITY_NAME>"; GOPřipojte se k
masterdatabázi a udělte svojí identitě (role) dbmanager přístup:CREATE USER "<IDENTITY_NAME>" FROM EXTERNAL PROVIDER With OBJECT_ID='<IDENTITY_OBJECT_ID>' ALTER ROLE dbmanager ADD MEMBER "<IDENTITY_NAME>"; GO
Nastavení požadovaných aplikací
Do aplikace musíte přidat následující nastavení aplikace:
-
AzureWebJobsStorage__accountName: Název účtu služby Azure Storage -
AzureWebJobsStorage__clientId: ClientId spravované identitě -
AzureWebJobsStorage__credential: Typ přihlašovacích údajů, který je spravovaná identita -
SQLDB_Connection: Připojovací řetězec databáze SQL
Pokud k ověření v databázi SQL používáte spravovanou identitu přiřazenou uživatelem, měl by připojovací řetězec vypadat takto:
dbserver=<SQL_SERVER_NAME>
sqlDB=<SQL_DB_NAME>
clientId=<IDENTITY_CLIENT_ID>
sqlconnstr="Server=tcp:$dbserver.database.windows.net,1433;Initial Catalog=$sqlDB;Persist Security Info=False;User ID=$clientId;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Authentication='Active Directory Managed Identity';"
U aplikací Flex Consumption teď použijte připojovací řetězec k ověření. Najdete ho tak, že přejdete na prostředek databáze SQL na webu Azure Portal, přejdete na kartu Nastavení a pak kliknete na Připojovací řetězce:
Připojovací řetězec by měl mít tento formát:
dbserver=<SQL_SERVER_NAME>
sqlDB=<SQL_DB_NAME>
username=<DB_USER_LOGIN>
password=<DB_USER_PASSWORD>
sqlconnstr="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;"
Spuštěním následujícího příkazu nastavte nastavení:
az functionapp config appsettings set --name $functionApp --resource-group $resourceGroup --settings AzureWebJobsStorage__accountName="$storage" AzureWebJobsStorage__clientId="$clientId" AzureWebJobsStorage__credential="managedidentity" SQLDB_Connection=$sqlconnstr
Odstraňte existující AzureWebJobsStorage nastavení:
az functionapp config appsettings delete --name $functionApp --resource-group $resourceGroup --setting-names "AzureWebJobsStorage"
Nasazení místního projektu do Azure a testování
Nakonec ve složce kořenového projektu nasaďte aplikaci do Azure spuštěním příkazu:
func azure functionapp publish $functionApp
Po dokončení nasazení spusťte následující příkaz a získejte adresu URL triggeru HTTP:
az functionapp function list --resource-group $resourceGroup --name $functionApp --query '[].{Function:name, URL:invokeUrlTemplate}' --output json
Testujte stejně jako při místním vývoji pomocí testovacího nástroje HTTP.
Můžete také ověřit, jestli je back-end MSSQL správně nakonfigurovaný, a to dotazováním databáze na data centra úloh.
Můžete například dotazovat instance orchestrace v podokně přehledu databáze SQL. Vyberte Editor Power Query, ověřte a spusťte následující dotaz:
SELECT TOP 5 InstanceID, RuntimeStatus, CreatedTime, CompletedTime FROM dt.Instances
Po spuštění jednoduchého orchestrátoru by se měl zobrazit alespoň jeden výsledek, jak je znázorněno v tomto příkladu:
Další kroky
- Hostování aplikace Durable Functions pomocí back-endu MSSQL v Azure Container Apps
- Další informace o architektuře, konfiguraci a chování úloh tohoto back-endu najdete v dokumentaci k poskytovateli úložiště MSSQL .