Liaisons Azure IoT Hub pour Azure Functions
Ces articles expliquent comment utiliser des liaisons Azure Functions pour IoT Hub. La prise en charge d'IoT Hub repose sur la liaison Azure Event Hubs.
Important
Si les exemples de code suivants utilisent l'API Event Hub, la syntaxe donnée s'applique aux fonctions IoT Hub.
Action | Type |
---|---|
Répondez aux événements envoyés à un flux d’événements IoT Hub. | Déclencheur |
Installer l’extension
Le package NuGet de l’extension que vous installez dépend du mode C# que vous utilisez dans votre application de fonction :
Les fonctions s’exécutent dans un processus de travail C# isolé. Pour en savoir plus, consultez Guide pour l’exécution d’Azure Functions C# dans un processus Worker isolé.
La fonctionnalité de l’extension varie en fonction de la version de l’extension :
Cette version introduit la possibilité de se connecter à l’aide d’une identité au lieu d’un secret. Pour obtenir un tutoriel sur la configuration de vos applications de fonction avec des identités managées, consultez le tutoriel Création d’une application de fonction avec des connexions basées sur l’identité.
Cette version prend en charge la configuration des déclencheurs et des liaisons via l’intégration de .NET Aspire.
Ajoutez l’extension à votre projet en installant le package NuGet, version 5.x.
Installer le bundle
L’extension Event Hubs fait partie d’une offre groupée d’extension, qui est spécifiée dans votre fichier projet host.json. Vous devrez peut-être modifier cette offre groupée pour modifier la version de la liaison ou si les offres groupées ne sont pas encore installées. Pour plus d’informations, consultez le bundle d’extensions.
Cette version introduit la possibilité de se connecter à l’aide d’une identité au lieu d’un secret. Pour obtenir un tutoriel sur la configuration de vos applications de fonction avec des identités managées, consultez le tutoriel sur la création d’une application de fonction avec des connexions basées sur l’identité.
Vous pouvez ajouter cette version de l’extension à partir de l’offre groupée d’extension v3 en ajoutant ou en remplaçant le code suivant dans votre fichier host.json
:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.3.0, 4.0.0)"
}
}
Pour en savoir plus, consultez Mettre à jour vos extensions.
Types de liaisons
Les types de liaison pris en charge pour .NET dépendent à la fois de la version d’extension et du mode d’exécution C#, qui peut être l’une des options suivantes :
Une bibliothèque de classes de processus Worker isolé est une fonction C# compilée exécutée dans un processus Worker isolé du runtime.
Choisissez une version pour afficher les détails des types de liaison du mode et de la version.
Le processus Worker isolé prend en charge les types de paramètres en fonction des tableaux ci-dessous. La prise en charge de la liaison aux types à partir d’Azure.Messaging.EventHubs est en préversion.
Déclencheur Event Hubs
Lorsque vous souhaitez que la fonction traite un seul événement, le déclencheur Event Hubs peut se lier aux types suivants :
Type | Description |
---|---|
string |
Événement sous forme de chaîne. À utiliser quand l’événement est un texte simple. |
byte[] |
Octets de l’événement. |
Types sérialisables JSON | Quand un événement contient des données JSON, Functions tente de désérialiser les données JSON dans un type d’Objet CLR traditionnel (OCT). |
Azure.Messaging.EventHubs.EventData1 | Objet événement. Si vous effectuez une migration à partir d’anciennes versions des kits de développement logiciel (SDK) Event Hubs, notez que cette version supprime la prise en charge du type hérité Body au profit d’EventBody. |
Quand vous souhaitez que la fonction traite un lot d’événements, le déclencheur Event Hubs peut se lier aux types suivants :
Type | Description |
---|---|
string[] |
Tableau d’événements du lot, sous forme de chaînes. Chaque entrée représente un événement. |
EventData[] 1 |
Tableau d’événements du lot, en tant qu’instances d’Azure.Messaging.EventHubs.EventData. Chaque entrée représente un événement. |
T[] where T est un type sérialisable JSON1 |
Tableau d’événements du lot, en tant qu’instances d’un type POCO personnalisé. Chaque entrée représente un événement. |
1 Pour utiliser ces types, vous devez référencer Microsoft.Azure.Functions.Worker.Extensions.EventHubs 5.5.0 ou une version ultérieure et les dépendances courantes pour les liaisons de type kit de développement logiciel (SDK).
Liaison de sortie Event Hubs
Lorsque vous souhaitez que la fonction écrive un seul événement, la liaison de sortie Event Hubs peut se lier aux types suivants :
Type | Description |
---|---|
string |
Événement sous forme de chaîne. À utiliser quand l’événement est un texte simple. |
byte[] |
Octets de l’événement. |
Types sérialisables JSON | Objet représentant l'événement. Cette fonction tente de sérialiser un objet CLR traditionnel (OCT) en données JSON. |
Lorsque vous souhaitez que la fonction écrive plusieurs événements, la liaison de sortie Event Hubs peut se lier aux types suivants :
Type | Description |
---|---|
T[] où T est l’un des types d’événements uniques |
Tableau contenant plusieurs événements. Chaque entrée représente un événement. |
Pour d’autres scénarios de sortie, créez et utilisez un EventHubProducerClient avec d’autres types à partir d’Azure.Messaging.EventHubs directement. Consultez Inscrire des clients Azure pour obtenir un exemple d’utilisation de l’injection de dépendances pour créer un type de client à partir du Kit de développement logiciel (SDK) Azure.
Paramètres host.json
Le fichier host.json contient les paramètres qui contrôlent le comportement du déclencheur Event Hubs. La configuration diffère selon la version de l’extension.
{
"version": "2.0",
"extensions": {
"eventHubs": {
"maxEventBatchSize" : 100,
"minEventBatchSize" : 25,
"maxWaitTime" : "00:05:00",
"batchCheckpointFrequency" : 1,
"prefetchCount" : 300,
"transportType" : "amqpWebSockets",
"webProxy" : "https://proxyserver:8080",
"customEndpointAddress" : "amqps://company.gateway.local",
"targetUnprocessedEventThreshold" : 75,
"initialOffsetOptions" : {
"type" : "fromStart",
"enqueuedTimeUtc" : ""
},
"clientRetryOptions":{
"mode" : "exponential",
"tryTimeout" : "00:01:00",
"delay" : "00:00:00.80",
"maximumDelay" : "00:01:00",
"maximumRetries" : 3
}
}
}
}
Propriété | Default | Description |
---|---|---|
maxEventBatchSize2 | 100 | Nombre maximal d’événements inclus dans un lot pour un seul appel. Doit être au moins égal à 1. |
minEventBatchSize1 | 1 | Nombre minimal d’événements souhaités dans un lot. La valeur minimale s’applique uniquement lorsque la fonction reçoit plusieurs événements et doit être inférieure à maxEventBatchSize .La taille minimale n’est pas strictement garantie. Un lot partiel est distribué quand un lot complet ne peut pas être préparé avant l’expiration du maxWaitTime . Il est probable que des lots partiels le soient également en ce qui concerne le premier appel de la fonction après mise à l’échelle. |
maxWaitTime1 | 00:01:00 | Intervalle maximal devant être observé par le déclencheur pour remplir un lot avant d’appeler la fonction. Le temps d’attente est uniquement pris en compte lorsque minEventBatchSize est supérieur à 1 et est ignoré dans d’autres cas. Si moins de minEventBatchSize événements étaient disponibles avant l’expiration du temps d’attente, la fonction est appelée à l’aide d’un lot partiel. Le plus long temps d’attente autorisé est de 10 minutes.REMARQUE : cet intervalle n’est pas une stricte garantie du minutage exact sur lequel la fonction est appelée. Il existe une petite marge d’erreur en raison de la précision du retardateur. Lorsque la mise à l’échelle a lieu, le premier appel avec un lot partiel peut se produire plus rapidement ou prendre jusqu’à deux fois le temps d’attente configuré. |
batchCheckpointFrequency | 1 | Nombre de lots à traiter avant de créer un point de contrôle pour Event Hub. |
prefetchCount | 300 | Nombre d’événements qui sont demandés de manière anticipée à partir d’Event Hubs et maintenus dans un cache local pour permettre aux lectures d’éviter d’attendre une opération réseau |
transportType | amqpTcp | Protocole et transport utilisés pour communiquer avec Event Hubs. Options disponibles : amqpTcp , amqpWebSockets |
webProxy | null | Proxy à utiliser pour communiquer avec Event Hubs sur des sockets Web. Un proxy ne peut pas être utilisé avec le transport amqpTcp . |
customEndpointAddress | null | Adresse à utiliser lors de l’établissement d’une connexion à Event Hubs, ce qui permet de router les demandes réseau via une passerelle d’application ou un autre chemin d’accès nécessaire pour l’environnement hôte. L’espace de noms complet pour le hub d’événements est toujours nécessaire lorsqu’une adresse de point de terminaison personnalisée est utilisée, et elle doit être spécifiée explicitement ou via le chaîne de connexion. |
targetUnprocessedEventThreshold1 | null | Le nombre souhaité d’événements non traités par instance de fonction. Ce seuil est utilisé dans une mise à l’échelle basée sur la cible pour remplacer le seuil de mise à l’échelle par défaut déduit de l’option maxEventBatchSize . Une fois défini, le nombre total d’événements non traités est divisé par cette valeur pour déterminer le nombre nécessaire d’instances de fonction. Le nombre d’instances est arrondi à un nombre qui crée une distribution de partition équilibrée. |
initialOffsetOptions/type | fromStart | Emplacement dans le flux d’événements pour démarrer le traitement lorsqu’il n’existe pas de point de contrôle dans le stockage. S’applique à toutes les partitions. Pour plus d’informations, consultez la documentation d’OffsetType. Options disponibles : fromStart , fromEnd , fromEnqueuedTime |
initialOffsetOptions/enqueuedTimeUtc | null | Spécifie la durée de mise en file d’attente de l’événement dans le flux à partir duquel commencer le traitement. Lorsque initialOffsetOptions/type est configuré sur fromEnqueuedTime , ce paramètre est obligatoire. Prend en charge une valeur temporelle dans n’importe quel format pris en charge par DateTime.Parse(), par exemple 2020-10-26T20:31Z . Par souci de clarté, vous devez également spécifier un fuseau horaire. Lorsque aucun fuseau horaire n’est spécifié, Functions adopte le fuseau horaire local de l’ordinateur exécutant l’application de fonction, qui est l’heure UTC en cas d’exécution sur Azure. |
clientRetryOptions/mode | exponential | Approche à utiliser pour calculer les délais de nouvelle tentative. Le mode exponentiel effectue de nouvelles tentatives avec un délai basé sur une stratégie de backoff, où chaque tentative augmente la durée d’attente avant une nouvelle tentative. Le mode fixe effectue de nouvelles tentatives à intervalles fixes, chaque délai ayant la même durée. Options disponibles : exponential , fixed |
clientRetryOptions/tryTimeout | 00:01:00 | Durée maximale à attendre pour qu’une opération Event Hubs soit terminée, par tentative. |
clientRetryOptions/delay | 00:00:00.80 | Délai ou facteur de backoff à appliquer entre les nouvelles tentatives. |
clientRetryOptions/maximumDelay | 00:00:01 | Délai maximal à accorder entre les nouvelles tentatives. |
clientRetryOptions/maximumRetries | 3 | Nombre maximal de nouvelles tentatives avant de considérer que l’opération associée a échoué. |
1 L’utilisation de minEventBatchSize
et de maxWaitTime
requiert la version v5.3.0 ou ultérieure du package Microsoft.Azure.WebJobs.Extensions.EventHubs
.
2 La valeur par défaut maxEventBatchSize
a été modifiée dans v6.0.0 du package Microsoft.Azure.WebJobs.Extensions.EventHubs
. Dans les versions antérieures, il s’agissait de 10.
Les clientRetryOptions
sont utilisés pour effectuer de nouvelles tentatives entre l’hôte Functions et Event Hubs (telles que la récupération (fetch) d’événements et l’envoi d’événements). Reportez-vous à l’aide sur la Gestion des erreurs et nouvelles tentatives dans Azure Functions pour obtenir plus d’informations sur l’application de stratégies de nouvelles tentatives à des fonctions individuelles.
Pour obtenir des informations de référence sur le fichier host.json dans Azure Functions 2.x et ultérieur, consultez Informations de référence sur le fichier host.json pour Azure Functions.