Azure Functions를 사용하는 이벤트 복제 작업 및 애플리케이션
팁
이벤트의 페이로드를 고려하고 변환, 집계, 보강하거나 줄이는 데 필요한 모든 상태 저장 복제 작업의 경우 Azure Functions 대신 Azure Stream Analytics를 사용합니다.
이벤트 복제 및 지역 간 페더레이션 문서에 설명된 대로, Event Hubs 쌍 사이 및 Event Hubs 사이에 발생하는 이벤트 스트림의 상태 비저장 복제와 기타 이벤트 스트림 원본 및 대상은 Azure Functions를 사용합니다.
Azure Functions는 이벤트 복제 및 페더레이션 작업을 포함하여 서버리스 애플리케이션을 구성하고 실행하기 위한 스케일링 가능하고 신뢰할 수 있는 실행 환경입니다.
이 개요에서는 해당 애플리케이션에 대한 Azure Functions의 기본 제공 기능, 변환 작업에 맞게 조정하고 수정할 수 있는 코드 블록, Event Hubs 및 다른 Azure Messaging 서비스와 이상적으로 통합되도록 Azure Functions 애플리케이션을 구성하는 방법에 관해 알아봅니다. 자세한 내용은 이 문서에서 가리키는 Azure Functions 설명서를 참조하세요.
복제 작업이란 무엇인가요?
복제 작업은 원본에서 이벤트를 수신하고 대상으로 전달합니다. 대부분의 복제 작업은 변경되지 않은 이벤트를 전달하고 원본 및 대상 프로토콜이 다른 경우 메타데이터 구조 간 매핑을 최대한으로 수행합니다.
복제 작업은 일반적으로 상태 비저장입니다. 즉, 작업의 순차적 또는 병렬 실행에 대한 상태 또는 기타 부작용을 공유하지 않습니다. 일괄 처리 및 연결의 경우에도 마찬가지입니다. 두 경우 모두 스트림의 기존 상태를 기반으로 구현될 수 있습니다.
따라서 복제 작업은 일반적으로 상태를 저장하는 집계 작업과 다르며 Azure Stream Analytics와 같은 분석 프레임워크 및 서비스의 도메인입니다.
Azure Functions의 복제 애플리케이션 및 작업
Azure Functions에서 복제 작업은 구성된 원본에서 입력 메시지를 가져오는 트리거와 원본에서 구성된 대상으로 복사된 메시지를 전달하는 출력 바인딩을 사용하여 구현됩니다.
복제 작업은 다른 Azure Functions 애플리케이션과 동일한 배포 방법으로 복제 애플리케이션에 배포됩니다. 동일한 애플리케이션에 여러 작업을 구성할 수 있습니다.
Azure Functions 프리미엄을 사용하면 여러 복제 애플리케이션이 App Service 플랜이라는 동일한 기본 리소스 풀을 공유할 수 있습니다. 즉, 예를 들어 Java로 작성된 복제 작업을 사용하여 .NET으로 작성된 복제 작업을 쉽게 배치할 수 있습니다. 이 기능은 다른 복제 작업에 대해 다른 언어와 런타임을 자주 선호하는 경우에도 Java에만 사용할 수 있는 Apache Camel과 같은 특정 라이브러리를 사용하고자 하며 이 라이브러리 사용이 특정 통합 경로에 가장 적합한 옵션일 때에 중요합니다.
사용 가능하다면 개별 이벤트나 메시지를 제공하는 트리거를 통해 일괄 처리 지향 트리거를 사용하는 것이 좋습니다. 이 경우에는 항상 Azure Function의 매개 변수 바인딩 식을 사용하는 대신 완전한 이벤트 또는 메시지 구조를 가져와야 합니다.
함수 이름에는 연결하려는 소스와 대상의 쌍이 반영되어야 하며, 이 이름을 사용하여 애플리케이션 구성 파일에서 연결 문자열 또는 기타 구성 요소에 대한 참조를 접두사로 사용해야 합니다.
데이터 및 메타데이터 매핑
한 쌍의 입력 트리거 및 출력 바인딩을 결정한 후에는 트리거와 출력이 동일한 경우를 제외하고는 다른 이벤트 또는 메시지 유형 간에 몇 가지 매핑을 수행해야 합니다.
Event Hubs와 Service Bus 간에 메시지를 복사하는 간단한 복제 작업의 경우 사용자 고유의 코드를 작성할 필요가 없지만 복제 샘플과 함께 제공되는 유틸리티 라이브러리를 사용할 수 있습니다.
다시 시도 정책
복제 함수 어느 쪽에서든 가용성 이벤트 중 데이터 손실을 방지하려면 재시도 정책을 강력하게 구성해야 합니다. 재시도에 대한 Azure Functions 문서를 참조하여 재시도 정책을 구성합니다.
샘플 리포지토리의 예제 프로젝트에 대해 선택한 정책 설정은 데이터 손실을 방지하기 위해 재시도 간격을 5초에서 15분으로 설정하여 지수 백오프 전략을 구성합니다.
Azure Functions에 대한 GA(일반 공급) 버전의 재시도 정책은 Event Hubs 및 타이머 트리거만 지원합니다. 다른 모든 트리거에 대한 미리 보기 지원이 제거되었습니다.
복제 애플리케이션 호스트 설정
복제 애플리케이션은 하나 이상의 복제 작업에 대한 실행 호스트입니다.
소비 플랜 또는 Azure Functions 프리미엄 플랜(권장)에서 실행되도록 구성된 Azure Functions 애플리케이션입니다. 모든 복제 애플리케이션은 시스템이 할당한 또는 사용자가 할당한 관리 ID로 실행해야 합니다.
연결된 ARM(Azure Resource Manager) 템플릿은 다음을 사용하여 복제 애플리케이션을 만들고 구성합니다.
- 복제 진행률 추적과 로그를 위한 Azure Storage 계정
- 시스템이 할당한 관리 ID.
- 모니터링을 위한 Azure Monitor 및 Application Insights 통합
Azure VNet(가상 네트워크)에 바인딩된 Event Hubs에 액세스해야 하는 복제 애플리케이션은 Azure Functions 프리미엄 플랜을 사용해야 하며, 사용 가능한 옵션 중 하나인 동일한 VNet에 연결하도록 구성해야 합니다.
배포 | 시각화 | |
---|---|---|
Azure Functions 소비 계획 | ||
Azure Functions 프리미엄 플랜 | ||
VNet이 포함된 Azure Functions 프리미엄 플랜 |
예제
샘플 리포지토리에는 Event Hubs 및/또는 Service Bus 엔터티 간에 이벤트를 복사하는 복제 작업의 몇 가지 예제가 포함되어 있습니다.
이벤트 허브 간에 이벤트 데이터를 복사하기 위해서는 Event Hubs 출력 바인딩과 함께 Event Hubs 트리거를 사용합니다.
[FunctionName("telemetry")]
[ExponentialBackoffRetry(-1, "00:00:05", "00:05:00")]
public static Task Telemetry(
[EventHubTrigger("telemetry", ConsumerGroup = "$USER_FUNCTIONS_APP_NAME.telemetry", Connection = "telemetry-source-connection")] EventData[] input,
[EventHub("telemetry-copy", Connection = "telemetry-target-connection")] EventHubClient outputClient,
ILogger log)
{
return EventHubReplicationTasks.ForwardToEventHub(input, outputClient, log);
}
Service Bus 엔터티 간에 메시지를 복사하기 위해서는 Service Bus 트리거와 출력 바인딩을 사용합니다.
[FunctionName("jobs-transfer")]
[ExponentialBackoffRetry(-1, "00:00:05", "00:05:00")]
public static Task JobsTransfer(
[ServiceBusTrigger("jobs-transfer", Connection = "jobs-transfer-source-connection")] Message[] input,
[ServiceBus("jobs", Connection = "jobs-target-connection")] IAsyncCollector<Message> output,
ILogger log)
{
return ServiceBusReplicationTasks.ForwardToServiceBus(input, output, log);
}
도우미 메서드를 사용하면 Event Hubs와 Service Bus 간에 쉽게 복제할 수 있습니다.
원본 | 대상 | 진입점 |
---|---|---|
Event Hubs | Event Hubs | Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToEventHub |
Event Hubs | Service Bus | Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToServiceBus |
Service Bus | Event Hubs | Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToEventHub |
Service Bus | Service Bus | Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToServiceBus |
모니터링
복제 앱을 모니터링하는 방법에 대한 자세한 내용은 Azure Functions 문서의 모니터링 섹션을 참조하세요.
복제 작업을 모니터링하는 데 특히 유용한 시각적 도구는 Application Insights 애플리케이션 맵입니다. 이 도구는 캡처된 모니터링 정보에서 자동으로 생성되고 복제 작업 원본 및 대상 전송의 안정성과 성능을 탐색할 수 있도록 합니다.
즉각적인 진단 정보를 위해서는 로그 세부 정보에 대한 낮은 대기 시간 시각화를 제공하는 라이브 메트릭 포털 도구를 사용할 수 있습니다.