Rozszerzenie dapr dla usługi Azure Functions

Ważne

Rozszerzenie Dapr dla usługi Azure Functions jest obecnie w wersji zapoznawczej i obsługiwane tylko w środowiskach usługi Azure Container Apps.

Rozszerzenie Dapr dla usługi Azure Functions to zestaw narzędzi i usług, które umożliwiają deweloperom łatwe integrowanie usługi Azure Functions z platformą Distributed Application Runtime (Dapr).

Azure Functions to oparta na zdarzeniach usługa obliczeniowa, która udostępnia zestaw wyzwalaczy i powiązań umożliwiających łatwe łączenie się z innymi usługami platformy Azure. Język Dapr udostępnia zestaw bloków konstrukcyjnych i najlepszych rozwiązań dotyczących tworzenia aplikacji rozproszonych, w tym mikrousług, zarządzania stanem, obsługi komunikatów pub/podrzędnych i nie tylko.

Dzięki integracji między językami Dapr i Functions można tworzyć funkcje reagujące na zdarzenia z języka Dapr lub systemów zewnętrznych.

Akcja Kierunek Typ
Wyzwalanie w powiązaniu wejściowym języka Dapr Nie dotyczy daprBindingTrigger
Wyzwalanie wywołania usługi Dapr Nie dotyczy daprServiceInvocationTrigger
Wyzwalanie w subskrypcji tematu dapr Nie dotyczy daprTopicTrigger
Ściąganie stanu dapr na potrzeby wykonania Za daprState
Ściąganie wpisów tajnych języka Dapr na potrzeby wykonywania Za daprSecret
Zapisywanie wartości w stanie dapr Out daprState
Wywoływanie innej aplikacji Dapr Out daprInvoke
Publikowanie komunikatu w temacie języka Dapr Out daprPublish
Wysyłanie wartości do powiązania wyjściowego języka Dapr Out daprBinding

Instalowanie rozszerzenia

Instalowany pakiet NuGet rozszerzenia zależy od trybu W# w procesie lub izolowanym procesie roboczym używanym w aplikacji funkcji:

To rozszerzenie jest dostępne przez zainstalowanie pakietu NuGet w wersji 0.17.0-preview01.

Korzystanie z interfejsu wiersza polecenia platformy .NET:

dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr --prerelease

Instalowanie pakietu

Rozszerzenie podglądu można dodać, dodając lub zastępując następujący kod w host.json pliku:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
    "version": "[4.*, 5.0.0)"
  }
}

Włączanie języka Dapr

Język Dapr można skonfigurować przy użyciu różnych [argumentów i adnotacji][dapr-args] na podstawie kontekstu środowiska uruchomieniowego. Język Dapr dla usługi Azure Functions można skonfigurować za pomocą dwóch kanałów:

  • Szablony infrastruktury jako kodu (IaC), jak w szablonach Bicep lub Azure Resource Manager (ARM)
  • Azure Portal

W przypadku korzystania z szablonu IaC określ następujące argumenty w properties sekcji definicji zasobu aplikacji kontenera.

DaprConfig: {
  enabled: true
  appId: '${envResourceNamePrefix}-funcapp'
  appPort: 3001
  httpReadBufferSize: ''
  httpMaxRequestSize: ''
  logLevel: ''
  enableApiLogging: true
}

Powyższe wartości konfiguracji języka Dapr są uznawane za zmiany zakresu aplikacji. Po uruchomieniu aplikacji kontenera w trybie wielokrotnej wersji zmiany tych ustawień nie będą tworzyć nowej poprawki. Zamiast tego wszystkie istniejące poprawki są uruchamiane ponownie, aby upewnić się, że są skonfigurowane z najbardziej aktualnymi wartościami.

Podczas konfigurowania języka Dapr przy użyciu witryny Azure Portal przejdź do aplikacji funkcji i wybierz pozycję Dapr z menu po lewej stronie:

Screenshot demonstrating where to find Dapr enablement for a Function App in the Azure portal.

Porty i odbiorniki języka Dapr

Po wyzwoleniu funkcji z języka Dapr rozszerzenie uwidacznia port 3001 automatycznie w celu nasłuchiwania żądań przychodzących z przyczepki Dapr.

Ważne

Port 3001 jest uwidoczniony i nasłuchuje tylko wtedy, gdy wyzwalacz języka Dapr jest zdefiniowany w aplikacji funkcji. W przypadku korzystania z języka Dapr przyczepka czeka na odebranie odpowiedzi ze zdefiniowanego portu przed ukończeniem tworzenia wystąpienia. Nie należy definiować dapr.io/port adnotacji ani --app-port nie mieć wyzwalacza. Może to spowodować zablokowanie aplikacji z przyczepki Dapr.

Jeśli używasz tylko powiązań wejściowych i wyjściowych, port 3001 nie musi być uwidoczniony ani zdefiniowany.

Domyślnie gdy usługa Azure Functions próbuje nawiązać komunikację z językiem Dapr, wywołuje metodę Dapr przez port rozpoznany ze zmiennej środowiskowej DAPR_HTTP_PORT. Jeśli ta zmienna ma wartość null, wartość domyślna to port 3500.

Możesz zastąpić adres Dapr używany przez powiązania wejściowe i wyjściowe, ustawiając DaprAddress właściwość w elemecie function.json dla powiązania (lub atrybutu). Domyślnie używa polecenia http://localhost:{DAPR_HTTP_PORT}.

Aplikacja funkcji nadal uwidacznia inny port i punkt końcowy dla elementów, takich jak wyzwalacze HTTP, które lokalnie domyślnie są domyślnie ustawione na 7071, ale w kontenerze wartość domyślna to 80.

Typy powiązań

Typy powiązań obsługiwane dla platformy .NET zależą zarówno od wersji rozszerzenia, jak i trybu wykonywania języka C#, który może być jednym z następujących elementów:

Biblioteka klas w procesie jest skompilowaną funkcją języka C# uruchamianą w tym samym procesie co środowisko uruchomieniowe usługi Functions.

Rozszerzenie Języka Dapr obsługuje typy parametrów zgodnie z poniższą tabelą.

Powiązanie Typy parametrów
Wyzwalacz języka Dapr daprBindingTrigger
daprServiceInvocationTrigger
daprTopicTrigger
Dane wejściowe języka Dapr daprState
daprSecret
Dane wyjściowe języka Dapr daprState
daprInvoke
daprPublish
daprBinding

Przykłady użycia tych typów można znaleźć w repozytorium GitHub dla rozszerzenia.

Wypróbuj rozszerzenie Dapr dla usługi Azure Functions

Dowiedz się, jak używać rozszerzenia Dapr dla usługi Azure Functions za pośrednictwem podanych przykładów.

Przykłady opis
Szybki start Rozpocznij pracę przy użyciu powiązania usługi Dapr Pub/sub i HttpTrigger.
Dapr Kafka Dowiedz się, jak używać rozszerzenia Dapr usługi Azure Functions z składnikiem Dapr powiązania platformy Kafka.
Proces in-process platformy .NET Dowiedz się, jak używać modelu przetwarzania usługi Azure Functions do integracji z wieloma składnikami języka Dapr na platformie .NET, takimi jak wywołanie usługi, pub/pod, powiązania i zarządzanie stanem.
Izolowana platforma .NET Integracja ze składnikami języka Dapr na platformie .NET przy użyciu modelu wykonywania out-of-of-proc (OOP) usługi Azure Functions.

Wypróbuj rozszerzenie Dapr dla usługi Azure Functions

Dowiedz się, jak używać rozszerzenia Dapr dla usługi Azure Functions za pośrednictwem podanych przykładów.

Przykłady opis
Funkcje Języka Java Dowiedz się, jak używać rozszerzenia Dapr usługi Azure Functions przy użyciu języka Java.

Wypróbuj rozszerzenie Dapr dla usługi Azure Functions

Dowiedz się, jak używać rozszerzenia Dapr dla usługi Azure Functions za pośrednictwem podanych przykładów.

Przykłady opis
Szybki start Rozpocznij pracę przy użyciu powiązania usługi Dapr Pub/sub i HttpTrigger.
Dapr Kafka Dowiedz się, jak używać rozszerzenia Dapr usługi Azure Functions z składnikiem Dapr powiązania platformy Kafka.
JavaScript Uruchom aplikację funkcji Języka Dapr języka JavaScript i zintegruj się z wywołaniem usługi Dapr, pubem/sub, powiązaniami i zarządzaniem stanem przy użyciu usługi Azure Functions.

Wypróbuj rozszerzenie Dapr dla usługi Azure Functions

Dowiedz się, jak używać rozszerzenia Dapr dla usługi Azure Functions za pośrednictwem podanych przykładów.

Przykłady opis
Funkcje programu PowerShell Dowiedz się, jak używać rozszerzenia Dapr usługi Azure Functions za pomocą programu PowerShell.

Wypróbuj rozszerzenie Dapr dla usługi Azure Functions

Dowiedz się, jak używać rozszerzenia Dapr dla usługi Azure Functions za pośrednictwem podanych przykładów.

Przykłady opis
Dapr Kafka Dowiedz się, jak używać rozszerzenia Dapr usługi Azure Functions z składnikiem Dapr powiązania platformy Kafka.
Python v1 Uruchom aplikację języka Python z obsługą języka Dapr i użyj modelu programowania Języka Python w wersji 1 usługi Azure Functions do integracji ze składnikami języka Dapr.
Python v2 Uruchom aplikację dapr przy użyciu modelu programowania języka Python w języku Python w usłudze Azure Functions w wersji 2, aby zintegrować ją ze składnikami języka Dapr.

Rozwiązywanie problemów

W tej sekcji opisano sposób rozwiązywania problemów, które mogą wystąpić podczas korzystania z rozszerzenia Dapr dla usługi Azure Functions.

Upewnij się, że język Dapr jest włączony w danym środowisku

Jeśli używasz powiązań i wyzwalaczy języka Dapr w usłudze Azure Functions, a język Dapr nie jest włączony w danym środowisku, może zostać wyświetlony komunikat o błędzie: Aby włączyć język Dapr w środowisku: Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information.

  • Jeśli funkcja platformy Azure jest wdrożona w usłudze Azure Container Apps, zapoznaj się z instrukcjami dotyczącymi włączania języka Dapr dla rozszerzenia Dapr dla usługi Azure Functions.

  • Jeśli funkcja platformy Azure jest wdrożona na platformie Kubernetes, sprawdź, czy konfiguracja YAML wdrożenia ma następujące adnotacje:

    annotations:
      ...
      dapr.io/enabled: "true"
      dapr.io/app-id: "functionapp"
      # You should only set app-port if you are using a Dapr trigger in your code.
      dapr.io/app-port: "<DAPR_APP_PORT>"
      ...
    
  • Jeśli używasz funkcji platformy Azure lokalnie, uruchom następujące polecenie, aby upewnić się, że używasz aplikacji funkcji z językiem Dapr:

    dapr run --app-id functionapp --app-port <DAPR_APP_PORT>  --components-path <COMPONENTS_PATH> -- func host start 
    

Weryfikowanie wartości portu aplikacji w konfiguracji języka Dapr

Rozszerzenie Dapr dla usługi Azure Functions domyślnie uruchamia serwer HTTP na porcie 3001 . Ten port można skonfigurować przy użyciu zmiennej środowiskowejDAPR_APP_PORT.

Jeśli podasz nieprawidłową wartość portu aplikacji podczas uruchamiania aplikacji usługi Azure Functions, może zostać wyświetlony komunikat o błędzie: Aby rozwiązać ten komunikat o błędzie: The Dapr sidecar is configured to listen on port {portInt}, but the app server is running on port {appPort}. This may cause unexpected behavior. For more information, visit [this link](https://aka.ms/azfunc-dapr-app-config-error).

  1. W ustawieniach języka Dapr aplikacji kontenera:

    • Jeśli używasz wyzwalacza języka Dapr w kodzie, sprawdź, czy port aplikacji jest ustawiony na 3001 lub na wartość zmiennej środowiskowej DAPR_APP_PORT .

    • Jeśli nie używasz wyzwalacza języka Dapr w kodzie, sprawdź, czy port aplikacji nie został ustawiony. Powinien być pusty.

  2. Sprawdź, czy w konfiguracji języka Dapr podasz poprawną wartość portu aplikacji.

    • Jeśli używasz usługi Azure Container Apps, określ port aplikacji w aplikacji Bicep:

      DaprConfig: {
         ...
         appPort: <DAPR_APP_PORT>
         ...
      }
      
    • Jeśli używasz środowiska Kubernetes, ustaw adnotację dapr.io/app-port :

      annotations:
         ...
         dapr.io/app-port: "<DAPR_APP_PORT>"
         ...
      
    • Jeśli programujesz lokalnie, sprawdź, czy skonfigurowana --app-port podczas uruchamiania aplikacji funkcji przy użyciu języka Dapr:

      dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start 
      

Następne kroki

Dowiedz się więcej o języku Dapr.