Azure函数允许您运行少量代码(称为函 数),无需担心应用程序基础结构。 借助Azure功能,云基础架构可提供您需要的所有最新服务器,使应用程序保持大规模运行。
函数由 特定 类型的事件触发。 支持的触发器包括响应数据中的更改、响应消息(例如事件中心)、在计划上运行或作为HTTP请求的结果。
Azure函数是一种无服务器的计算服务,它允许您运行事件触发的代码,而无需显式设置或管理基础结构。
Azure事件集线器与Azure功能相集成,用于无服务器架构。
Visual Studio代码使您能轻松……
要打开Visual Studio代码,请 在您 的操作系统搜索中输入visual(OSX上的聚焦搜索,在窗口的任务栏中搜索)。 如果找不到,您需要重复练习0 —— 先决条件 中所述的步骤。
当您使用您用来注册练习0 —— 先决条件 的Azure帐户登录时,Visual Studio代码将允许您查找并绑定所有事件中心资源。
单击Visual Studio Code中的Azure图标。 如果您没有此选项,则安装所需的扩展时可能出现问题。
接下来选 择登录到Azure:
您将被重定向到浏览器以登录。 请记住选择您用于注册的Azure帐户。
当您在浏览器中看到以下屏幕时,您将使用Visual Code Studio登录:
返回Visual Code Studio(您将看到Azure订阅的名称,例如Azure 订阅1):
当您将鼠标悬 停在Azure订阅 1上时,该部分上方将显示一个菜单 ,选择“创建新项目……”:
选择您选择的本地文件夹以保存项目,然后单击“选 择:
您现在将进入项目创建向导。 选择 Javascript 作为项目的语言:
选 择Azure事件中心触发器 ,作为项目的第一个函数模板:
为函数输入名称,使用以 下格式ldap-aep-事件-hub -trigger并按Enter:
选择 创建新的本地应用程序设置:
选择一个事件中心命名空间,您应当看到在练习2中定义的事件 中心。 在此示例中,事件中心 命名空间为mmeewis-aep-enablement:
选择事件中心,您应看到在练习2中定义的事件 中心。 在我的例子 中,这是mmeewis-aep-enablement-事件-hub:
选择 RootManageSharedAccessKey 作为事件中心策略:
输入以使用 默认:
选择 添加到工作区 ,了解如何打开项目:
创建项目后,单击 index.js ,在编辑器中打开文件:
由Adobe Experience Platform发送到您的事件中心的有效负荷将包括段ID:
[{
"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"
}]
}
}]
我们的事件中心功能将在AEP响应有效负荷中为每个区段添加区段名称。 为此,我们azure函数将调用AdobeIO运行时函数从Adobe Experience Platform获取段定义。 此运行时函数将返回段定义,段名称与所有和您的ldap 开始 ,以便 。 前缀为“全 部 ”的区段是您的Adobe Experience Platform环境使用的 默认区段,例如全部——主页访客。
在Visual Studio代码中您将收到的响应将包含许多与所有内容开始的 区段,它还应包 括ldap - Luma Sports Fan 区段。 否则,您命名区段的命名可能不正确:
{
"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"
}
}
}
将Visual Studio代码的index.js中的代码替换为下面的代码。 每次Adobe Experience Platform实时CDP向您的事件中心目标发送细分资格时,都将执行此代码。 在我们的示例中,该代码只是关于显示和增强接收的有效负荷。 但是,您可以想象任何一种功能来实时处理细分资格。
// 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);
});
}
在index.js中粘贴下面的代码后,请确保修 改第4行 ,以反映您的ldap,在此示例中,即 mmeewis:
const ldap = "mmeewis";
结果应该如下:
现在是运行项目的时候了。 目前,我们不会将项目部署到Azure。 我们将在调试模式下本地运行它。 选择“运行”图标,单击绿色箭头。 首次在调试模式下运行项目时,您需要附加一个Azure存储帐户,单击“选 择存储帐户”。
从存储帐户的列表中,选择您作为18.1.4设置您的Azure 存储帐户的一部分创建的帐户。 您的存储帐户 名为 ldapapstorage,例如: mmeewisaepstorage。
您的项目现已启动并正在运行,并且列出给事件中心的事件。 在下一个练习中,您将在Citi Signal网站上展示符合这些细分资格的行为。 因此,您将在事件中心触发功能的终端中收到段资格有效负荷:
要停止项目,请选择“终 端 ”选项卡,在终端窗口中单击,然 后在OSX上按CMD -C ,或在Windows 上按CTRL-C:
下一步: 18.6端到端方案