Egyéni beépített összekötők létrehozása standard logikai alkalmazásokhoz egybérlős Azure Logic Apps esetén
A következőkre vonatkozik: Azure Logic Apps (Standard)
Ha olyan összekötőkre van szüksége, amelyek nem érhetők el a Standard logikaialkalmazás-munkafolyamatokban, létrehozhatja saját beépített összekötőit ugyanazzal a bővíthetőségi modellel, amelyet a szolgáltatói alapú beépített összekötők használnak az egybérlős Azure Logic Apps standard munkafolyamataihoz. Ez a bővíthetőségi modell a Azure Functions bővíthetőségi modellen alapul.
Ez a cikk bemutatja, hogyan hozhat létre példaként egy egyéni beépített Azure Cosmos DB-összekötőt, amely egyetlen Azure Functions-alapú eseményindítóval rendelkezik, és nincs művelete. Az eseményindító akkor aktiválódik, ha új dokumentumot adnak hozzá az Azure Cosmos DB-beli bérletgyűjteményhez vagy -tárolóhoz, majd futtat egy munkafolyamatot, amely a bemeneti hasznos adatokat használja Azure Cosmos DB-dokumentumként.
Művelet | Művelet részletei | Description |
---|---|---|
Eseményindító | Dokumentum beérkezésekor | Ez az eseményindító-művelet akkor fut, ha beszúrási művelet történik a megadott Azure Cosmos DB-adatbázisban és -gyűjteményben. |
Művelet | None | Ez az összekötő nem határoz meg műveleti műveleteket. |
Ez a mintaösszekötő ugyanazt a funkciót használja, mint az Azure Cosmos DB-eseményindító Azure Functions, amely Azure Functions eseményindítókon és kötéseken alapul. A teljes mintaért tekintse át az egyéni beépített Azure Cosmos DB-összekötő – Azure Logic Apps-összekötőbővítmények mintáját.
További információért tekintse át a következő dokumentációt:
- Egyéni összekötők standard logikai alkalmazásokhoz
- Szolgáltatóalapú beépített összekötők
- Egybérlős Azure Logic Apps
Előfeltételek
Azure-fiók és -előfizetés. Ha még nincs előfizetése, regisztráljon egy ingyenes Azure-fiókra.
Alapszintű ismeretek az egybérlős Azure Logic Appsről, a standard logikaialkalmazás-munkafolyamatokról, az összekötőkről, valamint arról, hogyan lehet a Visual Studio Code-ot egyetlen bérlőalapú munkafolyamatok létrehozására használni. További információért tekintse át a következő dokumentációt:
Visual Studio Code az Azure Logic Apps (Standard) bővítménnyel és egyéb előfeltételekkel. A telepítésnek már tartalmaznia kell a Microsoft.Azure.Workflows.WebJobs.Extension NuGet-csomagot.
Megjegyzés
Ez a szerzői képesség jelenleg csak a Visual Studio Code-ban érhető el.
Azure Cosmos DB-fiók, -adatbázis, -tároló vagy -gyűjtemény. További információ: Rövid útmutató: Azure Cosmos DB-fiók, -adatbázis, -tároló és -elemek létrehozása a Azure Portal.
Magas szintű lépések
Az alábbi vázlat a példa-összekötő összeállításának magas szintű lépéseit ismerteti:
Hozzon létre egy osztálytárprojektet.
A projektben adja hozzá a Microsoft.Azure.Workflows.WebJobs.Extension NuGet-csomagot NuGet-referenciaként.
Adja meg a beépített összekötő műveleteit a NuGet-csomaggal az IServiceOperationsProvider és az IServiceOperationsTriggerProvider interfészek metódusainak implementálásához.
Regisztrálja egyéni beépített összekötőjét a Azure Functions futtatókörnyezeti bővítménnyel.
Telepítse az összekötőt használatra.
Az osztálytár projekt létrehozása
A Visual Studio Code-ban hozzon létre egy .NET Core 3.1-osztálytárprojektet.
A projektben adja hozzá a Microsoft.Azure.Workflows.WebJobs.Extension nevű NuGet-csomagot NuGet-referenciaként.
A szolgáltatói felület implementálása
A minta beépített összekötő műveleteinek biztosításához a Microsoft.Azure.Workflows.WebJobs.Extension NuGet-csomagban implementálja a következő felületek metódusait. Az alábbi ábrán az Azure Logic Apps tervezője és futtatókörnyezete által egy Azure Functions-alapú eseményindítóval rendelkező egyéni beépített összekötőhöz elvárt metódus-implementációk illesztői láthatók:
IServiceOperationsProvider
Ez a felület a következő metódusokat tartalmazza, amelyek biztosítják a műveletjegyzéket, és elvégzik a szolgáltató konkrét feladatait vagy tényleges üzleti logikáját az egyéni beépített összekötőben. További információ: IServiceOperationsProvider.
-
Az Azure Logic Apps tervezője megköveteli a GetService() metódust az egyéni szolgáltatás magas szintű metaadatainak lekéréséhez, beleértve a szolgáltatás leírását, a tervezőhöz szükséges kapcsolatbemeneti paramétereket, a képességeket, a márkaszínt, az ikon URL-címét stb.
-
Az Azure Logic Apps tervezője megköveteli a GetOperations() metódust az egyéni szolgáltatás által implementált műveletek lekéréséhez. A műveleti lista a Swagger-sémán alapul. A tervező a művelet metaadatait is felhasználja az adott műveletek bemeneti paramétereinek megértéséhez, és a kimeneteket tulajdonságtokenként hozza létre a művelet kimenetének sémája alapján.
GetBindingConnectionInformation()
Ha az eseményindító egy Azure Functions-alapú eseményindító-típus, az Azure Logic Apps futtatókörnyezetéhez a GetBindingConnectionInformation() metódusra van szükség, hogy megadja a szükséges kapcsolatparaméter-információkat a Azure Functions triggerkötéshez.
-
Ha az összekötő rendelkezik műveletekkel, az Azure Logic Apps futtatókörnyezetéhez az InvokeOperation() metódusra van szükség a munkafolyamat végrehajtása során futó összekötő minden egyes műveletének meghívásához. Ha az összekötő nem rendelkezik műveletekkel, nem kell implementálnia az InvokeOperation() metódust .
Ebben a példában az Azure Cosmos DB egyéni beépített összekötője nem rendelkezik műveletekkel. A teljesség érdekében azonban ebben a példában a metódus szerepel.
Ezekről a módszerekről és azok implementálásáról a cikk későbbi részében talál további információt.
IServiceOperationsTriggerProvider
Az egyéni beépített összekötőben hozzáadhat vagy közzétehet Azure Functions eseményindítót vagy műveletet szolgáltatói eseményindítóként. A Azure Functions-alapú eseményindító típusának és az Azure által felügyelt összekötő eseményindítójának Azure Functions kötésének használatához implementálja az alábbi módszereket a kapcsolatadatok és a triggerkötések Azure Functions által megkövetelt megadásához. További információ: IServiceOperationsTriggerProvider.
A GetFunctionTriggerType() metódus szükséges a Azure Functions triggerkötés típusparaméterével megegyező sztring visszaadásához.
A GetFunctionTriggerDefinition() alapértelmezett implementációval rendelkezik, így nem kell explicit módon implementálnia ezt a módszert. Ha azonban frissíteni szeretné az eseményindító alapértelmezett viselkedését, például további paramétereket szeretne megadni, amelyeket a tervező nem tesz közzé, akkor implementálhatja ezt a módszert, és felülbírálhatja az alapértelmezett viselkedést.
Implementálandó módszerek
A következő szakaszok a példa-összekötő által implementált módszereket ismertetik. A teljes mintaért tekintse át a CosmosDbServiceOperationProvider.cs mintát.
GetService()
A tervező a következő metódust igényli a szolgáltatás magas szintű leírásának lekéréséhez:
public ServiceOperationApi GetService()
{
return this.CosmosDBApis.ServiceOperationServiceApi();
}
GetOperations()
A tervező a következő metódust igényli a szolgáltatás által implementált műveletek lekéréséhez. Ez a műveleti lista a Swagger-sémán alapul.
public IEnumerable<ServiceOperation> GetOperations(bool expandManifest)
{
return expandManifest ? serviceOperationsList : GetApiOperations();
}
GetBindingConnectionInformation()
A Azure Functions-alapú triggertípus használatához a következő metódus biztosítja a szükséges kapcsolatparaméter-információkat a Azure Functions triggerkötéshez.
public string GetBindingConnectionInformation(string operationId, InsensitiveDictionary<JToken> connectionParameters)
{
return ServiceOperationsProviderUtilities
.GetRequiredParameterValue(
serviceId: ServiceId,
operationId: operationID,
parameterName: "connectionString",
parameters: connectionParameters)?
.ToValue<string>();
}
InvokeOperation()
Az Azure Cosmos DB egyéni beépített összekötője nem rendelkezik műveletekkel, de a teljesség érdekében a következő metódust tartalmazza:
public Task<ServiceOperationResponse> InvokeOperation(string operationId, InsensitiveDictionary<JToken> connectionParameters, ServiceOperationRequest serviceOperationRequest)
{
throw new NotImplementedException();
}
GetFunctionTriggerType()
Ha Azure Functions-alapú eseményindítót szeretne használni az összekötőben, vissza kell adnia azt a sztringet, amely megegyezik a Azure Functions triggerkötés típusparaméterével.
Az alábbi példa a beépített Azure Cosmos DB-eseményindító sztringét adja vissza: "type": "cosmosDBTrigger"
public string GetFunctionTriggerType()
{
return "CosmosDBTrigger";
}
GetFunctionTriggerDefinition()
Ez a metódus alapértelmezett implementációval rendelkezik, így nem kell explicit módon implementálnia ezt a metódust. Ha azonban frissíteni szeretné az eseményindító alapértelmezett viselkedését, például további paramétereket szeretne megadni, amelyeket a tervező nem tesz közzé, akkor implementálhatja ezt a módszert, és felülbírálhatja az alapértelmezett viselkedést.
Összekötő regisztrálása
Az egyéni beépített összekötőbővítmény Azure Functions futásidejű indítási folyamat során való betöltéséhez hozzá kell adnia a Azure Functions bővítmény regisztrációját indítási feladatként, és regisztrálnia kell az összekötőt szolgáltatóként a szolgáltatói listában. A beépített eseményindító bemenetként szükséges adattípusa alapján igény szerint adja hozzá a konvertert. Ez a példa az Azure Cosmos DB-dokumentumok Dokumentum adattípusát JObject tömbté alakítja.
Az alábbi szakaszok bemutatják, hogyan regisztrálhatja az egyéni beépített összekötőt Azure Functions bővítményként.
Az indítási feladat létrehozása
Hozzon létre egy indítási osztályt a [assembly:WebJobsStartup] szerelvényattribútummal.
Implementálja az IWebJobsStartup felületet. A Configure() metódusban regisztrálja a bővítményt, és adja meg a szolgáltatót.
Az alábbi kódrészlet például az egyéni beépített Azure Cosmos DB-összekötő indítási osztályának implementációját mutatja be:
using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Hosting; using Microsoft.Extensions.DependencyInjection.Extensions; [assembly: Microsoft.Azure.WebJobs.Hosting.WebJobsStartup(typeof(ServiceProviders.CosmosDb.Extensions.CosmosDbTriggerStartup))] namespace ServiceProviders.CosmosDb.Extensions { public class CosmosDbServiceProviderStartup : IWebJobsStartup { // Initialize the workflow service. public void Configure(IWebJobsBuilder builder) { // Register the extension. builder.AddExtension<CosmosDbServiceProvider>)(); // Use dependency injection (DI) for the trigger service operation provider. builder.Services.TryAddSingleton<CosmosDbTriggerServiceOperationsProvider>(); } } }
További információ: Szolgáltatások regisztrálása – Függőséginjektálás használata a .NET-ben Azure Functions.
A szolgáltató regisztrálása
Most regisztrálja a szolgáltató implementációját Azure Functions bővítményként az Azure Logic Apps motorjával. Ez a példa a beépített Azure Cosmos DB-eseményindítót használja Azure Functions új eseményindítóként. Ez a példa az új Azure Cosmos DB-szolgáltatót is regisztrálja a szolgáltatók meglévő listájához, amely már része az Azure Logic Apps bővítménynek. További információ: Regisztráció Azure Functions kötésbővítmények.
using Microsoft.Azure.Documents;
using Microsoft.Azure.WebJobs.Description;
using Microsoft.Azure.WebJobs.Host.Config;
using Microsoft.Azure.Workflows.ServiceProviders.Abstractions;
using Microsoft.WindowsAzure.ResourceStack.Common.Extensions;
using Microsoft.WindowsAzure.ResourceStack.Common.Json;
using Microsoft.WindowsAzure.ResourceStack.Common.Storage.Cosmos;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
namespace ServiceProviders.CosmosDb.Extensions
{
[Extension("CosmosDbServiceProvider", configurationSection: "CosmosDbServiceProvider")]
public class CosmosDbServiceProvider : IExtensionConfigProvider
{
// Initialize a new instance for the CosmosDbServiceProvider class.
public CosmosDbServiceProvider(ServiceOperationsProvider serviceOperationsProvider, CosmosDbTriggerServiceOperationsProvider operationsProvider)
{
serviceOperationsProvider.RegisterService(serviceName: CosmosDBServiceOperationsProvider.ServiceName, serviceOperationsProviderId: CosmosDBServiceOperationsProvider.ServiceId, serviceOperationsProviderInstance: operationsProvider);
}
// Convert the Azure Cosmos DB Document array to a generic JObject array.
public static JObject[] ConvertDocumentToJObject(IReadOnlyList<Document> data)
{
List<JObject> jobjects = new List<JObject>();
foreach(var doc in data)
{
jobjects.Add((JObject)doc.ToJToken());
}
return jobjects.ToArray();
}
// In the Initialize method, you can add any custom implementation.
public void Initialize(ExtensionConfigContext context)
{
// Convert the Azure Cosmos DB Document list to a JObject array.
context.AddConverter<IReadOnlyList<Document>, JObject[]>(ConvertDocumentToJObject);
}
}
}
Konverter hozzáadása
Az Azure Logic Apps általános módon kezeli a beépített Azure Functions eseményindítót a JObject tömb használatával. Ha azonban JObject-tömbbe szeretné konvertálni az Azure Cosmos DB-dokumentumok írásvédett listáját, hozzáadhat egy konvertert. Ha a konverter készen áll, regisztrálja a konvertert az ExtensionConfigContext részeként a példában korábban látható módon:
// Convert the Azure Cosmos DB document list to a JObject array.
context.AddConverter<IReadOnlyList<Document>, JObject[]>(ConvertDocumentToJObject);
Osztálytár diagramja implementált osztályokhoz
Ha végzett, tekintse át az alábbi osztálydiagramot, amely a Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB.dll bővítménycsomag összes osztályának implementációját mutatja be:
- CosmosDbServiceOperationsProvider
- CosmosDbServiceProvider
- CosmosDbServiceProviderStartup
Az összekötő telepítése
Az előző szakasz NuGet-hivatkozásának hozzáadásához a Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB.dllnevű bővítménycsomagban frissítse a extensions.json fájlt. További információt az Azure/logicapps-connector-extensions adattárban talál, és tekintse át a add-extension.ps1nevű PowerShell-szkriptet.
Frissítse a bővítménycsomagot úgy, hogy tartalmazza az egyéni beépített összekötőt.
A Visual Studio Code-ban, amelynek telepítve kell lennie az Azure Logic Apps (Standard) for Visual Studio Code bővítménynek , hozzon létre egy logikai alkalmazásprojektet, és telepítse a bővítménycsomagot a következő PowerShell-paranccsal:
PowerShell
dotnet add package "Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB" --version 1.0.0 --source $extensionPath
Másik lehetőségként futtassa a add-extension.ps1nevű PowerShell-szkriptet a logikaialkalmazás-projekt könyvtárából egy PowerShell-parancssor használatával:
.\add-extension.ps1 {Cosmos-DB-output-bin-NuGet-folder-path} CosmosDB
Bash
A Bash használatához futtassa a PowerShell-szkriptet a logikai alkalmazás projektjének könyvtárából a következő paranccsal:
powershell -file add-extension.ps1 {Cosmos-DB-output-bin-NuGet-folder-path} CosmosDB
Ha az egyéni beépített összekötő bővítményének telepítése sikerült, a következő példához hasonló kimenetet kap:
C:\Users\{your-user-name}\Desktop\demoproj\cdbproj>powershell - file C:\myrepo\github\logicapps-connector-extensions\src\Common\tools\add-extension.ps1 C:\myrepo\github\logicapps-connector-extensions\src\CosmosDB\bin\Debug\CosmosDB Nuget extension path is C:\myrepo\github\logicapps-connector-extensions\src\CosmosDB\bin\Debug\ Extension dll path is C:\myrepo\github\logicapps-connector-extensions\src\CosmosDB\bin\Debug\netcoreapp3.1\Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB.dll Extension bundle module path is C:\Users\{your-user-name}\.azure-functions-core-tools\Functions\ExtensionBundles\Microsoft.Azure.Functions.ExtensionBundle.Workflows1.1.9 EXTENSION PATH is C:\Users\{your-user-name}\.azure-functions-core-tools\Functions\ExtensionBundles\Microsoft.Azure.Functions.ExtensionBundle.Workflows\1.1.9\bin\extensions.json and dll Path is C:\myrepo\github\logicapps-connector-extensions\src\CosmosDB\bin\Debug\netcoreapp3.1\Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB.dll SUCCESS: The process "func.exe" with PID 26692 has been terminated. Determining projects to restore... Writing C:\Users\{your-user-name}\AppData\Local\Temp\tmpD343.tmp`<br> info : Adding PackageReference for package 'Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB' into project 'C:\Users\{your-user-name}\Desktop\demoproj\cdbproj.csproj'. info : Restoring packages for C:\Users\{your-user-name}\Desktop\demoproj\cdbproj.csproj... info : Package 'Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB' is compatible with all the specified frameworks in project 'C:\Users\{your-user-name}\Desktop\demoproj\cdbproj.csproj'. info : PackageReference for package 'Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB' version '1.0.0' updated in file 'C:\Users\{your-user-name}\Desktop\demoproj\cdbproj.csproj'. info : Committing restore... info : Generating MSBuild file C:\Users\{your-user-name}\Desktop\demoproj\cdbproj\obj\cdbproj.csproj.nuget.g.props. info : Generating MSBuild file C:\Users\{your-user-name}\Desktop\demoproj\cdbproj\obj\cdbproj.csproj.nuget.g.targets. info : Writing assets file to disk. Path: C:\Users\{your-user-name}\Desktop\demoproj\cdbproj\obj\project.assets.json. log : Restored C:\Users\{your-user-name}\Desktop\demoproj\cdbproj\cdbproj.csproj (in 1.5 sec). Extension CosmosDB is successfully added. C:\Users\{your-user-name}\Desktop\demoproj\cdbproj\>
Ha valamelyikfunc.exe folyamat fut, a következő lépés folytatása előtt mindenképpen zárja be vagy lépjen ki a folyamatból.
Az összekötő tesztelése
A Visual Studio Code-ban nyissa meg a Standard logikai alkalmazást és az üres munkafolyamatot a tervezőben.
A tervezőfelületen válassza a Művelet kiválasztása lehetőséget az összekötőműveletek választójának megnyitásához.
A műveletek keresőmezőjében válassza a Beépített lehetőséget. A keresőmezőbe írja be a cosmos db kifejezést.
A műveletválasztó megjeleníti az egyéni beépített összekötőt és eseményindítót, például:
Az Eseményindítók listában válassza ki az egyéni beépített eseményindítót a munkafolyamat elindításához.
A kapcsolat panelen adja meg a következő tulajdonságértékeket a kapcsolat létrehozásához, például:
Tulajdonság Kötelező Érték Leírás Kapcsolat neve Yes <Azure-Cosmos-DB-connection-name> A létrehozandó Azure Cosmos DB-kapcsolat neve Kapcsolati sztring Yes <Azure Cosmos DB-DB-connection-string> Az Azure Cosmos DB adatbázis-gyűjteményének vagy bérletgyűjteményének kapcsolati sztring, ahol minden új fogadott dokumentumot fel szeretne venni. Ha elkészült, válassza a Létrehozás lehetőséget.
Az eseményindító tulajdonságai panelen adja meg az eseményindító következő tulajdonságértékeit, például:
Tulajdonság Kötelező Érték Leírás Adatbázis neve Yes <Azure-Cosmos-DB-database-name> A használni kívánt Azure Cosmos DB-adatbázis neve Gyűjtemény neve Yes <Azure-Cosmos-DB-collection-name> Annak az Azure Cosmos DB-gyűjteménynek a neve, amelyhez hozzá szeretné adni az egyes új fogadott dokumentumokat. Ebben a példában kódnézetben a munkafolyamat-definíció, amely a workflow.json fájlban található, egy
triggers
JSON-objektummal rendelkezik, amely az alábbi példához hasonlóan jelenik meg:{ "definition": { "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", "actions": {}, "contentVersion": "1.0.0.0", "outputs": {}, "triggers": { "When_a_document_is_received": { "inputs":{ "parameters": { "collectionName": "States", "databaseName": "SampleCosmosDB" }, "serviceProviderConfiguration": { "connectionName": "cosmosDb", "operationId": "whenADocumentIsReceived", "serviceProviderId": "/serviceProviders/CosmosDb" }, "splitOn": "@triggerOutputs()?['body']", "type": "ServiceProvider" } } } }, "kind": "Stateful" }
A connections.json fájlban található kapcsolatdefiníció egy
serviceProviderConnections
JSON-objektummal rendelkezik, amely az alábbi példához hasonlóan jelenik meg:{ "serviceProviderConnections": { "cosmosDb": { "parameterValues": { "connectionString": "@appsetting('cosmosDb_connectionString')" }, "serviceProvider": { "id": "/serviceProviders/CosmosDb" }, "displayName": "myCosmosDbConnection" } }, "managedApiConnections": {} }
A Visual Studio Code Futtatás menüjében válassza a Hibakeresés indítása lehetőséget. (Nyomja le az F5 billentyűt)
A munkafolyamat elindításához nyissa meg az Azure Cosmos DB-fiókot a Azure Portal. A fiók menüben válassza a Data Explorer lehetőséget. Keresse meg az eseményindítóban megadott adatbázist és gyűjteményt. Elem hozzáadása a gyűjteményhez.