Partage via


Tâches et applications de réplication d’événements avec Azure Functions

Conseil

Pour toutes les tâches de réplication avec état où vous devez prendre en compte les charges utiles de vos événements et les transformer, les agréger, les enrichir ou les réduire, utilisez Azure Stream Analytics au lieu d’Azure Functions.

Comme expliqué dans l’article sur la réplication d’événements et la fédération entre les régions, la réplication sans état des flux d’événements entre les paires d’Event Hubs et entre les Event Hubs et les autres sources et cibles de flux d’événements s’appuie sur Azure Functions.

Azure Functions est un environnement d’exécution fiable et évolutif qui permet de configurer et d’exécuter des applications serverless, y compris les tâches de réplication d’événements et de fédération.

Dans cette vue d’ensemble, vous découvrirez les fonctionnalités intégrées d’Azure Functions pour ces applications, ainsi que les blocs de code que vous pouvez adapter et modifier pour les tâches de transformation, et vous apprendrez à configurer une application Azure Functions de sorte qu’elle s’intègre facilement à Event Hubs et à d’autres services de messagerie Azure. Cet article va très souvent faire référence à la documentation Azure Functions.

Qu’est-ce qu’une tâche de réplication ?

Une tâche de réplication reçoit des événements d’une source et les transfère à une cible. La plupart des tâches de réplication transfèrent des événements non modifiés et, au maximum, effectuent le mappage entre les structures de métadonnées si les protocoles source et cible diffèrent.

Les tâches de réplication sont généralement sans état. Cela signifie qu’elles ne partagent pas l’état ou d’autres effets secondaires sur les exécutions séquentielles ou parallèles d’une tâche. C’est également vrai pour le traitement par lot et le chaînage, qui peuvent être implémentés, en plus de l’état existant d’un flux.

Cela différencie les tâches de réplication des tâches d’agrégation (généralement associées à un état). Celles-ci relèvent du domaine des infrastructures et services d’analyse tels qu’Azure Stream Analytics.

Applications et tâches de réplication dans Azure Functions

Dans Azure Functions, une tâche de réplication est implémentée à l’aide d’un déclencheur qui acquiert des messages d’entrée à partir d’une source configurée, et d’une liaison de sortie qui transfère les messages copiés de la source vers une cible configurée.

Déclencheur Output
Déclencheur Azure Event Hubs Liaison de sortie Azure Event Hubs
Déclencheur Azure Service Bus Liaison de sortie Azure Service Bus
Déclencheur Azure IoT Hub Liaison de sortie Azure IoT Hub
Déclencheur Azure Event Grid Liaison de sortie Azure Event Grid
Déclencheur Stockage File d’attente Azure Liaison de sortie Stockage File d’attente Azure
Déclencheur Apache Kafka Liaison de sortie Apache Kafka
Déclencheur RabbitMQ Liaison de sortie RabbitMQ
Liaison de sortie Azure Notification Hubs
Liaison de sortie Azure SignalR Service
Liaison de sortie Twilio SendGrid

Les tâches de réplication sont déployées dans l’application de réplication à l’aide des mêmes méthodes de déploiement que toute autre application Azure Functions. Vous pouvez configurer plusieurs tâches dans la même application.

Avec Azure Functions Premium, plusieurs applications de réplication peuvent partager le même pool de ressources sous-jacent (appelé plan App Service). Vous pouvez ainsi facilement colocaliser les tâches de réplication écrites en .NET avec des tâches de réplication écrites en Java, par exemple. Il s’agit d’un aspect important si vous souhaitez tirer parti de bibliothèques spécifiques telles qu’Apache Camel qui ne sont disponibles que pour Java. Il en va de même si celles-ci constituent la meilleure option pour un chemin d’intégration particulier, même si vous préféreriez généralement utiliser d’autres langage et runtime pour vos autres tâches de réplication.

Lorsque c’est possible, vous devez préférer les déclencheurs axés sur le traitement par lot aux déclencheurs délivrant des événements ou messages individuels. Vous devez par ailleurs toujours obtenir la structure complète des événements ou messages plutôt que de vous appuyer sur les expressions de liaison de paramètre d’Azure Functions.

Le nom de la fonction doit refléter la paire de la source et la cible que vous connectez, et vous devez préfixer les références aux chaînes de connexion ou à d’autres éléments de configuration dans les fichiers de configuration d’application portant ce nom.

Mappage des données et métadonnées

Une fois que vous avez choisi une paire de déclencheur d’entrée et de liaison de sortie, vous devez effectuer un mappage entre les différents types d’événements ou de messages, sauf si le type de votre déclencheur et la sortie sont identiques.

Pour les tâches de réplication simples qui copient des messages entre Event Hubs et Service Bus, il n’est pas nécessaire d’écrire votre propre code, mais vous pouvez vous appuyer sur une bibliothèque d’utilitaires fournie avec les exemples de réplication.

Stratégie de nouvelles tentatives

Pour éviter de perdre des données pendant l’événement de disponibilité de part et d’autre d’une fonction de réplication, vous devez configurer la stratégie de nouvelles tentatives de façon à ce qu’elle soit robuste. Reportez-vous à la documentation d’Azure Functions sur les nouvelles tentatives pour configurer la stratégie de nouvelles tentatives.

Les paramètres de stratégie choisis pour les exemples de projets dans le référentiel d’exemples configurent une stratégie de backoff exponentiel avec des intervalles avant nouvelle tentative de 5 secondes à 15 minutes, et un nombre infini de nouvelles tentatives pour éviter de perdre des données.

La version en disponibilité générale (GA) des stratégies de nouvelles tentatives pour Azure Functions prend uniquement en charge les déclencheurs Event Hubs et Timer. La prise en charge de la préversion pour tous les déclencheurs a été supprimée.

Configuration d’un hôte d’application de réplication

Une application de réplication est un hôte d’exécution pour une ou plusieurs tâches de réplication.

Il s’agit d’une application Azure Functions configurée pour s’exécuter sur le plan de consommation ou (recommandé) sur un plan Azure Functions Premium. Toutes les applications de réplication doivent être exécutées sous une identité managée affectée par le système ou l’utilisateur.

Les modèles ARM (Azure Resource Manager) liés créent et configurent une application de réplication avec :

  • Un compte de stockage Azure pour le suivi de la progression de la réplication et les journaux.
  • Une identité managée affectée par le système.
  • Intégration d’Azure Monitor et d’Application Insights pour la surveillance.

Les applications de réplication qui doivent accéder au service Event Hubs lié à un réseau virtuel (VNet) Azure doivent utiliser le plan Azure Functions Premium et être configurées pour rejoindre le même réseau virtuel, qui est également l’une des options disponibles.

Déployer Visualiser
Plan de consommation Azure Functions Déployer sur Azure Visualiser
Plan Premium Azure Functions Déployer sur Azure Visualiser
Plan Azure Functions Premium avec VNet Déployer sur Azure Visualiser

Exemples

Le référentiel d’exemples contient plusieurs exemples de tâches de réplication qui copient des événements entre des Event Hubs et/ou des entités Service Bus.

Pour copier des données d’événement entre des Event Hubs, vous utilisez le déclencheur et la liaison de sortie Event Hub :

[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);
}

Pour copier des messages entre des entités Service Bus, vous utilisez le déclencheur et la liaison de sortie 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);
}

Les méthodes d’assistance peuvent faciliter la réplication entre Event Hubs et Service Bus :

Source Cible Point d'entrée
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

Supervision

Pour plus d’informations sur la surveillance de votre application de réplication, reportez-vous à la section Surveillance de la documentation d’Azure Functions.

Un outil visuel particulièrement utile pour la surveillance des tâches de réplication est la cartographie d’application d’Application Insights. Celle-ci est générée automatiquement à partir des informations de surveillance capturées et permet d’explorer la fiabilité et les performances des transferts source et cible de la tâche de réplication.

Pour consulter des informations de diagnostic immédiates, vous pouvez utiliser l’outil de portail Métriques temps réel. Celui-ci fournit une visualisation à faible latence des détails des journaux.

Étapes suivantes