18.5 Microsoft Azure Projectの作成

18.5.1 Azureイベントハブ機能の使い方

Azure Functionsを使用すると、アプリケーションのインフラストラクチャを気にすることなく、小さなコード( 関数)を実行できます。 Azure機能を使用すると、クラウドインフラストラクチャは、アプリケーションを規模の拡大に合わせて実行するために必要な最新のサーバーをすべて提供します。

関数は、特定のタイプのイベントに よってトリガされます 。 サポートされるトリガーには、データの変更への応答、イベントのハブなどのメッセージへの応答、スケジュールに従った実行、またはHTTP要求の結果としての実行が含まれます。

Azure Functionsは、インフラストラクチャを明示的にプロビジョニングまたは管理する必要なく、イベントトリガーコードを実行できるサーバーレスの計算サービスです。

Azureイベントハブは、Azure機能と統合され、サーバーレスアーキテクチャを実現します。

18.5.2 Visual Studioコードを開き、Azureにログオンする

Visual Studioコードを使用すると、次の操作が容易に行えます。

  • イベントハブにAzure機能を定義し、バインドする
  • 局所的にテストする
  • Azureに展開
  • リモートログ関数の実行

Visual Studioコードを開く

Visual Studioコードを開くには、オペレーティングシステムの検索 にvisual と入力します(Spotlight search on OSX, Search in Windows's Taskbar)。 見つからない場合は、 演習0 — 前提条件で説明されている手順を繰り返す必要があります

visual-studio-code-icon.png

Azureにログオン

Azureアカウントを使用してログオンし、 演習0 — 前提条件、Visual Studioコードを使用すると、すべてのイベントハブリソースを検索してバインドできます。

Visual Studioコードの Azure アイコンをクリックします。 このオプションがない場合は、必要な拡張機能のインストールで問題が発生した可能性があります。

次に、[ Azureにサインイン]を選択します。

3-01-vsc-open.png

ログインするには、ブラウザーにリダイレクトされます。 登録に使用したAzureアカウントを忘れずに選択してください。

3-02-vsc-pick-account.png

ブラウザに次の画面が表示される場合は、Visual Code Studioを使用してログインします。

3-03-vsc-login-ok.png

Visual Code Studioに戻る(Azure購読の名前が表示されます。例: Azure購読1):

3-04-vsc-logged-in.png

18.5.3 Azureプロジェクトの作成

Azure購読1の上にカーソルを置くと、セクションの上にメニューが表示されます。[ 新しいプロジェクトの作成]を選択します。:

3-05-vsc-create-project.png

選択したローカルフォルダーを選択してプロジェクトを保存し、「 選択」をクリックします。

3-06-vsc-select-folder.png

これで、プロジェクト作成ウィザードが開きます。 プロジェクトの言語として JavaScript を選択します。

3-07-vsc-select-language.png

プロジェクトの最初の 機能テンプレートとして 、Azureイベントハブトリガーを選択します。

3-08-vsc-function-template.png

関数の名前を入力し、 ldap-aep-イベント-hub-triggerの形式を使用して 、Enterキーを押します。

3-09-vsc-function-name.png

「新しいローカルアプリ 設定を作成」を選択します。

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

イベントハブ名前空間を選択します。 演習2で定義したイベントハブが表示されます。 この例では、イベントハブ名前空間はmeewis-aep-enablement です

3-11-vsc-function-select-名前空間.png

イベントハブを選択します。 演習2で定義したイベントハブが表示されます。 私の場合は、 meewis-aep-enablement-​イベント-hub:

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

イベントハブポリシーとして RootManageSharedAccessKey を選択します。

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

Enter to use Default:

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

プロジェクト を追加開く方法に関するワークスペースを作成する場合に選択します

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

プロジェクトを作成したら、 index.jsをクリックして 、エディターでファイルを開きます。

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

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からセグメント定義を取得します。 このランタイム関数は、セグメントで開始に名前を付けたセグメント定義を allldapに返します。 先頭に「 all 」が付いたセグメントは、例えば「 all- Homepage(ホームページの訪問者)」のように、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に以下のコードを貼り付けた後、ldapを反映するように4 行目を必ず変更します(この例では meewis )。

const ldap = "mmeewis";

結果は次のようになります。

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

18.5.4 Azureプロジェクトの実行

これで、プロジェクトを実行する時間が来ました。 この段階では、プロジェクトをAzureに展開しません。 デバッグモードでローカルに実行します。 ファイル名を指定して実行アイコンを選択し、緑の矢印をクリックします。 初めてプロジェクトをデバッグモードで実行する場合は、Azureストレージアカウントを接続し、[ストレージアカウントの 選択]をクリックする必要があります。

3-17-vsc-run-project.png

ストレージアカウントのリストから、18.1.4 Azureストレージアカウントのセットアップの一部として作成したアカウント を選択します。 ストレージアカウントの名前は ldapapstorage(例:ldapapestorage)です。 mewisepstorage.

3-22-vsc-select-ストレージ-account.png

プロジェクトが起動し、実行中で、イベントハブのイベントのリストを作成しています。 次の練習では、Citi SignalのWebサイトで、これらのセグメントの資格を得るための動作を実演します。 その結果、イベントハブのトリガー機能の端末に、セグメント資格ペイロードを受け取ります。

3-23-vsc-application-started.png

18.5.5 Azureプロジェクトの停止

プロジェクトを停止するには、 ターミナル タブを選択し、ターミナルウィンドウ内をクリックして、OSXで Cmd-Cキーを押すか、Windowsで Ctrl-Cキーを押します。

3-24-vsc-application-stop.png

次の手順: 18.6エンドツーエンドのシナリオ

モジュール18に戻る

すべてのモジュールに戻る

このページ