Simple Message Queue (formerly MNS) のトピックは、イベントソースとして機能し、EventBridge および Function Compute と統合できます。 Simple Message Queue (formerly MNS) のトピックトリガーは、Simple Message Queue (formerly MNS) トピックに新しいメッセージが送信されると、関連付けられた関数を自動的に実行します。 これにより、受信メッセージのカスタム処理を簡単に実装できます。
背景情報
MNS は、効率的、高信頼性、安全、使いやすく、弾性的にスケーラブルな分散メッセージングサービスです。アプリケーション開発者が分散コンポーネント間でデータや通知を渡し、疎結合システムを構築するのに役立ちます。MNS では、トピックはメッセージが公開される送信先です。パブリッシャーは PublishMessage API を呼び出してトピックにメッセージを公開し、トピックのサブスクライバーがそのメッセージを受信します。API の詳細については、PublishMessage をご参照ください。
Simple Message Queue (formerly MNS) トピックトリガーを設定すると、ご利用の関数が Simple Message Queue (formerly MNS) トピックのサブスクライバーとして登録されます。パブリッシャーが Simple Message Queue (formerly MNS) トピックにメッセージを送信すると、メッセージ本文が関数に配信され、その実行がトリガーされます。メッセージ本文は、event パラメーターとして関数ハンドラに渡されます。詳細については、基本情報 をご参照ください。
MNS と Function Compute の統合には、次の利点があります。
メールや SMS で送信する前に、メッセージに対して高度な処理を実行できます。
HTTP エンドポイント用のサービスをホストする必要がありません。
メッセージを Slack に送信したり、特定のメッセージを永続化したりするなど、豊富なカスタム処理を実装できます。
前提条件
注意事項
MNS のトピックと Function Compute の関数は、同じリージョンにある必要があります。
再帰呼び出しを避けてください。
関数コードを記述する際、関数に次のロジックが含まれていないことを確認してください:トピック A が関数 B をトリガーし、関数 B がトピック A に新しいメッセージを公開する。これにより、無限の再帰呼び出しが発生する可能性があります。
ステップ 1:Message Queue for MNS トピックトリガーの作成
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
上部のナビゲーションバーでリージョンを選択します。関数 ページで、対象の関数をクリックします。
関数詳細ページで、トリガー タブを選択し、トリガーの作成 をクリックします。
[トリガーの作成] パネルでパラメーターを設定し、[OK] をクリックします。
パラメーター
アクション
例
トリガータイプ
[メッセージキュー (MNS トピックトリガー) - 非同期呼び出し] を選択します。
Simple Message Queue (formerly MNS) トピックトリガー
名前
カスタムトリガー名を入力します。
trigger-mns
バージョンまたはエイリアス
デフォルト値は LATEST です。別のバージョンまたはエイリアスのトリガーを作成する場合は、まず関数の詳細ページの右上隅でそのバージョンまたはエイリアスに切り替えます。バージョンとエイリアスの概要については、「バージョンの管理」および「エイリアスの管理」をご参照ください。
LATEST
MNS リージョン
トピックが配置されているリージョンを選択します。Simple Message Queue (formerly MNS) のトピックと Function Compute の関数は、同じリージョンにある必要があります。
中国 (成都)
トピック
リストからトピックを選択します。
Mytopic
フィルタータグ
メッセージフィルタータグを入力します。
指定されたフィルタータグを含むメッセージを受信した場合にのみ、関数がトリガーされます。
tag
イベント形式
イベント形式を選択します。有効値:
STREAM
JSON
JSON
リトライポリシー
リトライポリシーを選択します。有効値:
バックオフ再試行
[指数関数的減衰リトライ]
リトライポリシーの選択方法については、「NotifyStrategy」をご参照ください。
バックオフリトライ
ロール名
[AliyunMNSNotificationRole] を選択します。
説明このタイプのトリガーを初めて作成する場合、OK をクリックした後、表示されるダイアログボックスで[今すぐ承認]を選択します。
AliyunMNSNotificationRole
ステップ 2:関数入力パラメーターの設定
関数詳細ページの [コード] タブで、[関数をテスト] の横にある
アイコンをクリックし、ドロップダウンリストから [テストパラメーターの設定] を選択します。テストパラメーターの設定 パネルで、新規テストイベントの作成 または 既存のテストイベントの変更 を選択します。イベント名とイベント内容を入力し、[OK] をクリックします。
Simple Message Queue (formerly MNS) トピックに公開されたメッセージは、notifyContentFormat に基づいて処理されます。処理されたメッセージは、関数ハンドラの
eventパラメーターになります。詳細については、NotifyContentFormat をご参照ください。トリガー作成時に [イベント形式] を STREAM に設定した場合:
メッセージにメッセージ属性 (MessageAttributes) が含まれていない場合、イベント形式は次のようになります。
説明メッセージにメッセージ属性 (MessageAttributes) が含まれていない場合、イベント内容は生のメッセージ本文の文字列です。
# メッセージ本文。 'hello topic'メッセージにメッセージ属性 (MessageAttributes) が含まれている場合、イベント形式は次のようになります。
説明イベント内容には、MessageAttributes に関連するキーと値のペアが含まれます。詳細については、PublishMessage をご参照ください。
{ "body": "hello topic", "attrs": { "Extend": "{\\"key\\":\\"value\\"}" } }
トリガー作成時に [イベント形式] を JSON に設定した場合:
メッセージにメッセージ属性 (MessageAttributes) が含まれていない場合、イベント形式は次のようになります。
{ "TopicOwner": "118620210433****", "Message": "hello topic", "Subscriber": "118620210433****", "PublishTime": 1550216480040, "SubscriptionName": "test-fc-subscribe", "MessageMD5": "BA4BA9B48AC81F0F9C66F6C909C3****", "TopicName": "Mytopic", "MessageId": "2F5B3C082B923D4EAC694B76D928****" }メッセージにメッセージ属性 (MessageAttributes) が含まれている場合、イベント形式は次のようになります。
説明イベント内容には、MessageAttributes に関連するキーと値のペアが含まれます。詳細については、PublishMessage をご参照ください。
{ "key": "value", "TopicOwner": "118620210433****", "Message": "hello topic", "Subscriber": "118620210433****", "PublishTime": 1550216302888, "SubscriptionName": "test-fc-subscribe", "MessageMD5": "BA4BA9B48AC81F0F9C66F6C909C3****", "TopicName": "Mytopic", "MessageId": "2F5B3C281B283D4EAC694B742528****" }
次の表に、
eventパラメーターのフィールドを説明します。パラメーター
タイプ
例
説明
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:関数コードの記述とテスト
Simple Message Queue (formerly MNS) トピックトリガーを作成した後、関数コードを記述してテストし、期待どおりに動作することを確認します。
関数詳細ページの コード タブのエディターでコードを記述し、デプロイメントコード をクリックします。
このセクションでは、Python コードを例として使用します。次のサンプルコードを Simple Message Queue (formerly MNS) トピックトリガーのテンプレートとして使用できます。
import json import logging def handler(event, context): logger = logging.getLogger() logger.info("mns_topic trigger event = {}".format(event)) # 例:イベントを Tablestore に記録します。 return "OK"関数のテスト をクリックします。
実行が完了したら、コード タブの上部で実行結果を確認できます。
関連情報
Function Compute コンソールに加えて、次の方法でもトリガーを設定できます:
Serverless Devs ツールを使用してトリガーを設定します。詳細については、「Serverless Devs の一般的なコマンド」をご参照ください。
SDK を使用してトリガーを設定します。詳細については、「SDK」をご参照ください。
トリガーの変更または削除については、「トリガーの管理」をご参照ください。