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.
Il codice di Visual Studio consente di…
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.
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:
Verrai reindirizzato al tuo browser per l'accesso. Ricordare di selezionare l’account Azure che hai utilizzato per la registrazione.
Quando nel browser viene visualizzata la seguente schermata, si è connessi con Visual Code Studio:
Torna a Visual Code Studio (verrà visualizzato il nome della sottoscrizione di Azure, ad esempio Sottoscrizione di Azure 1):
Quando passi il puntatore del mouse Sottoscrizione di Azure 1, sopra la sezione viene visualizzato un menu, seleziona Crea nuovo progetto…:
Seleziona una cartella locale a scelta per salvare il progetto e fai clic su Seleziona:
Ora verrà visualizzata la procedura guidata di creazione del progetto. Seleziona Javascript come lingua del progetto:
Seleziona Trigger dell’hub eventi di Azure come primo modello di funzione del progetto:
Immettere un nome per la funzione, utilizzare il formato seguente ldap-aep-event-hub-trigger e premere enter:
Seleziona Crea nuova impostazione per app locale:
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:
Seleziona il tuo Event Hub, dovresti vedere l’Hub eventi definito in Esercizio 2. Nel mio caso, mmeewis-aep-enablement-event-hub:
Seleziona RootManageSharedAccessKey come criterio dell’hub eventi:
Immettere l'utilizzo Predefinito:
Seleziona Aggiungi all’area di lavoro su come aprire il progetto:
Dopo aver creato il progetto, fai clic su index.js per aprire il file nell’editor:
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:
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.
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.
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:
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:
Passaggio successivo: 18.6 Scenario end-to-end