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:トピックとトリガーの作成
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
トップナビゲーションバーで、リージョンを選択します。[関数] ページで、対象の関数をクリックします。
関数の詳細ページで、[トリガー] タブをクリックします。次に、[トリガーの作成] をクリックします。
「トリガーの作成」パネルでパラメーターを設定し、[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:関数の入力パラメーターの設定
関数詳細ページの [コード] タブで、[関数のテスト] の横にある
アイコンをクリックし、ドロップダウンリストから [テストパラメーターの設定] を選択します。[テストパラメーターの設定] パネルで、[新しいテストイベントの作成] または [既存のテストイベントの変更] タブをクリックし、イベント名とイベント内容を入力して、[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:関数コードの記述とテスト
トピックトリガーを作成した後、関数コードを記述し、コードが有効かどうかを検証するためにテストできます。
[関数の詳細] ページの [コード] タブで、コードエディタにコードを記述し、[デプロイ] をクリックします。
この例では、関数コードは Python で記述されています。次のサンプルコードは、トピックトリガーの関数テンプレートとして使用できます。
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」をご参照ください。
トリガーを変更または削除するには、「トリガーの管理」をご参照ください。