Tworzenie niestandardowych łączników wbudowanych dla aplikacji logiki w warstwie Standardowa w usłudze Azure Logic Apps z jedną dzierżawą
Artykuł
Dotyczy: Azure Logic Apps (Standardowa)
Jeśli potrzebujesz łączników, które nie są dostępne w standardowych przepływach pracy aplikacji logiki, możesz utworzyć własne wbudowane łączniki przy użyciu tego samego modelu rozszerzalności, który jest używany przez wbudowane łączniki oparte na dostawcy usług dostępne dla standardowych przepływów pracy w usłudze Azure Logic Apps z jedną dzierżawą. Ten model rozszerzalności jest oparty na modelu rozszerzalności usługi Azure Functions.
W tym artykule pokazano, jak utworzyć przykładowy wbudowany łącznik usługi Azure Cosmos DB, który ma jeden wyzwalacz oparty na usłudze Azure Functions i nie zawiera żadnych akcji. Wyzwalacz jest uruchamiany po dodaniu nowego dokumentu do kolekcji dzierżawy lub kontenera w usłudze Azure Cosmos DB, a następnie uruchamia przepływ pracy, który używa ładunku wejściowego jako dokumentu usługi Azure Cosmos DB.
Operacja
Szczegóły operacji
opis
Wyzwalacz
Po odebraniu dokumentu
Ta operacja wyzwalacza jest uruchamiana, gdy operacja wstawiania odbywa się w określonej bazie danych i kolekcji usługi Azure Cosmos DB.
Podstawowa wiedza na temat usługi Azure Logic Apps z jedną dzierżawą, standardowych przepływów pracy aplikacji logiki, łączników i sposobu używania programu Visual Studio Code do tworzenia przepływów pracy opartych na jednej dzierżawie. Aby uzyskać więcej informacji, zapoznaj się z następującą dokumentacją:
Zarejestruj niestandardowy wbudowany łącznik za pomocą rozszerzenia środowiska uruchomieniowego usługi Azure Functions.
Zainstaluj łącznik do użycia.
Tworzenie projektu biblioteki klas
W programie Visual Studio Code utwórz projekt biblioteki klas platformy .NET Core 3.1.
W projekcie dodaj pakiet NuGet o nazwie Microsoft.Azure.Workflows.WebJobs.Extension jako odwołanie NuGet.
Implementowanie interfejsu dostawcy usług
Aby zapewnić operacje dla przykładowego wbudowanego łącznika, w pakiecie NuGet Microsoft.Azure.Workflows.WebJobs.Extension zaimplementuj metody dla następujących interfejsów. Na poniższym diagramie przedstawiono interfejsy z implementacjami metod oczekiwanymi przez projektanta i środowiska uruchomieniowego usługi Azure Logic Apps dla niestandardowego wbudowanego łącznika z wyzwalaczem opartym na usłudze Azure Functions:
IServiceOperationsProvider
Ten interfejs zawiera następujące metody, które zapewniają manifest operacji i wykonują określone zadania dostawcy usług lub rzeczywistą logikę biznesową w niestandardowym wbudowanym łączniku. Aby uzyskać więcej informacji, zapoznaj się z tematem IServiceOperationsProvider.
Projektant w usłudze Azure Logic Apps wymaga metody GetService(), aby pobrać metadane wysokiego poziomu dla usługi niestandardowej, w tym opis usługi, parametry wejściowe połączenia wymagane w projektancie, możliwości, kolor marki, adres URL ikony itd.
Projektant w usłudze Azure Logic Apps wymaga metody GetOperations(), aby pobrać operacje zaimplementowane przez usługę niestandardową. Lista operacji jest oparta na schemacie struktury Swagger. Projektant używa również metadanych operacji do zrozumienia parametrów wejściowych dla określonych operacji i wygenerowania danych wyjściowych jako tokenów właściwości na podstawie schematu danych wyjściowych dla operacji.
Jeśli wyzwalacz jest typem wyzwalacza opartego na usłudze Azure Functions, środowisko uruchomieniowe w usłudze Azure Logic Apps wymaga metody GetBindingConnectionInformation() w celu dostarczenia wymaganych informacji o parametrach połączenia do powiązania wyzwalacza usługi Azure Functions.
Jeśli łącznik zawiera akcje, środowisko uruchomieniowe w usłudze Azure Logic Apps wymaga metody InvokeOperation(), aby wywołać każdą akcję w łączniku, która jest uruchamiana podczas wykonywania przepływu pracy. Jeśli łącznik nie ma akcji, nie musisz implementować metody InvokeOperation().
W tym przykładzie niestandardowy łącznik wbudowany usługi Azure Cosmos DB nie ma akcji. Jednak metoda jest uwzględniona w tym przykładzie na potrzeby kompletności.
Aby uzyskać więcej informacji na temat tych metod i ich implementacji, zapoznaj się z tymi metodami w dalszej części tego artykułu.
IServiceOperationsTriggerProvider
Możesz dodać lub uwidocznić wyzwalacz lub akcję usługi Azure Functions jako wyzwalacz dostawcy usług w niestandardowym wbudowanym łączniku. Aby użyć typu wyzwalacza opartego na usłudze Azure Functions i tego samego powiązania usługi Azure Functions co wyzwalacz łącznika zarządzanego platformy Azure, zaimplementuj następujące metody, aby zapewnić informacje o połączeniu i powiązania wyzwalacza zgodnie z wymaganiami usługi Azure Functions. Aby uzyskać więcej informacji, zapoznaj się z tematem IServiceOperationsTriggerProvider.
Metoda GetFunctionTriggerType() jest wymagana do zwrócenia ciągu, który jest taki sam jak parametr typu w powiązaniu wyzwalacza usługi Azure Functions.
GetFunctionTriggerDefinition () ma domyślną implementację, więc nie trzeba jawnie implementować tej metody. Jeśli jednak chcesz zaktualizować domyślne zachowanie wyzwalacza, takie jak podanie dodatkowych parametrów, których projektant nie uwidacznia, możesz zaimplementować tę metodę i zastąpić domyślne zachowanie.
Metody implementowania
W poniższych sekcjach opisano metody implementowane przez przykładowy łącznik. Aby zapoznać się z kompletnym przykładem, zapoznaj się z przykładowym CosmosDbServiceOperationProvider.cs.
Ważne
Jeśli masz poufne informacje, takie jak parametry połączenia zawierające nazwy użytkowników i hasła, upewnij się, że jest dostępny najbezpieczniejszy przepływ uwierzytelniania. Na przykład firma Microsoft zaleca uwierzytelnienie dostępu do zasobów platformy Azure przy użyciu tożsamości zarządzanej, gdy jest dostępna pomoc techniczna, i przypisanie roli, która ma najmniej wymagane uprawnienia.
Jeśli ta funkcja jest niedostępna, upewnij się, że zabezpieczasz parametry połączenia za pomocą innych miar, takich jak usługa Azure Key Vault, której można używać z ustawieniami aplikacji.
Następnie można bezpośrednio odwoływać się do bezpiecznych ciągów, takich jak parametry połączenia i klucze. Podobnie jak w przypadku szablonów usługi ARM, gdzie można zdefiniować zmienne środowiskowe w czasie wdrażania, można zdefiniować ustawienia aplikacji w definicji przepływu pracy aplikacji logiki.
Następnie można przechwytywać dynamicznie generowane wartości infrastruktury, takie jak punkty końcowe połączenia, parametry magazynu i inne.
Aby uzyskać więcej informacji, zobacz Typy aplikacji dla Platforma tożsamości Microsoft.
GetService()
Projektant wymaga następującej metody, aby uzyskać ogólny opis usługi:
C#
public ServiceOperationApi GetService()
{
returnthis.CosmosDBApis.ServiceOperationServiceApi();
}
GetOperations()
Projektant wymaga następującej metody, aby uzyskać operacje zaimplementowane przez usługę. Ta lista operacji jest oparta na schemacie struktury Swagger.
Aby użyć typu wyzwalacza opartego na usłudze Azure Functions, poniższa metoda udostępnia wymagane informacje o parametrach połączenia do powiązania wyzwalacza usługi Azure Functions.
Przykładowy niestandardowy łącznik wbudowany usługi Azure Cosmos DB nie zawiera akcji, ale następująca metoda jest uwzględniona pod kątem kompletności:
Aby użyć wyzwalacza opartego na usłudze Azure Functions jako wyzwalacza w łączniku, musisz zwrócić ciąg, który jest taki sam jak parametr typu w powiązaniu wyzwalacza usługi Azure Functions.
Ta metoda ma domyślną implementację, więc nie trzeba jawnie implementować tej metody. Jeśli jednak chcesz zaktualizować domyślne zachowanie wyzwalacza, takie jak podanie dodatkowych parametrów, których projektant nie uwidacznia, możesz zaimplementować tę metodę i zastąpić domyślne zachowanie.
Rejestrowanie łącznika
Aby załadować niestandardowe wbudowane rozszerzenie łącznika podczas procesu uruchamiania środowiska uruchomieniowego usługi Azure Functions, musisz dodać rejestrację rozszerzenia usługi Azure Functions jako zadanie uruchamiania i zarejestrować łącznik jako dostawcę usług na liście dostawców usług. Na podstawie typu danych, których potrzebuje wbudowany wyzwalacz jako dane wejściowe, opcjonalnie dodaj konwerter. W tym przykładzie typ danych dokumentu dla dokumentów usługi Azure Cosmos DB jest konwertowany na tablicę JObject .
W poniższych sekcjach pokazano, jak zarejestrować niestandardowy wbudowany łącznik jako rozszerzenie usługi Azure Functions.
Tworzenie zadania uruchamiania
Utwórz klasę uruchamiania przy użyciu atrybutu zestawu o nazwie [assembly:WebJobsStartup].
Zaimplementuj interfejs IWebJobsStartup . W metodzie Configure() zarejestruj rozszerzenie i wprowadź dostawcę usług.
Na przykład poniższy fragment kodu przedstawia implementację klasy uruchamiania dla przykładowego niestandardowego wbudowanego łącznika usługi Azure Cosmos DB:
C#
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))]
namespaceServiceProviders.CosmosDb.Extensions
{
publicclassCosmosDbServiceProviderStartup : IWebJobsStartup
{
// Initialize the workflow service.publicvoidConfigure(IWebJobsBuilder builder)
{
// Register the extension.
builder.AddExtension<CosmosDbServiceProvider>();
// Use dependency injection (DI) for the trigger service operation provider.
builder.Services.TryAddSingleton<CosmosDbTriggerServiceOperationsProvider>();
}
}
}
Teraz zarejestruj implementację dostawcy usług jako rozszerzenie usługi Azure Functions za pomocą aparatu usługi Azure Logic Apps. W tym przykładzie użyto wbudowanego wyzwalacza usługi Azure Cosmos DB dla usługi Azure Functions jako nowego wyzwalacza. W tym przykładzie zarejestrowano również nowego dostawcę usług Azure Cosmos DB dla istniejącej listy dostawców usług, która jest już częścią rozszerzenia usługi Azure Logic Apps. Aby uzyskać więcej informacji, zobacz Rejestrowanie rozszerzeń powiązań usługi Azure Functions.
C#
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;
namespaceServiceProviders.CosmosDb.Extensions
{
[Extension("CosmosDbServiceProvider", configurationSection: "CosmosDbServiceProvider")]
publicclassCosmosDbServiceProvider : IExtensionConfigProvider
{
// Initialize a new instance for the CosmosDbServiceProvider class.publicCosmosDbServiceProvider(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.publicstatic 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.publicvoidInitialize(ExtensionConfigContext context)
{
// Convert the Azure Cosmos DB Document list to a JObject array.
context.AddConverter<IReadOnlyList<Document>, JObject[]>(ConvertDocumentToJObject);
}
}
}
Dodawanie konwertera
Usługa Azure Logic Apps ma ogólny sposób obsługi dowolnego wbudowanego wyzwalacza usługi Azure Functions przy użyciu tablicy JObject . Jeśli jednak chcesz przekonwertować listę dokumentów usługi Azure Cosmos DB tylko do odczytu na tablicę JObject , możesz dodać konwerter. Gdy konwerter jest gotowy, zarejestruj konwerter w ramach metody ExtensionConfigContext , jak pokazano wcześniej w tym przykładzie:
C#
// Convert the Azure Cosmos DB document list to a JObject array.
context.AddConverter<IReadOnlyList<Document>, JObject[]>(ConvertDocumentToJObject);
Diagram biblioteki klas dla zaimplementowanych klas
Po zakończeniu przejrzyj następujący diagram klas przedstawiający implementację wszystkich klas w pakiecie rozszerzeń Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB.dll :
CosmosDbServiceOperationsProvider
CosmosDbServiceProvider
CosmosDbServiceProviderStartup
Instalowanie łącznika
Aby dodać odwołanie NuGet z poprzedniej sekcji, w pakiecie rozszerzeń o nazwie Microsoft.Azure.Workflows.ServiceProvider.Extensions.CosmosDB.dll zaktualizuj plik extensions.json . Aby uzyskać więcej informacji, przejdź do repozytorium Azure/logicapps-connector-extensions i przejrzyj skrypt programu PowerShell o nazwie add-extension.ps1.
Zaktualizuj pakiet rozszerzeń, aby uwzględnić niestandardowy wbudowany łącznik.
W programie Visual Studio Code, który powinien mieć zainstalowane rozszerzenie Azure Logic Apps (Standard) dla programu Visual Studio Code , utworzyć projekt aplikacji logiki i zainstalować pakiet rozszerzenia przy użyciu następującego polecenia programu PowerShell:
Alternatywnie z katalogu projektu aplikacji logiki przy użyciu wiersza polecenia programu PowerShell uruchom skrypt programu PowerShell o nazwie add-extension.ps1:
Jeśli rozszerzenie niestandardowego wbudowanego łącznika zostało pomyślnie zainstalowane, uzyskasz dane wyjściowe podobne do następującego przykładu:
Output
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\>
Jeśli jakikolwiek proces func.exe jest uruchomiony, pamiętaj, aby zamknąć lub zakończyć ten proces przed przejściem do następnego kroku.
Testowanie łącznika
W programie Visual Studio Code otwórz aplikację logiki w warstwie Standardowa i pusty przepływ pracy w projektancie.
Na powierzchni projektanta wybierz pozycję Wybierz operację , aby otworzyć selektor operacji łącznika.
W polu wyszukiwania operacji wybierz pozycję Wbudowane. W polu wyszukiwania wprowadź cosmos db.
Selektor operacji pokazuje niestandardowy wbudowany łącznik i wyzwalacz, na przykład:
Z listy Wyzwalacze wybierz niestandardowy wbudowany wyzwalacz, aby uruchomić przepływ pracy.
W okienku połączenia podaj następujące wartości właściwości, aby utworzyć połączenie, na przykład:
Właściwości
Wymagania
Wartość
Opis
Nazwa połączenia
Tak
<
Azure-Cosmos-DB-connection-name>
Nazwa połączenia usługi Azure Cosmos DB do utworzenia
Parametry połączenia
Tak
<
Azure Cosmos DB-connection-string>
Parametry połączenia kolekcji bazy danych lub kolekcji dzierżaw usługi Azure Cosmos DB, w której chcesz dodać każdy nowy odebrany dokument.
Po zakończeniu wybierz Utwórz.
W okienku właściwości wyzwalacza podaj następujące wartości właściwości wyzwalacza, na przykład:
Właściwości
Wymagania
Wartość
Opis
Nazwa bazy danych
Tak
<
Azure-Cosmos-DB-database-name>
Nazwa bazy danych usługi Azure Cosmos DB do użycia
Nazwa kolekcji
Tak
<
Azure-Cosmos-DB-collection-name>
Nazwa kolekcji usługi Azure Cosmos DB, w której chcesz dodać każdy nowy odebrany dokument.
W tym przykładzie w widoku kodu definicja przepływu pracy, która znajduje się w pliku workflow.json , ma triggers obiekt JSON, który jest podobny do następującego przykładu:
Definicja połączenia, która znajduje się w pliku connections.json , zawiera serviceProviderConnections obiekt JSON, który jest podobny do następującego przykładu:
W programie Visual Studio Code w menu Uruchom wybierz pozycję Rozpocznij debugowanie. (Naciśnij F5)
Aby wyzwolić przepływ pracy, otwórz konto usługi Azure Cosmos DB w witrynie Azure Portal. W menu konta wybierz pozycję Eksplorator danych. Przejdź do bazy danych i kolekcji określonej w wyzwalaczu. Dodaj element do kolekcji.
Dołącz do serii meetup, aby tworzyć skalowalne rozwiązania sztucznej inteligencji oparte na rzeczywistych przypadkach użycia z innymi deweloperami i ekspertami.
Pisanie wydajnych zapytań, tworzenie zasad indeksowania, zarządzanie zasobami i aprowizowanie ich w interfejsie API SQL i zestawie SDK za pomocą usługi Microsoft Azure Cosmos DB.