18.5 Création de votre projet Microsoft Azure

18.5.1 Familiarisation avec les fonctions Azure Événement Hub

Azure Functions vous permet d'exécuter de petits bouts de code (appelés fonctions) sans vous soucier de l'infrastructure des applications. Avec les fonctions Azure, l'infrastructure de cloud fournit tous les serveurs à jour dont vous avez besoin pour que votre application continue à fonctionner à l'échelle.

Une fonction est déclenchée par un type spécifique de événement. Les déclencheurs pris en charge comprennent la réponse aux modifications des données, la réponse aux messages (par exemple, les concentrateurs de Événement), l’exécution d’une planification ou le résultat d’une requête HTTP.

Azure Functions est un service informatique sans serveur qui vous permet d'exécuter du code déclenché par un événement sans avoir à explicitement configurer ou gérer l'infrastructure.

Azure Événement Hubs s'intègre à Azure Functions pour une architecture sans serveur.

18.5.2 Ouverture de code Visual Studio et ouverture de session sur Azure

Visual Studio Code facilite la…

  • définir et lier des fonctions Azure aux centres de Événement
  • tester localement
  • déployer sur Azure
  • exécution de la fonction de journal à distance

Ouvrir le code Visual Studio

Pour ouvrir le code Visual Studio, saisissez visuel dans la recherche de votre système d'exploitation (recherche Spotlight sur OSX, recherche dans la barre des tâches de Windows). Si vous ne le trouvez pas, vous devez répéter les étapes décrites dans l' exercice 0 - Conditions préalables.

visual-studio-code-icon.png

Connexion à Azure

Lorsque vous vous connectez avec votre compte Azure que vous avez utilisé pour vous inscrire à l' exercice 0 - Conditions préalables, Visual Studio Code vous permet de trouver et de lier toutes les ressources du Événement Hub.

Cliquez sur l'icône Azure dans le code Visual Studio. Si vous ne disposez pas de cette option, il se peut que l'installation des extensions requises n'ait pas fonctionné correctement.

Sélectionnez ensuite Se connecter à Azure:

3-01-vsc-open.png

Vous serez redirigé vers votre navigateur pour vous connecter. Pensez à sélectionner le compte Azure que vous avez utilisé pour vous inscrire.

3-02-vsc-pick-account.png

Lorsque l'écran suivant s'affiche dans votre navigateur, vous êtes connecté avec Visual Code Studio :

3-03-vsc-login-ok.png

Revenez à Visual Code Studio (vous verrez le nom de votre abonnement Azure, par exemple Azure abonnement 1) :

3-04-vsc-login-in.png

18.5.3 Création d'un projet Azure

Lorsque vous passez la souris sur Azure abonnement 1, un menu s'affiche au-dessus de la section, sélectionnez Créer un projet…:

3-05-vsc-create-project.png

Sélectionnez un dossier local de votre choix pour enregistrer le projet, puis cliquez sur Sélectionner:

3-06-vsc-select-folder.png

Vous allez maintenant entrer dans l'assistant de création de projet. Sélectionnez JavaScript comme langue pour votre projet :

3-07-vsc-select-language.png

Sélectionnez Azure Événement Hub trigger comme premier modèle de fonction de votre projet :

3-08-vsc-function-template.png

Saisissez un nom pour votre fonction, utilisez le format ldap-aep-événement-hub-trigger suivant et appuyez sur Entrée :

3-09-vsc-function-name.png

Sélectionnez Créer un nouveau paramètre d’application locale :

3-10-vsc-function-local-app-setting.png

Sélectionnez un espace de nommage de concentrateur de événements, vous devriez voir le concentrateur de Événements que vous avez défini dans l' exercice 2. Dans cet exemple, l'espace de nommage du centre de Événement est mmeewis-aep-enablement:

3-11-vsc-function-select-espace de nommage.png

Sélectionnez votre concentrateur de Événements, vous devriez voir le concentrateur de Événements que vous avez défini dans l' exercice 2. Dans mon cas, il s'agit de mmeewis-aep-enablement-événement-hub:

3-12-vsc-function-select-event.png

Sélectionnez RootManageSharedAccessKey comme stratégie de concentrateur de Événements :

3-13-vsc-function-select-eventhub-policy.png

Saisissez pour utiliser la valeur Par défaut:

3-14-vsc-eventhub-consumer-group.png

Sélectionnez Ajouter à l’espace de travail pour savoir comment ouvrir votre projet :

3-15-vsc-project-add-to-workspace.png

Une fois le projet créé, cliquez sur index.js pour ouvrir le fichier dans l’éditeur :

3-16-vsc-open-index-js.png

La charge utile envoyée par Adobe Experience Platform à votre Événement Hub inclut les ID de segment :

[{
"segmentMembership": {
"ups": {
"ca114007-4122-4ef6-a730-4d98e56dce45": {
"lastQualificationTime": "2020-08-31T10:59:43Z",
"status": "realized"
},
"be2df7e3-a6e3-4eb4-ab12-943a4be90837": {
"lastQualificationTime": "2020-08-31T10:59:56Z",
"status": "realized"
},
"39f0feef-a8f2-48c6-8ebe-3293bc49aaef": {
"lastQualificationTime": "2020-08-31T10:59:56Z",
"status": "realized"
}
}
},
"identityMap": {
"ecid": [{
"id": "08130494355355215032117568021714632048"
}]
}
}]

Notre fonction Événement Hub ajoutera le nom du segment pour chacun des segments dans la charge utile de réponse AEP. Pour ce faire, notre fonction azure appelle une fonction d'exécution E/S Adobe pour récupérer les définitions de segment à partir de Adobe Experience Platform. Cette fonction d’exécution renvoie des définitions de segment dont le nom de segment s’début avec tous et votre ldap. Les segments précédés de tous sont des segments par défaut utilisés par votre environnement Adobe Experience Platform, par exemple tous - Visiteur de page d'accueil.

La réponse que vous recevrez dans le code Visual Studio aura pas mal de segments qui s'début avec tous, elle devrait également inclure votre segment ldap - Luma Sports Fan . Dans le cas contraire, le nom du segment n’est probablement pas correct :

{
  "segments": {
    "39f0feef-a8f2-48c6-8ebe-3293bc49aaef": {
      "description": "mmeewis - Citi Signal Sports Fan",
      "name": "mmeewis - Citi Signal Sports Fan"
    },
    "a77d96aa-d166-43b1-baba-005d35261b8a": {
      "description": "all - Interest in Nadia Elements Shell",
      "name": "all - Interest in Nadia Elements Shell"
    },
    "ca114007-4122-4ef6-a730-4d98e56dce45": {
      "description": "all - Homepage Visitors",
      "name": "all - Homepage Visitors"
    }
  }
}

Remplacez le code du fichier index.js de votre code Visual Studio par le code ci-dessous. Ce code sera exécuté chaque fois que le CDP en temps réel de Adobe Experience Platform envoie des qualifications de segment à votre destination Événement Hub. Dans notre exemple, le code consiste simplement à afficher et à améliorer la charge utile reçue. Mais vous pouvez imaginer n'importe quelle fonction pour traiter les qualifications des segments en temps réel.

// Marc Meewis - Solution Consultant Adobe - 2020
// Adobe Experience Platform Enablement - Module 18

const request = require('request');

const sandbox = "--module18sandbox--";
const ldap = "--demoProfileLdap--";
const segmentDefAPIEndpoint = "--jwtSegment--";

// Main function
// -------------
// This azure function is fired for each segment activated to the Adobe Exeperience Platform Real-time CDP Azure
// Eventhub destination
// This function enriched the received segment payload with the name fo the segment.
// You can replace this function with any logic that is require to process and deliver
// Adobe Experience Platform segments in real-time to any application or platform that
// would need to act upon an AEP segment qualiification.
//

module.exports = async function (context, eventHubMessages) {

    return new Promise (function (resolve, reject) {

        // fetch aep segment definitions first

        getAEPSegmentInfo().then(function(segments) {

            eventHubMessages.forEach((message, index) => {

                // process each eventhub message

                var segmentKeys = Object.keys(message.segmentMembership.ups);

                for (var segmentKey of segmentKeys) {

                    // lookup the segment-id in the segment definitions and add the
                    // the segment name to the eventhub payload

                    var segmentContent = "";

                    if (segments.hasOwnProperty(segmentKey)) {
                        segmentName = segments[segmentKey].name;
                    }
                    else {
                        segmentName = "Not Found";
                    }

                    // add the segment name to the payload

                    message.segmentMembership.ups[segmentKey].segmentName = segmentName;

                }

            });

            // output the enriched Adobe Experience Platform payload send to Azure Eventhub

            context.log('Message : ' + JSON.stringify(eventHubMessages, null, 2));

            resolve();

        });

    });

};


// helper functions

function extractSegmentDenitions(segments, segmentdata) {

    for (var s=0; s < segmentdata.length; s++) {
        var segmentDef = segmentdata[s];

        var segment = {};

        segment.name = segmentDef.name;
        segment.description = "";
        if (segmentDef.hasOwnProperty("description")) {
            segment.description = segmentDef.description;
        }

        segments[segmentDef.id] = segment;

    }

    return segments;

}



async function getAEPSegmentDefinitions(segmentFilter, segments) {

    return new Promise (function (resolve, reject) {

        const allSegmentsAPICall = segmentDefAPIEndpoint + "?segmentFilter=" + segmentFilter + "&sandboxId=" + sandbox;

        var options = {
            method:'get',
            url:allSegmentsAPICall
        };

        request(options, function (error, response, body) {
            if (error)
                reject(error);
            else {

                segmentsResponse = JSON.parse(body)

                segments = extractSegmentDenitions(segments, segmentsResponse.segmentData.segments);

                resolve(segments);
            }

        });

    });

}

async function getAEPSegmentInfo() {

    var segments = {};

    return new Promise (async function (resolve, reject) {

        segments = await getAEPSegmentDefinitions("all", segments);

        segments = await getAEPSegmentDefinitions(ldap, segments);

        resolve(segments);

    });

}

Après avoir collé le code ci-dessous dans votre fichier index.js, veillez à modifier la ligne 4 pour refléter votre ldap, dans cet exemple qui est mmeewis:

const ldap = "mmeewis";

Le résultat doit se présenter comme suit :

3-16b-vsc-edit-index-js.png

18.5.4 Exécution du projet Azure

Il est maintenant temps d'exécuter votre projet. À ce stade, nous ne déploierons pas le projet sur Azure. Nous l'exécuterons localement en mode de débogage. Sélectionnez l’icône Exécuter, puis cliquez sur la flèche verte. Lors de la première exécution de votre projet en mode de débogage, vous devrez joindre un compte d'enregistrement Azure, cliquez sur Sélectionner un compte d'enregistrement.

3-17-vsc-run-project.png

Dans la liste des comptes d'enregistrement, sélectionnez celui que vous avez créé dans le cadre de 18.1.4 Configuration de votre compted'Enregistrement Azure. Votre compte d’enregistrement est nommé ldapaepstorage, par exemple : mmeewisaepstorage.

3-22-vsc-select-enregistrement-account.png

Votre projet est maintenant en cours d’exécution et répertorie les événements dans le Événement Hub. Au cours de l'exercice suivant, vous allez démontrer un comportement sur le site Web Citi Signal qui vous qualifiera pour ces segments. Par conséquent, vous recevrez une charge utile de qualification de segment dans le terminal de votre fonction de déclenchement du concentrateur de Événement :

3-23-vsc-application-started.png

18.5.5 Arrêt du projet Azure

Pour arrêter votre projet, sélectionnez l'onglet Terminal , cliquez dans la fenêtre Terminal et appuyez sur CMD-C sous OSX ou CTRL-C sous Windows :

3-24-vsc-application-stop.png

Étape suivante : 18.6 Scénario de bout en bout

Revenir au module 18

Revenir à tous les modules

Sur cette page