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

Function Compute:Simple Message Queue (旧称:MNS) のトピックトリガー

最終更新日:Dec 10, 2025

Simple Message Queue (formerly MNS) のトピックは、EventBridge を使用してイベントソースとして利用できます。Function Compute でトピックトリガーを設定し、関連付けられた関数をトリガーして、トピックに送信されたメッセージに対してカスタム処理を実行できます。

背景情報

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

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

Simple Message Queue (formerly MNS) と Function Compute の統合には、次の利点があります。

  • メッセージをメールやショートメッセージで送信する前に、メッセージに対して高度な操作を実行できます。

  • HTTP エンドポイントでサービスを作成する必要がなくなります。

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

前提条件

注意事項

  • 関連付ける Simple Message Queue (formerly MNS) のトピックと Function Compute の関数は、同じリージョンに存在する必要があります。

  • 再帰ループを避ける必要があります。

    たとえば、関数のコードを記述する際に、次のようなロジックは避ける必要があります:トピック A が関数 B をトリガーし、関数 B が新しいメッセージをトピック A に発行し、それが再び関数 B をトリガーする。このロジックは、関数の呼び出しが無限ループに陥る原因となります。

ステップ 1:トピックとトリガーの作成

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

  2. トップナビゲーションバーで、リージョンを選択します。[関数] ページで、対象の関数をクリックします。

  3. 関数の詳細ページで、[トリガー] タブをクリックします。次に、[トリガーの作成] をクリックします。

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

    パラメーター

    説明

    トリガータイプ

    [Simple Message Queue (旧称:MNS) のトピックによる非同期呼び出しトリガー] を選択します。

    Simple Message Queue (formerly MNS) のトピックによるトリガー

    名前

    トリガーの名前をカスタマイズします。

    trigger-mns

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

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

    LATEST

    MNS リージョン

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

    中国 (成都)

    トピック

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

    Mytopic

    フィルタータグ

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

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

    tag

    イベントフォーマット

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

    • [STREAM]

    • JSON

    JSON

    リトライポリシー

    リトライポリシーを選択します。有効な値:

    • バックオフリトライ

    • [指数関数的減衰リトライ]

    リトライポリシーの指定方法の詳細については、「NotifyStrategy」をご参照ください。

    バックオフリトライ

    [ロール名]

    [AliyunMNSNotificationRole] を選択します。

    説明

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

    AliyunMNSNotificationRole

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

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

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

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

    • トピックトリガーの [イベント形式] パラメーターを [STREAM] に設定した場合のイベント内容の形式の例:

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

        説明

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

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

        説明

        イベントの内容には、メッセージ属性に関連するキーと値のペアが含まれます。詳細については、「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****"
            }        
                                    
      • 次のサンプルコードは、メッセージにメッセージ属性が含まれている場合のイベント内容の形式の例です。

        説明

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

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

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

    パラメーター

    タイプ

    説明

    key

    String

    value

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

    TopicOwner

    String

    118620210433****

    トピックオーナーのアカウント ID。

    Message

    String

    hello topic

    メッセージの内容。

    Subscriber

    String

    118620210433****

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

    PublishTime

    Int

    1550216302888

    メッセージが発行された時刻。

    SubscriptionName

    String

    test-fc-subscribe

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

    MessageMD5

    String

    BA4BA9B48AC81F0F9C66F6C909C3****

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

    TopicName

    String

    Mytopic

    トピックの名前。

    MessageId

    String

    2F5B3C281B283D4EAC694B742528****

    メッセージ ID。

ステップ 3:関数コードの記述とテスト

トピックトリガーを作成した後、関数コードを記述し、コードが有効かどうかを検証するためにテストできます。

  1. [関数の詳細] ページの [コード] タブで、コードエディタにコードを記述し、[デプロイ] をクリックします。

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

    import json
    import logging
    
    def handler(event, context):
      logger = logging.getLogger()
      logger.info("mns_topic trigger event = {}".format(event))
      # たとえば、イベントを Tablestore に記録できます。
      return "OK"                     
  2. [関数のテスト] をクリックします。

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

関連情報

Function Compute コンソールに加えて、次の方法でトリガーを設定することもできます。

  • Serverless Devs ツールを使用してトリガーを設定します。詳細については、「Serverless Devs の一般的なコマンド」をご参照ください。

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

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