15. エンタープライズグレード

15.1. テナント管理

15.1.1. サブテナントを作成する

  1. 画面右上のアプリケーションスイッチャ>「管理」を押下し、管理画面に移動します。そして、ナビメニューから「テナント」>「サブテナント」を押下します。次に画面中央(初回のみ)、またはトップメニューバー右にある「テナントを作成」ボタンを押下します。

_images/TUT_15-1-1.png

  1. 必須事項(ドメイン/URL、名前、連絡先電話番号、管理者のEメールアドレス、管理者のユーザー名)を入力します。

  2. 「保存」を押下します。

_images/TUT_15-1-2.png

  1. 管理者のEメールアドレスに、パスワードリセットメールが飛ぶので、1章の通りパスワードリセットを実施することで、サブテナントにログインができ、以下の画面が表示されます。

_images/TUT_15-1-3.png



15.1.2. サブテナントの削除受付

  1. それぞれのサブテナントの右側にあるメニューアイコンをクリックして、削除受付をクリックします。

_images/TUT_15-2-1.png

  1. 「テナントの削除受付」ポップアップが出るので、「削除受付」を押下します。

3. 親テナント管理者のパスワードを入力し、「確認」を押下すると、該当サブテナントの削除受付が実施されます。削除受付後、該当サブテナントは課金対象から除外され、実際の削除処理は、6か月経過後にバッチ処理によって実行されます。 ※削除受付後から6ヶ月間に限り削除受付の取り下げが可能です。

_images/TUT_15-2-2.png


_images/TUT_15-2-3.png



15.1.3. サブテナントの削除受付を取り消す


警告

削除受付後から6ヶ月間に限り、削除取り消しが可能です。削除取り消しをクリックすることで再度アクティブ(課金対象)となります。 アクティブ化する際は削除受付時と異なり、ボタンを押下すると即時反映されますので本操作の際はご注意ください。


  1. 削除受付を取り消したいサブテナントの右側にあるメニューアイコンをクリックして、削除取り消しをクリックします。

_images/TUT_15-3-1.png

2. 「削除取り消し」を押下すると、該当のサブテナントが再アクティブ化され削除受付が取り消された旨のポップアップが表示されます。 ※アクティブ化すると当月より課金対象となります。

_images/TUT_15-3-2.png


15.2. シェアードカスタムストリーミング処理機能

15.2.1. シェアードカスタムストリーミング処理機能について

〇 エンタープライズグレードでのみ利用できる機能です。
〇 親テナントのリソース(高度なデータ処理を提供するカスタムストリーミング処理機能)をサブテナントでも共用し、サブテナントにカスタムルールの適用が可能です。
〇 サブテナントが増えても親テナントでカスタムルールの一元管理が可能です。

シェアードカスタムストリーミング処理機能では、以下のApama-ctrl マイクロサービスで実行されます。
・Apama-ctrl-mt-1c-4g
テナントに Apama-ctrl-mt-1c-4g マイクロサービスが登録されている場合、次のことが適用されます。
・マルチテナント サポート
・EPL アプリは、マイクロサービスを所有するテナントでのみ有効になり、サブテナントでは無効です。
・分析モデルとスマート ルールがサポートされています。

マルチテナントとコード例については以下の外部リンクをご参照ください。(英語のドキュメントになります)



この後は、上記リンクに掲載されているサンプルコードを抜粋して紹介します。
まず、測定値がしきい値を超えた際にアラームを発生させる、シングルテナント向けのサンプルコードです。

シングルテナント向けサンプルコード
using com.apama.cumulocity.MeasurementFragment;
using com.apama.cumulocity.Alarm;

monitor ThresholdAlarmRule {
    constant float THRESHOLD := 10.0;

    action onload() {
        monitorMeasurements();
    }

    action monitorMeasurements() {
        monitor.subscribe(MeasurementFragment.SUBSCRIBE_CHANNEL);

        on all MeasurementFragment(type="my_measurement", valueFragment="my_frag", valueSeries="my_series") as m {
            if m.value > THRESHOLD {
                Alarm alarm := Alarm("","my_alarm",m.source,currentTime,"Threshold exceeded",
                                     Alarm.STATUS_ACTIVE,Alarm.SEVERITY_MINOR,1,new dictionary<string,any>);

                send alarm to Alarm.SEND_CHANNEL;
            }
        }
    }
}

続いて、先ほどのシングルテナント向けサンプルコードを、マルチテナント環境でも動作するように変換した例を示します。

マルチテナント向けサンプルコード

// マルチテナント用に以下3行追加
using com.apama.cumulocity.TenantSubscriptionNotifier;
using com.apama.cumulocity.TenantDetails;
using com.apama.cumulocity.SharedConnection;

using com.apama.cumulocity.MeasurementFragment;
using com.apama.cumulocity.Alarm;

// マルチテナント用に以下1行追加
using com.apama.cumulocity.notifications2.SubscribeTenantNotifications;

monitor ThresholdAlarmRule {
    constant float THRESHOLD := 10.0;

// マルチテナント用に以下1行追加
    SharedConnection connection;

// マルチテナント用に以下4行追加
    action onload() {
        TenantSubscriptionNotifier notifier := TenantSubscriptionNotifier.create().
        onSubscription(tenantSubscribed).
        onUnsubscription(tenantUnsubscribed);
    }

// マルチテナント用に以下2行追加
    action tenantSubscribed(TenantDetails tenant) {
        connection := SharedConnection.createForTenant(tenant);

// マルチテナント用に以下1行追加
        monitorMeasurements();
        send SubscribeTenantNotifications(tenant, com.apama.cumulocity.Util.generateReqId()) to         SubscribeTenantNotifications.SEND_CHANNEL;
    }

// マルチテナント用に以下1行修正
    action monitorMeasurements() {
        monitor.subscribe(connection.getChannel(MeasurementFragment.SUBSCRIBE_CHANNEL));

// マルチテナント用に以下2行修正
        on all MeasurementFragment(type="my_measurement", valueFragment="my_frag", valueSeries="my_series") as m {
            if m.value > THRESHOLD {
                Alarm alarm := Alarm("","my_alarm",m.source,currentTime,"Threshold exceeded",
                        "ACTIVE","MINOR",1,new dictionary<string,any>);
                send alarm to connection.getChannel(Alarm.SEND_CHANNEL);
            }
        }
    }

// マルチテナント用に以下3行追加
    action tenantUnsubscribed(string tenantId) {
        connection.destroy();
    }

// マルチテナント用に以下3行追加
    action ondie {
        connection.destroy();
    }
}