18.5 Crea il progetto Microsoft Azure

18.5.1 Come acquisire familiarità con le funzioni di Azure Event Hub

Funzioni di Azure ti consente di eseguire piccole parti di codice (denominate Funzioni) senza preoccuparsi delle infrastrutture applicative. Con le funzioni di Azure, l’infrastruttura cloud fornisce tutti i server aggiornati necessari per mantenere l’applicazione in esecuzione su larga scala.

Una funzione è attivato per un tipo specifico di evento. I trigger supportati includono la risposta a cambiamenti nei dati, risposte a messaggi (ad esempio, hub eventi), in esecuzione su una pianificazione o come risultato di una richiesta HTTP.

Funzioni di Azure è un servizio di elaborazione senza server che consente di eseguire il codice attivato dall’evento senza dover eseguire esplicitamente il provisioning o gestire l’infrastruttura.

Gli hub eventi di Azure si integrano con le funzioni di Azure per un’architettura senza server.

18.5.2 Aprire il codice di Visual Studio e accedere ad Azure

Il codice di Visual Studio consente di…

  • definire ed eseguire il binding delle funzioni di Azure agli hub eventi
  • test locale
  • distribuzione in Azure
  • esecuzione di una funzione di log remoto

Apri codice di Visual Studio

Per aprire l'immissione di codice di Visual Studio visivo nella ricerca del sistema operativo (ricerca Spotlight su OSX, ricerca nella barra delle applicazioni di Windows). Se non lo trovi, devi ripetere i passaggi descritti in Esercizio 0 - Prerequisiti.

visual-studio-code-icon.png

Accesso ad Azure

Quando si effettua l’accesso all’account Azure utilizzato per la registrazione in Esercizio 0 - Prerequisiti, il codice di Visual Studio consente di trovare ed eseguire il binding di tutte le risorse di Event Hub.

Fai clic sul pulsante Azure in Visual Studio Code. Se non disponi di tale opzione, potrebbe essersi verificato un errore durante l'installazione delle estensioni richieste.

Seleziona successivo Accesso ad Azure:

3-01-vsc-open.png

Verrai reindirizzato al tuo browser per l'accesso. Ricordare di selezionare l’account Azure che hai utilizzato per la registrazione.

3-02-vsc-pick-account.png

Quando nel browser viene visualizzata la seguente schermata, si è connessi con Visual Code Studio:

3-03-vsc-login-ok.png

Torna a Visual Code Studio (verrà visualizzato il nome della sottoscrizione di Azure, ad esempio Sottoscrizione di Azure 1):

3-04-vsc-logged-in.png

18.5.3 Creare un progetto Azure

Quando passi il puntatore del mouse Sottoscrizione di Azure 1, sopra la sezione viene visualizzato un menu, seleziona Crea nuovo progetto…:

3-05-vsc-create-project.png

Seleziona una cartella locale a scelta per salvare il progetto e fai clic su Seleziona:

3-06-vsc-select-folder.png

Ora verrà visualizzata la procedura guidata di creazione del progetto. Seleziona Javascript come lingua del progetto:

3-07-vsc-select-language.png

Seleziona Trigger dell’hub eventi di Azure come primo modello di funzione del progetto:

3-08-vsc-function-template.png

Immettere un nome per la funzione, utilizzare il formato seguente ldap-aep-event-hub-trigger e premere enter:

3-09-vsc-function-name.png

Seleziona Crea nuova impostazione per app locale:

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

Seleziona uno spazio dei nomi hub eventi per visualizzare l’hub eventi definito in Esercizio 2. In questo esempio lo spazio dei nomi Event Hub è mmeewis-aep-enablement:

3-11-vsc-function-select-namespace.png

Seleziona il tuo Event Hub, dovresti vedere l’Hub eventi definito in Esercizio 2. Nel mio caso, mmeewis-aep-enablement-event-hub:

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

Seleziona RootManageSharedAccessKey come criterio dell’hub eventi:

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

Immettere l'utilizzo Predefinito:

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

Seleziona Aggiungi all’area di lavoro su come aprire il progetto:

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

Dopo aver creato il progetto, fai clic su index.js per aprire il file nell’editor:

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

Il payload inviato da Adobe Experience Platform al tuo Event Hub includerà gli ID del segmento:

[{
"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"
}]
}
}]

La nostra funzione Event Hub aggiungerà il nome del segmento per ciascuno dei segmenti nel payload di risposta AEP. A tal fine, la nostra funzione azure richiamerà una funzione Adobe IO Runtime per recuperare le definizioni dei segmenti da Adobe Experience Platform. Questa funzione di runtime restituisce le definizioni dei segmenti di cui iniziano i nomi dei segmenti tutto e le ldap. I segmenti hanno il prefisso tutto sono segmenti predefiniti utilizzati, ad esempio, dall’ambiente Adobe Experience Platform all - Visitatore della homepage.

La risposta che riceverai in Visual Studio Code avrà diversi segmenti che iniziano con tutto, dovrebbe inoltre includere il tuo ldap - Luma Sports Fan segmento. In caso contrario, la denominazione del segmento potrebbe non essere corretta:

{
  "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"
    }
  }
}

Sostituisci il codice contenuto in index.js del codice di Visual Studio con il codice seguente. Questo codice verrà eseguito ogni volta che Adobe Experience Platform Real-time CDP invia le qualifiche dei segmenti alla destinazione Event Hub. Nel nostro esempio, il codice riguarda solo la visualizzazione e l’ottimizzazione del payload ricevuto. Ma potete immaginare qualsiasi tipo di funzione per elaborare le qualifiche dei segmenti in tempo reale.

// 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);

    });

}

Dopo aver incollato il codice sottostante nel tuo index.js, assicurati di modificare Linea 4 per riflettere il tuo ldap, in questo esempio che è mmeewis:

const ldap = "mmeewis";

Il risultato dovrebbe essere simile al seguente:

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

18.5.4 Esecuzione del progetto Azure

Ora è il momento di eseguire il progetto. A questo punto il progetto non verrà distribuito ad Azure. Lo eseguiremo localmente in modalità di debug. Seleziona l’icona Esegui e fai clic sulla freccia verde. La prima volta che esegui il progetto in modalità di debug, dovrai allegare un account di archiviazione di Azure e fare clic su Seleziona account di archiviazione.

3-17-vsc-run-project.png

Dall'elenco degli account di archiviazione, selezionare quello creato come parte 18.1.4 Configurare l'account di archiviazione di Azure. L'account di archiviazione è denominato ldapaepstorage ad esempio: mmeewisaepstorage.

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

Il progetto è ora in esecuzione ed è elencato per gli eventi nell’Hub eventi. Nel prossimo esercizio dimostrerai il comportamento sul sito web Citi Signal che ti qualificherà per questi segmenti. Di conseguenza, riceverai un payload di qualificazione dei segmenti nel terminale della funzione di attivazione di Event Hub:

3-23-vsc-application-started.png

18.5.5 Arresta progetto Azure

Per interrompere il progetto, seleziona la Terminale scheda, fare clic nella finestra del terminale e premere CMD-C su OSX o CTRL+C su Windows:

3-24-vsc-application-stop.png

Passaggio successivo: 18.6 Scenario end-to-end

Torna al modulo 18

Torna a tutti i moduli

In questa pagina