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

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

最終更新日:Sep 09, 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. 関数の詳細ページで、トリガータブからバージョンまたはエイリアスを選択します。バージョンまたはエイリアスドロップダウンリストをクリックし、トリガーの作成をクリックします。

  5. [トリガーの作成] パネルでパラメーターを指定し、[OK] をクリックします。

    パラメーター

    説明

    トリガータイプ

    [MNS Triggered by Topic] を選択します。

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

    名前

    トリガー名を入力します。

    trigger-mns

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

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

    LATEST

    MNSリージョン

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

    中国 (成都)

    トピック

    リストからトピックを選択します。

    Mytopic

    フィルタータグ

    メッセージフィルタリング用のタグを指定します。

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

    tag

    イベント形式

    イベント形式を選択します。 有効な値:

    • ストリーム

    • JSON

    JSON

    再試行ポリシー

    再試行ポリシーを選択します。 有効な値:

    • バックオフ再試行

    • 指数減衰再試行

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

    バックオフの再試行

    ロール名

    [AliyunMNSNotificationRole] を選択します。

    説明

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

    AliyunMNSNotificationRole

    トリガーが作成されると、[トリガー] タブに表示されます。 既存のトリガーを変更または削除するには、「トリガーの管理」をご参照ください。

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

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

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

    MNSトピックで公開されるメッセージは、ハンドラー関数のイベントであるnotifyContentFormatに基づいて処理されます。 詳細については、「NotifyContentFormat」をご参照ください。

    • イベント形式STREAMに設定した場合:

      • メッセージにメッセージ属性が含まれていない場合のイベントパラメーターの形式を次のコードに示します。

        説明

        メッセージにメッセージ属性が含まれていない場合、eventパラメーターの内容はJSON形式の文字列になります。

        # The message body. 
        'hello topic'
      • メッセージにメッセージ属性が含まれている場合のeventパラメーターの形式を次のコードに示します。

        説明

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

           {
                "body": "hello topic",
                "attrs": {
                    "Extend": "{\\"key\\":\\"value\\"}"
                }
            }                    
    • イベント形式をJSONに設定した場合:

      • メッセージにメッセージ属性が含まれていない場合のイベントパラメーターの形式を次のコードに示します。

            {
                "TopicOwner": "118620210433****",
                "Message": "hello topic",
                "Subscriber": "118620210433****",
                "PublishTime": 1550216480040,
                "SubscriptionName": "test-fc-subscribe",
                "MessageMD5": "BA4BA9B48AC81F0F9C66F6C909C3****",
                "TopicName": "Mytopic",
                "MessageId": "2F5B3C082B923D4EAC694B76D928****"
            }        
                                    
      • メッセージにメッセージ属性が含まれている場合のeventパラメーターの形式を次のコードに示します。

        説明

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

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

    次の表に、eventパラメーターのフィールドを示します。

    項目

    値のタイプ

    説明

    キー

    String

    value

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

    TopicOwner

    String

    118620210433 ****

    トピックをサブスクライブしたアカウントのID。

    メッセージ

    String

    こんにちはトピック

    メッセージの内容。

    サブスクライバー

    String

    118620210433 ****

    ユーザーのアカウント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, record an event to Tablestore. 
      return "OK"                     
  2. コードタブでテスト機能をクリックします。

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

追加情報

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

  • Serverless Devsを使用してトリガーを設定します。 詳細については、「Serverless Devs」をご参照ください。

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

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