すべてのプロダクト
Search
ドキュメントセンター

Function Compute:MNSトピックトリガー

最終更新日:Jul 24, 2024

Message Service (MNS) トピックをイベントソースとして使用して、EventBridgeを使用してMNSをFunction Computeと統合できます。 Function ComputeでMNSトピックトリガーを設定して、関連する関数をトリガーして、トピックに送信されるメッセージに対してカスタム処理を実行できます。

概要

MNSは、高いスケーラビリティ、効率、信頼性、セキュリティ、可用性を備えた分散メッセージングサービスです。 MNSにより、アプリケーション開発者は、アプリケーションの分散コンポーネント間でデータと通知を転送し、疎結合システムを構築できます。 MNSでは、メッセージはトピックに公開されます。 発行者は、PublishMessage操作を呼び出して、メッセージをトピックに発行できます。 トピックのサブスクライバーがメッセージを受け取ります。 詳細については、「PublishMessage」をご参照ください。

MNSトピックのトリガーを設定することは、関数をMNSトピックのサブスクライバーとして登録することと同じです。 発行者がメッセージをMNSトピックに発行すると、メッセージは関数に渡され、関数をトリガーする関数ハンドラーのイベントパラメーターとして使用されます。 詳細については、「基本」をご参照ください。

MNSとFunction Computeの統合には、次の利点があります。

  • メールまたはテキストメッセージでメッセージを送信する前に、メッセージに対して高度な操作を実行できます。

  • HTTPエンドポイントでサービスを作成しないようにします。

  • 豊富なカスタム操作をサポートします。 たとえば、Slackにメッセージを送信したり、指定したメッセージを保持したりできます。

image

始める前に

使用上の注意

  • MNSトピックと関連付けられるFunction Compute関数は、同じリージョンに存在する必要があります。

  • 再帰ループは避けてください。

    たとえば、関数のコードを記述するときは、次のロジックを回避する必要があります。トピックaは関数Bをトリガーし、関数Bは新しいメッセージをトピックAに発行してから関数Bを再度トリガーします。 この論理は、関数呼び出しの無限ループをもたらす。

手順1: MNSトピックトリガーの作成

  1. Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[関数] をクリックします。

  2. 上部のナビゲーションバーで、リージョンを選択します。 [関数] ページで、管理する関数をクリックします。

  3. 機能の詳細ページで、[設定] タブをクリックします。 左側のナビゲーションウィンドウで、[トリガー] をクリックします。 次に、[トリガーの作成] をクリックします。

  4. トリガーの作成パネルで、パラメーターを設定し、OK.

    パラメーター

    説明

    トリガータイプ

    トリガーのタイプ。 [MNS Triggered by Topic] を選択します。

    トピックによってトリガーされたMNS

    名前

    トリガーの名前。

    trigger-mns

    バージョンまたはエイリアス

    トリガーのバージョンまたはエイリアス。 デフォルト値: LATEST。 別のバージョンまたはエイリアスのトリガーを作成する場合は、関数の詳細ページの右上隅でバージョンまたはエイリアスを選択します。 バージョンとエイリアスの詳細については、「バージョンの管理」および「エイリアスの管理」をご参照ください。

    LATEST

    MNSリージョン

    MNSトピックが存在するリージョン。 MNSトピックは、function Computeの関数と同じリージョンに存在する必要があります。

    中国 (成都)

    トピック

    既存のMNSトピックの名前。

    Mytopic

    フィルタータグ

    メッセージのフィルタリングに使用されるタグ。

    この関数は、指定されたフィルタリングタグを含むメッセージが受信された場合にのみ呼び出されます。

    tag

    イベント形式

    イベントの形式。 オプション:

    • ストリーム

    • JSON

    JSON

    再試行ポリシー

    再試行ポリシー。 オプション:

    • バックオフ再試行

    • 指数減衰再試行

    再試行ポリシーを指定する方法の詳細については、「NotifyStrategy」をご参照ください。

    バックオフの再試行

    ロール名

    [AliyunMNSNotificationRole] を選択します。

    説明

    上記のパラメーターを設定したら、[OK] をクリックします。 このタイプのトリガーを初めて作成する場合は、表示されるメッセージの [今すぐ許可] をクリックします。

    AliyunMNSNotificationRole

ステップ2: 関数の入力パラメータを設定する

  1. 関数の詳細ページの [コード] タブで、[テスト関数] の隣のimage.pngアイコンをクリックし、ドロップダウンリストから [テストパラメーターの設定] を選択します。

  2. [テストパラメーターの設定] パネルで、[新しいテストイベントの作成] または [既存のテストイベントの変更] タブをクリックし、イベント名とイベント内容を入力し、[OK] をクリックします。

    MNSトピックにパブリッシュされるメッセージは、メッセージ本文の形式に基づいて処理されます。 これにより、function Computeで関数を呼び出すために使用されるイベントが作成されます。 詳細については、「NotifyContentFormat」をご参照ください。

    • MNSトピックトリガーのevent formatパラメーターをSTREAMに設定した場合のイベントコンテンツの形式の例:

      • 次のサンプルコードでは、メッセージにメッセージ属性が含まれていない場合のイベントコンテンツの形式の例を示します。

        説明

        メッセージにメッセージ属性が含まれていない場合、イベントの内容はJSON形式の文字列になります。

        # メッセージ本文。 
        'hello topic' 
      • 次のサンプルコードは、メッセージにメッセージ属性が含まれている場合のイベントコンテンツの形式の例を示しています。

        説明

        イベントのコンテンツには、メッセージ属性に関連するキーと値のペアが含まれます。 詳細については、「PublishMessage」をご参照ください。

            {
                "body": "hello topic" 、
                "attrs": {
                    "Extend": "{\\" key\\":\\" value\\"}"
                }
            }                    
    • MNSトピックトリガーのevent formatパラメーターをJSONに設定した場合のイベントコンテンツの形式の例:

      • 次のサンプルコードでは、メッセージにメッセージ属性が含まれていない場合のイベントコンテンツの形式の例を示します。

            {
                "TopicOwner": "118620210433****",
                "Message": "hello topic",
                "Subscriber": "118620210433****",
                "PublishTime": 1550216480040,
                "SubscriptionName": "test-fc-subscribe",
                "MessageMD5": "BA4BA9B48AC81F0F9C66F6C909C3****",
                "TopicName": "Mytopic",
                "MessageId": "2F5B3C082B923D4EAC694B76D928****"
            }        
                                    
      • 次のサンプルコードは、メッセージにメッセージ属性が含まれている場合のイベントコンテンツの形式の例を示しています。

        説明

        イベントのコンテンツには、メッセージ属性に関連するキーと値のペアが含まれます。 詳細については、「PublishMessage」をご参照ください。

            {
                "key": "value",
                "TopicOwner": "118620210433****",
                "Message": "hello topic",
                "Subscriber": "118620210433****",
                "PublishTime": 1550216302888,
                "SubscriptionName": "test-fc-subscribe",
                "MessageMD5": "BA4BA9B48AC81F0F9C66F6C909C3****",
                "TopicName": "Mytopic",
                "MessageId": "2F5B3C281B283D4EAC694B742528****"
            }
                                    

    イベントのパラメーターを次の表に示します。

    パラメーター

    データ型

    説明

    キー

    String

    value

    メッセージ属性に関連するキーと値のペア。

    TopicOwner

    String

    118620210433 ****

    MNSトピック所有者のアカウントID。

    メッセージ

    String

    こんにちはトピック

    メッセージの内容。

    サブスクライバー

    String

    118620210433 ****

    MNSトピックをサブスクライブするユーザーのアカウントID。

    PublishTime

    Int

    1550216302888

    メッセージの発行時刻。

    SubscriptionName

    String

    test-fc-subscribe

    サブスクリプションの名前。

    MessageMD5

    String

    BA4BA9B48AC81F0F9C66F6C909C3 ****

    メッセージ本文のMD5ハッシュ値。

    TopicName

    String

    Mytopic

    MNSトピックの名前。

    MessageId

    String

    2F5B3C281B283D4EAC694B742528 ****

    メッセージ ID

ステップ3: 関数コードを記述し、関数をテストする

MNSトピックトリガーを作成した後、関数コードを記述し、関数コードをテストして、コードが有効かどうかを確認できます。

  1. 関数の詳細ページで、コードタブで、コードエディターに関数コードを入力し、デプロイ.

    この例では、関数コードはPythonで記述されています。 次のサンプルコードは、MNSトピックトリガーの関数テンプレートとして使用できます。

    import json
    import logging
    
    def handler(event, context):
      logger = logging.getLogger()
      logger.info("mns_topic trigger event = {}".format(event))
      # For example, you can record an event to Tablestore. 
      return "OK"                     

    を返す

  2. クリックテスト機能.

    関数の実行後、[コード] タブで結果を表示できます。

詳細情報

Function Computeコンソールに加えて、次のいずれかの方法を使用してトリガーを設定できます。

  • Serverless Devsツールを使用してトリガーを設定します。 その他の操作については、を参照してください。

  • SDKを使用してトリガーを設定します。 詳細は、SDK をご参照ください。

既存のトリガーを変更または削除するには、「トリガーの管理」をご参照ください。