Tutoriel Étape 2 : Automatiser le redimensionnement des images chargées à l’aide d’Event Grid

Ce tutoriel est une extension du tutoriel Charger des données d’image dans le cloud avec le Stockage Azure qui vise à ajouter la génération automatique de miniatures serverless à l’aide d’Azure Event Grid et d’Azure Functions. Voici le flux de travail de haut niveau :

Dans ce tutoriel, vous effectuez les étapes suivantes :

  • Créer un compte de stockage Azure
  • Créer, configurer et déployer une application de fonction
  • Créer un abonnement aux événements de stockage
  • Tester l’exemple d’application

Prérequis

Pour suivre ce tutoriel :

Création d'un compte Azure Storage

Azure Functions nécessite un compte de stockage général. En plus du compte de stockage d’objets blob que vous avez créé dans le tutoriel précédent, créez un compte de stockage général dans le groupe de ressources. Les noms de compte de stockage doivent avoir entre 3 et 24 caractères, uniquement des lettres minuscules et des chiffres.

Définissez des variables pour stocker le nom du groupe de ressources que vous avez créé dans le tutoriel précédent, ainsi que l’emplacement des ressources à créer et le nom du nouveau compte de stockage requis par Azure Functions. Créez ensuite le compte de stockage pour la fonction Azure.

Utilisez la commande az storage account create.

Notes

Utilisez les commandes suivantes dans l’interpréteur de commandes Bash de Cloud Shell. Utilisez la liste déroulante en haut à gauche de Cloud Shell pour basculer vers l’interpréteur de commandes Bash le cas échéant.

Exécutez les commandes suivantes pour créer un compte de stockage Azure.

functionstorage="funcstorage$RANDOM"
az storage account create --name $functionstorage --location $region --resource-group $rgName --sku Standard_LRS --kind StorageV2  --allow-blob-public-access true

Créer une application de fonction

Vous devez disposer d’une application de fonction pour héberger l’exécution de votre fonction. La Function App fournit un environnement d’exécution sans serveur de votre code de fonction. Dans la commande suivante, indiquez le nom de votre application de fonction unique. Le nom de l’application de fonction est utilisé en tant que domaine DNS par défaut pour la Function App. Pour cette raison, ce nom doit être unique sur l’ensemble des applications dans Azure. Spécifiez un nom pour l’application de fonction qui doit être créée, puis créez la fonction Azure.

Créez une Function App à l’aide de la commande az functionapp create.

functionapp="funcapp$RANDOM"
az functionapp create --name $functionapp --storage-account $functionstorage --resource-group $rgName --consumption-plan-location $region --functions-version 4

Maintenant, configurez l’application de fonction pour vous connecter au compte de stockage Blob que vous avez créé dans le tutoriel précédent.

Configurer l’application de fonction

La fonction nécessite des informations d’identification pour le compte de stockage blob, qui sont ajoutées aux paramètres d’application de l’application de fonction à l’aide de la commande az functionapp config appsettings set ou Update-AzFunctionAppSetting.

storageConnectionString=$(az storage account show-connection-string --resource-group $rgName --name $blobStorageAccount --query connectionString --output tsv)

az functionapp config appsettings set --name $functionapp --resource-group $rgName --settings AzureWebJobsStorage=$storageConnectionString THUMBNAIL_CONTAINER_NAME=thumbnails THUMBNAIL_WIDTH=100 FUNCTIONS_EXTENSION_VERSION=~2 FUNCTIONS_WORKER_RUNTIME=dotnet

Le paramètre FUNCTIONS_EXTENSION_VERSION=~2 exécute l’application de fonction sur la version 2.x du runtime Azure Functions. Vous pouvez désormais déployer un projet de code de fonction dans cette application de fonction.

Déployer le code de fonction

L’exemple de fonction de redimensionnement C# est disponible sur GitHub. Déployez ce projet de code dans l’application de fonction à l’aide de la commande az functionapp deployment source config.

az functionapp deployment source config --name $functionapp --resource-group $rgName --branch master --manual-integration --repo-url https://github.com/Azure-Samples/function-image-upload-resize

La fonction de redimensionnement d’image est déclenchée par les requêtes HTTP qui lui sont envoyées à partir du service Event Grid. Vous indiquez à Event Grid que vous souhaitez obtenir ces notifications à l’URL de votre fonction en créant un abonnement d’événement. Pour ce didacticiel, vous vous abonnez à des événements créés par des objets blob.

Les données passées à la fonction à partir de la notification de Event Grid incluent l’URL de l’objet blob. Cette URL est ensuite passée à la liaison d’entrée pour obtenir l’image chargée depuis le stockage Blob. La fonction génère une image miniature et écrit le flux résultant dans un conteneur distinct du stockage Blob.

Ce projet utilise EventGridTrigger pour le type de déclencheur. Il est préférable d’utiliser le déclencheur Event Grid plutôt que les déclencheurs HTTP génériques. Event Grid valide automatiquement les déclencheurs de fonction Event Grid. Dans le cas des déclencheurs HTTP génériques, vous devez implémenter la réponse de validation.

Pour en savoir plus sur cette fonction, consultez les fichiers function.json et run.csx.

Le code de projet de fonction est déployé directement à partir du dépôt d’exemples publics. Pour plus d’informations sur les options de déploiement Azure Functions, consultez Déploiement continu pour Azure Functions.

Créer un abonnement d’événement

Un abonnement d’événement indique les événements générés par le fournisseur que vous souhaitez envoyer vers un point de terminaison spécifique. Dans ce cas, le point de terminaison est exposé par votre fonction. Pour créer un abonnement d’événement qui envoie des notifications à votre fonction dans le portail Azure, effectuez les étapes suivantes :

  1. Dans le portail Azure, en haut de la page, recherchez et sélectionnez Function App, puis choisissez l’application de fonction que vous avez créé. Sélectionnez Fonctions et choisissez la fonction Miniature.

    Choisir la fonction Miniature dans le portail

  2. Sélectionnez Intégration, puis choisissez le Déclencheur Event Grid et sélectionnez Créer un abonnement Event Grid.

    Accéder à Ajouter un abonnement Event Grid dans le portail Azure

  3. Utilisez les paramètres d’abonnement d’événement, comme spécifié dans le tableau.

    Créer un abonnement d’événement à partir de la fonction dans le portail Azure

    Paramètre Valeur suggérée Description
    Nom imageresizersub Nom du nouvel abonnement d’événement.
    Type de rubrique Comptes de stockage Choisissez le fournisseur d’événements de compte de stockage.
    Abonnement Votre abonnement Azure Par défaut, votre abonnement Azure actuel est sélectionné.
    Groupe de ressources myResourceGroup Sélectionnez Utiliser l’existant, puis choisissez le groupe de ressources que vous avez utilisé dans ce didacticiel.
    Ressource Votre compte de stockage Blob Choisissez le compte de stockage Blob dans lequel les images sont stockées, et non celui utilisé par l’application de fonction Azure.
    Nom de la rubrique système imagestoragesystopic Spécifiez un nom pour la rubrique système. Pour en savoir plus sur les rubriques système, consultez Vue d’ensemble des rubriques système.
    Types d’événements BlobCreated Décochez tous les types autres que BlobCreated. Seuls les types d’événements de Microsoft.Storage.BlobCreated sont passés à la fonction.
    Type de point de terminaison autogenerated Prédéfini comme une fonction Azure.
    Point de terminaison autogenerated Nom de la fonction. Dans ce cas, il s’agit de Thumbnail.
  4. Basculez vers l’onglet Filtres pour effectuer les actions suivantes :

    1. Sélectionnez l’option Activer le filtrage d’objet.

    2. Dans Le sujet commence par, entrez la valeur suivante : /blobServices/default/containers/images/.

      Spécifier un filtre pour l’abonnement d’événement

  5. Sélectionnez Créer pour créer un abonnement aux événements qui déclenche la fonction Thumbnail lors de l’ajout d’un blob au conteneur images. La fonction redimensionne les images et les ajoute au conteneur thumbnails.

Maintenant que les services backend sont configurés, testez la fonctionnalité de redimensionnement d’images dans l’exemple d’application web.

Tester l’exemple d’application

Pour tester le redimensionnement d’images dans l’application web, accédez à l’URL de l’application publiée. L’URL par défaut de l’application web est https://<web_app>.azurewebsites.net.

Sélectionnez Charger des photos pour sélectionner et charger un fichier. Vous pouvez également faire glisser une photo dans cette zone.

Notez que, lorsque l’image chargée disparaît, une copie de celle-ci est affichée dans le carrousel Miniatures générées. Cette image a été redimensionnée par la fonction, ajoutée au conteneur thumbnails et téléchargée par le client web.

Capture d’écran montrant une application web, « ImageResizer », publiée dans un navigateur pour le SDK .NET v12.

Étapes suivantes

Consultez les autres tutoriels listés dans la section Tutoriels de la table des matières.