4
votes

Existe-t-il un moyen de redémarrer par programme une fonction Azure

J'ai une fonction Azure exécutée sur une minuterie toutes les quelques minutes qui, après une durée d'exécution variée, commencera à échouer à chaque fois qu'elle s'exécutera en raison d'une API externe et en appuyant manuellement sur le bouton de redémarrage dans le portail Azure, le problème sera résolu et le travail fonctionne à nouveau.

Existe-t-il un moyen de faire redémarrer une fonction azure ou de faire redémarrer une fonction azure en externe via un hook Web ou une requête API ou s'exécutant sur un minuteur

J'ai essayé d'utiliser le service de gestion des API Azures qui peut être utilisé pour redémarrer d'autres types de services d'application dans Azure, mais il s'avère qu'il n'y a pas de fonctionnalité dans l'API pour demander le redémarrage d'une fonction azure, a également examiné Power Shell et il semble que ce soit le même problème, vous pouvez redémarrer différents services d'application mais pas les fonctions azure

J'ai essayé de travailler avec l'API https://docs.microsoft.com/en-us/rest/api / azur / Exemple de requête d'API où vous pouvez répertorier des fonctions dans une fonction Azure GET https://management.azure.com/subscriptions/ {subscriptionId} / resourceGroups / {resourceGroupName } /providers/Microsoft.Web/sites/ {name} / functions? api-version = 01/08/2016

mais il n'y a pas de fonctionnalité pour redémarrer une fonction azure à partir de ce que j'ai recherché

En gros, je veux redémarrer la fonction Azure comme si je devais appuyer sur ce bouton Boutons d'arrêt / démarrage manuel et de redémarrage des fonctions Azure dans le portail azure

car il y a un cas où le travail entre dans un mauvais état à chaque fois qu'il s'exécute à cause d'une API externe sur laquelle je n'ai aucun contrôle et que le redémarrage manuel du travail redémarre


3 commentaires

Que veux-tu accomplir? Pourquoi avez-vous besoin de redémarrer explicitement une application Azure Function?


Pouvez-vous clarifier ce que vous entendez par redémarrage? La fonction «démarre» chaque fois que vous effectuez un appel HTTP. Voulez-vous poser des questions sur la mise à jour du code de fonction?


a modifié la question pour donner plus d'informations requises


3 Réponses :


1
votes

Les fonctions Azure de par leur nature sont appelées à un événement. Cela peut être une minuterie, un déclencheur ou une invocation comme un événement HTTP. Ils ne peuvent pas être redémarrés en soi, c'est-à-dire que si une fonction lance une exception, vous ne pouvez pas trouver l'instance spécifique et la réexécuter en utilisant la fonctionnalité prête à l'emploi.

Cependant, vous pouvez trouver une solution plus fiable:

  1. Rejouer l'événement qui a appelé la fonction (c'est-à-dire le relancer)
  2. Pour les données non sensibles, enregistrez la charge utile de la fonction et créez une autre fonction qui peut être appelée à la demande pour la réexécuter. C'est à dire. vous créez un proxy pour "ré-invoquer" la fonction.
  3. Renforcez votre code en implémentant une stratégie de nouvelle tentative. Voir Polly .
  4. Ajoutez un bus de service à votre architecture. Avoir une fonction simple pour écrire la charge utile d'appel dans une charge utile de bus de messages. Avoir une autre fonction pour récupérer la charge utile et la traiter de manière plus approfondie là où il peut y avoir des intégrations peu fiables, etc.). De cette façon, si l'appel échoue, vous pouvez abandonner et échouer les lettres mortes pour un retraitement ultérieur.
  5. Pensez à utiliser Extensions de fonction durables et en tirant parti des modèles durables, ceux-ci peuvent aider à rendre le code de vos fonctions plus robuste et à gérer l'état.

1 commentaires

C'est hors de propos. Par exemple, j'ai besoin de redémarrer des fonctions car il semble que chaque déclencheur http crée une nouvelle fonction plutôt que de réutiliser les fonctions existantes, qui ne meurent jamais, et de cette façon ils finissent par «manger» toutes les connexions de base de données disponibles sans les libérer.




2
votes

Une autre façon de redémarrer votre fonction consiste à utiliser le paramètre "watchDirectories" dans le fichier host.json. Si votre host.json ressemble à ceci:

Watched directory change of type 'Changed' detected for 'D:\home\site\wwwroot\Toggle\restart.conf'  
Host configuration has changed. Signaling restart

Vous pouvez activer le redémarrage en utilisant l'instruction suivante dans une fonction:

System.IO.File.WriteAllText("D:/home/site/wwwroot/Toggle/restart.conf", DateTime.Now.ToString());     

En regardant les logs, la fonction se recharge car elle a détecté le changement de fichier dans le répertoire:

{
    "version": "2.0",
    "watchDirectories": [ "Toggle" ]
}


1 commentaires

Malheureusement, cette solution ne fonctionne pas lorsque le dossier du code de fonction est protégé en écriture: la variable de paramétrage d'application WEBSITE_RUN_FROM_PACKAGE est définie sur 1.