Azure Functions용 Dapr 확장은 개발자가 Azure Functions를 Dapr(분산 애플리케이션 런타임) 플랫폼과 쉽게 통합할 수 있는 도구 및 서비스 집합입니다.
Azure Functions는 다른 Azure 서비스와 쉽게 연결할 수 있는 트리거 및 바인딩 집합을 제공하는 이벤트 기반 컴퓨팅 서비스입니다. Dapr은 마이크로 서비스, 상태 관리, pub/sub 메시징 등을 비롯한 분산 애플리케이션을 빌드하기 위한 일련의 구성 요소 및 모범 사례를 제공합니다.
Dapr과 Functions가 통합되면 Dapr 또는 외부 시스템의 이벤트에 대응하는 함수를 빌드할 수 있습니다.
| 조치 | 방향 | 유형 |
|---|---|---|
| Dapr 입력 바인딩에서 트리거 | N/A | daprBindingTrigger |
| Dapr 서비스 호출에서 트리거 | N/A | daprServiceInvocationTrigger |
| Dapr 토픽 구독에서 트리거 | N/A | daprTopicTrigger |
| 실행을 위해 Dapr 상태 끌어오기 | In | daprState |
| 실행을 위해 Dapr 비밀 끌어오기 | In | daprSecret |
| Dapr 상태에 값 저장 | Out | daprState |
| 다른 Dapr 앱 호출 | Out | daprInvoke |
| Dapr 토픽에 메시지 게시 | Out | daprPublish |
| Dapr 출력 바인딩에 값 보내기 | Out | daprBinding |
확장 설치
설치하는 확장 NuGet 패키지는 함수 앱에서 사용하는 C# 모드 in-process 또는 격리된 작업자 프로세스 에 따라 달라집니다.
이 확장은 NuGet 패키지 버전 1.0.0을 설치하여 사용할 수 있습니다.
.NET CLI 사용:
dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr
번들 설치
앱에서 이 바인딩 확장을 사용하려면 프로젝트 루트의 host.json 파일에 다음 extensionBundle 참조가 포함되어 있는지 확인합니다.
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.0.0, 5.0.0)"
}
}
이 예제에서 값 version 은 [4.0.0, 5.0.0) Functions 호스트가 4.x의 모든 잠재적 버전을 포함하는 최소 4.0.0 하지만 보다 5.0.0작은 번들 버전을 사용하도록 지시합니다. 이 표기법은 v4.x 확장 번들의 사용 가능한 최신 부 버전에서 앱을 효과적으로 유지 관리합니다.
가능하면 최신 확장 번들 주 버전을 사용하고 런타임에서 최신 부 버전을 자동으로 유지하도록 허용해야 합니다. 확장 번들 릴리스 페이지에서 최신 번들의 콘텐츠를 볼 수 있습니다. 자세한 내용은 Azure Functions 확장 번들을 참조하세요.
Dapr 사용
런타임 컨텍스트에 따라 다양한 [인수 및 주석][dapr-args]를 사용하여 Dapr을 구성할 수 있습니다. 다음 두 채널을 통해 Azure Functions에 대해 Dapr을 구성할 수 있습니다.
- Bicep 또는 ARM(Azure Resource Manager) 템플릿에서와 같이 IaC(Infrastructure as Code) 템플릿
- Azure 포털
IaC 템플릿을 사용하는 경우 컨테이너 앱 리소스 정의 섹션에서 다음 인수 properties 를 지정합니다.
DaprConfig: {
enabled: true
appId: '${envResourceNamePrefix}-funcapp'
appPort: 3001
httpReadBufferSize: ''
httpMaxRequestSize: ''
logLevel: ''
enableApiLogging: true
}
위의 Dapr 구성 값은 애플리케이션 범위 변경으로 간주됩니다. 다중 수정 모드에서 컨테이너 앱을 실행하는 경우 이러한 설정을 변경해도 새 수정 버전이 만들어지지 않습니다. 대신 모든 기존 수정 버전을 다시 시작하여 가장 up-to-date 값으로 구성되도록 합니다.
Azure Portal을 사용하여 Dapr을 구성할 때 함수 앱으로 이동하고 왼쪽 메뉴에서 Dapr 을 선택합니다.
Dapr 포트 및 수신기
Dapr에서 함수를 트리거하는 경우 확장은 Dapr 사이드카에서 들어오는 요청을 수신 대기하도록 포트 3001 를 자동으로 노출합니다.
중요합니다
포트 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 확장은 아래 표에 따라 매개 변수 형식을 지원합니다.
| Binding | 매개 변수 형식 |
|---|---|
| Dapr 트리거 |
daprBindingTrigger daprServiceInvocationTrigger daprTopicTrigger |
| Dapr 입력 |
daprState daprSecret |
| Dapr 출력 |
daprState daprInvoke daprPublish daprBinding |
이러한 형식을 사용하는 예제는 확장에 대한 GitHub 리포지토리를 참조하세요.
Azure Functions용 Dapr 확장 사용해 보기
제공된 샘플을 통해 Azure Functions용 Dapr 확장을 사용하는 방법을 알아봅니다.
| Samples | Description |
|---|---|
| 빠른 시작 | 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 확장을 사용하는 방법을 알아봅니다.
| Samples | Description |
|---|---|
| Java 함수 | Java를 사용하여 Azure Functions Dapr 확장을 사용하는 방법을 알아봅니다. |
Azure Functions용 Dapr 확장 사용해 보기
제공된 샘플을 통해 Azure Functions용 Dapr 확장을 사용하는 방법을 알아봅니다.
| Samples | Description |
|---|---|
| 빠른 시작 | 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 확장을 사용하는 방법을 알아봅니다.
| Samples | Description |
|---|---|
| PowerShell 함수 | PowerShell에서 Azure Functions Dapr 확장을 사용하는 방법을 알아봅니다. |
Azure Functions용 Dapr 확장 사용해 보기
제공된 샘플을 통해 Azure Functions용 Dapr 확장을 사용하는 방법을 알아봅니다.
| Samples | Description |
|---|---|
| 다프르 카프카 | Kafka 바인딩 Dapr 구성 요소와 함께 Azure Functions Dapr 확장을 사용하는 방법을 알아봅니다. |
| Python v1 | Dapr 크기 Python 애플리케이션을 실행하고 Azure Functions Python v1 프로그래밍 모델을 사용하여 Dapr 구성 요소와 통합합니다. |
| Python v2 | Azure Functions Python v2 프로그래밍 모델을 사용하여 Dapr 애플리케이션을 시작하여 Dapr 구성 요소와 통합합니다. |
Troubleshooting
이 섹션에서는 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). 이 오류 메시지를 해결하려면:
컨테이너 앱의 Dapr 설정에서:
코드에서 Dapr 트리거를 사용하는 경우 앱 포트가 환경 변수의
3001값으로DAPR_APP_PORT설정되어 있는지 확인합니다.코드에서 Dapr 트리거를 사용하지 않는 경우 앱 포트가 설정 되지 않은지 확인합니다. 비어 있어야 합니다.
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