Azure Functions용 Dapr 확장

Important

Azure Functions용 Dapr 확장은 현재 미리 보기로 제공되며 Azure Container Apps 환경에서만 지원됩니다.

Azure Functions용 Dapr 확장은 개발자가 Azure Functions를 Dapr(분산 애플리케이션 런타임) 플랫폼과 쉽게 통합할 수 있는 도구 및 서비스 집합입니다.

Azure Functions는 다른 Azure 서비스와 쉽게 연결할 수 있는 트리거 및 바인딩 집합을 제공하는 이벤트 기반 컴퓨팅 서비스입니다. Dapr은 마이크로 서비스, 상태 관리, pub/sub 메시징 등을 비롯한 분산 애플리케이션을 빌드하기 위한 일련의 구성 요소 및 모범 사례를 제공합니다.

Dapr과 Functions가 통합되면 Dapr 또는 외부 시스템의 이벤트에 대응하는 함수를 빌드할 수 있습니다.

작업 방향 Type
Dapr 입력 바인딩에서 트리거 해당 없음 daprBindingTrigger
Dapr 서비스 호출에서 트리거 해당 없음 daprServiceInvocationTrigger
Dapr 토픽 구독에서 트리거 해당 없음 daprTopicTrigger
실행을 위해 Dapr 상태 끌어오기 In daprState
실행을 위해 Dapr 비밀 끌어오기 In daprSecret
Dapr 상태에 값 저장 Out daprState
다른 Dapr 앱 호출 Out daprInvoke
Dapr 토픽에 메시지 게시 Out daprPublish
Dapr 출력 바인딩에 값 보내기 Out daprBinding

확장 설치

설치하는 확장 NuGet 패키지는 함수 앱에서 사용하는 C# 모드 in-process 또는 격리된 작업자 프로세스 에 따라 달라집니다.

이 확장은 NuGet 패키지 버전 0.17.0-preview01을 설치하여 사용할 수 있습니다.

.NET CLI 사용:

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

번들 설치

파일에서 다음 코드를 추가하거나 바꿔 미리 보기 확장을 추가할 수 있습니다 host.json .

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

Dapr 사용

런타임 컨텍스트에 따라 다양한 [인수 및 주석][dapr-args]를 사용하여 Dapr을 구성할 수 있습니다. 다음 두 채널을 통해 Azure Functions에 대해 Dapr을 구성할 수 있습니다.

  • Bicep 또는 ARM(Azure Resource Manager) 템플릿과 같은 IaC(Infrastructure as Code) 템플릿
  • Azure Portal

IaC 템플릿을 사용하는 경우 컨테이너 앱 리소스 정의의 properties 섹션에서 다음 인수를 지정합니다.

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

위의 Dapr 구성 값은 애플리케이션 범위 변경으로 간주됩니다. 다중 수정 모드에서 컨테이너 앱을 실행하는 경우 이러한 설정을 변경해도 새 수정 버전이 만들어지지 않습니다. 대신, 모든 기존 수정 버전이 최신 값으로 구성되도록 다시 시작됩니다.

Azure Portal을 사용하여 Dapr을 구성할 때 함수 앱으로 이동하고 왼쪽 메뉴에서 Dapr을 선택합니다.

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

Dapr 포트 및 수신기

Dapr에서 함수를 트리거하는 경우 확장은 Dapr 사이드카에서 들어오는 요청을 수신 대기하도록 포트 3001 를 자동으로 노출합니다.

Important

포트 3001 는 Dapr 트리거가 함수 앱에 정의된 경우에만 노출되고 수신 대기됩니다. Dapr을 사용하는 경우 사이드카는 인스턴스화를 완료하기 전에 정의된 포트에서 응답을 받기 위해 대기합니다. 주석을 정의하거나 트리거가 dapr.io/port--app-port 없는 한 정의하지 마세요. 이렇게 하면 Dapr 사이드카에서 애플리케이션을 잠글 수 있습니다.

입력 및 출력 바인딩만 사용하는 경우 포트 3001 를 노출하거나 정의할 필요가 없습니다.

기본적으로 Azure Functions는 Dapr과 통신하려고 할 때 환경 변수 DAPR_HTTP_PORT에서 확인된 포트를 통해 Dapr을 호출합니다. 해당 변수가 null이면 기본적으로 포트 3500로 설정됩니다.

바인딩(또는 특성)의 속성을 설정 DaprAddress 하여 입력 및 출력 바인딩에서 function.json 사용하는 Dapr 주소를 재정의할 수 있습니다. 기본적으로 .http://localhost:{DAPR_HTTP_PORT}

함수 앱은 여전히 HTTP 트리거와 같은 항목에 대해 다른 포트 및 엔드포인트를 노출합니다. 이 포트는 로컬로 기본값 7071으로 설정되지만 컨테이너에서는 기본값으로 80설정됩니다.

바인딩 형식

.NET에 지원되는 바인딩 형식은 확장 버전과 C# 실행 모드 모두에 따라 달라지며 다음 중 하나일 수 있습니다.

In Process 클래스 라이브러리는 Functions 런타임과 동일한 프로세스에서 실행되는 컴파일된 C# 함수입니다.

Dapr 확장은 아래 표에 따라 매개 변수 형식을 지원합니다.

바인딩 매개 변수 형식
Dapr 트리거 daprBindingTrigger
daprServiceInvocationTrigger
daprTopicTrigger
Dapr 입력 daprState
daprSecret
Dapr 출력 daprState
daprInvoke
daprPublish
daprBinding

이러한 형식을 사용하는 예제는 확장에 대한 GitHub 리포지토리를 참조하세요.

Azure Functions용 Dapr 확장 사용해 보기

제공된 샘플을 통해 Azure Functions용 Dapr 확장을 사용하는 방법을 알아봅니다.

샘플 설명
빠른 시작 Dapr Pub/sub 바인딩 및 HttpTrigger.
다프르 카프카 Kafka 바인딩 Dapr 구성 요소와 함께 Azure Functions Dapr 확장을 사용하는 방법을 알아봅니다.
.NET In-process Azure Functions In-process 모델을 사용하여 서비스 호출, Pub/sub, Bindings 및 State Management와 같은 .NET의 여러 Dapr 구성 요소와 통합하는 방법을 알아봅니다.
.NET 격리됨 Azure Functions OOP(Out-of-proc) 실행 모델을 사용하여 .NET의 Dapr 구성 요소와 통합합니다.

Azure Functions용 Dapr 확장 사용해 보기

제공된 샘플을 통해 Azure Functions용 Dapr 확장을 사용하는 방법을 알아봅니다.

샘플 설명
Java 함수 Java를 사용하여 Azure Functions Dapr 확장을 사용하는 방법을 알아봅니다.

Azure Functions용 Dapr 확장 사용해 보기

제공된 샘플을 통해 Azure Functions용 Dapr 확장을 사용하는 방법을 알아봅니다.

샘플 설명
빠른 시작 Dapr Pub/sub 바인딩 및 HttpTrigger.
다프르 카프카 Kafka 바인딩 Dapr 구성 요소와 함께 Azure Functions Dapr 확장을 사용하는 방법을 알아봅니다.
JavaScript JavaScript Dapr 함수 애플리케이션을 실행하고 Azure Functions를 사용하여 Dapr Service 호출, Pub/sub, Bindings 및 State Management와 통합합니다.

Azure Functions용 Dapr 확장 사용해 보기

제공된 샘플을 통해 Azure Functions용 Dapr 확장을 사용하는 방법을 알아봅니다.

샘플 설명
PowerShell 함수 PowerShell에서 Azure Functions Dapr 확장을 사용하는 방법을 알아봅니다.

Azure Functions용 Dapr 확장 사용해 보기

제공된 샘플을 통해 Azure Functions용 Dapr 확장을 사용하는 방법을 알아봅니다.

샘플 설명
다프르 카프카 Kafka 바인딩 Dapr 구성 요소와 함께 Azure Functions Dapr 확장을 사용하는 방법을 알아봅니다.
Python v1 Dapr 크기 Python 애플리케이션을 실행하고 Azure Functions Python v1 프로그래밍 모델을 사용하여 Dapr 구성 요소와 통합합니다.
Python v2 Azure Functions Python v2 프로그래밍 모델을 사용하여 Dapr 애플리케이션을 시작하여 Dapr 구성 요소와 통합합니다.

문제 해결

이 섹션에서는 Azure Functions용 Dapr 확장을 사용할 때 발생할 수 있는 문제를 해결하는 방법을 설명합니다.

사용자 환경에서 Dapr이 사용하도록 설정되어 있는지 확인

Azure Functions에서 Dapr 바인딩 및 트리거를 사용하고 있고 사용자 환경에서 Dapr을 사용하도록 설정하지 않은 경우 사용자 환경에서 Dapr을 사용하도록 설정하려면 다음 오류 메시지가 Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information. 표시될 수 있습니다.

  • Azure Function이 Azure Container Apps에 배포된 경우 Azure Functions에 대한 Dapr 확장에 대한 Dapr 사용 지침을 참조 하세요.

  • Azure Function이 Kubernetes에 배포된 경우 배포의 YAML 구성에 다음 주석이 있는지 확인합니다.

    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>"
      ...
    
  • Azure Function을 로컬로 실행하는 경우 다음 명령을 실행하여 Dapr을 사용하여 함수 앱을 실행하고 있는지 확인합니다.

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

Dapr 구성에서 앱 포트 값 확인

Azure Functions에 대한 Dapr 확장은 기본적으로 포트 3001 에서 HTTP 서버를 시작합니다. 환경 변수를 사용하여 이 포트를 DAPR_APP_PORT 구성할 수 있습니다.

Azure Functions 앱을 실행할 때 잘못된 앱 포트 값을 제공하는 경우 오류 메시지가 표시될 수 있습니다. 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. 컨테이너 앱의 Dapr 설정에서:

    • 코드에서 Dapr 트리거를 사용하는 경우 앱 포트가 환경 변수의 DAPR_APP_PORT 값으로 3001 설정되어 있는지 확인합니다.

    • 코드에서 Dapr 트리거를 사용하지 않는 경우 앱 포트가 설정되지 않은지 확인합니다. 이 컨테이너는 비어 있어야 합니다.

  2. Dapr 구성에서 올바른 앱 포트 값을 제공하는지 확인합니다.

    • Azure Container Apps를 사용하는 경우 Bicep에서 앱 포트를 지정합니다.

      DaprConfig: {
         ...
         appPort: <DAPR_APP_PORT>
         ...
      }
      
    • Kubernetes 환경을 사용하는 경우 주석을 dapr.io/app-port 설정합니다.

      annotations:
         ...
         dapr.io/app-port: "<DAPR_APP_PORT>"
         ...
      
    • 로컬로 개발하는 경우 Dapr을 사용하여 함수 앱을 실행할 때 설정하는 --app-port 지 확인합니다.

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

다음 단계

Dapr에 대해 자세히 알아보세요.