Message Service (MNS) トピックをイベントソースとして使用して、EventBridgeを使用してMNSをFunction Computeと統合できます。 Function ComputeでMNSトピックトリガーを設定して、関連する関数をトリガーして、トピックに送信されるメッセージに対してカスタム処理を実行できます。
概要
MNSは、高いスケーラビリティ、効率、信頼性、セキュリティ、可用性を備えた分散メッセージングサービスです。 MNSにより、アプリケーション開発者は、アプリケーションの分散コンポーネント間でデータと通知を転送し、疎結合システムを構築できます。 MNSでは、メッセージはトピックに公開されます。 発行者は、PublishMessage操作を呼び出して、メッセージをトピックに発行できます。 トピックのサブスクライバーがメッセージを受け取ります。 詳細については、「PublishMessage」をご参照ください。
MNSトピックのトリガーを設定することは、関数をMNSトピックのサブスクライバーとして登録することと同じです。 発行者がメッセージをMNSトピックに発行すると、メッセージは関数に渡され、関数をトリガーする関数ハンドラーのイベントパラメーターとして使用されます。 詳細については、「基本」をご参照ください。
MNSとFunction Computeの統合には、次の利点があります。
メールまたはテキストメッセージでメッセージを送信する前に、メッセージに対して高度な操作を実行できます。
HTTPエンドポイントでサービスを作成しないようにします。
豊富なカスタム操作をサポートします。 たとえば、Slackにメッセージを送信したり、指定したメッセージを保持したりできます。
始める前に
使用上の注意
MNSトピックと関連付けられるFunction Compute関数は、同じリージョンに存在する必要があります。
再帰ループは避けてください。
たとえば、関数のコードを記述するときは、次のロジックを回避する必要があります。トピックaは関数Bをトリガーし、関数Bは新しいメッセージをトピックAに発行してから関数Bを再度トリガーします。 この論理は、関数呼び出しの無限ループをもたらす。
手順1: MNSトピックトリガーの作成
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[関数] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [関数] ページで、管理する関数をクリックします。
機能の詳細ページで、[設定] タブをクリックします。 左側のナビゲーションウィンドウで、[トリガー] をクリックします。 次に、[トリガーの作成] をクリックします。
トリガーの作成パネルで、パラメーターを設定し、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: 関数の入力パラメータを設定する
関数の詳細ページの [コード] タブで、[テスト関数] の隣のアイコンをクリックし、ドロップダウンリストから [テストパラメーターの設定] を選択します。
[テストパラメーターの設定] パネルで、[新しいテストイベントの作成] または [既存のテストイベントの変更] タブをクリックし、イベント名とイベント内容を入力し、[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トピックトリガーを作成した後、関数コードを記述し、関数コードをテストして、コードが有効かどうかを確認できます。
関数の詳細ページで、コードタブで、コードエディターに関数コードを入力し、デプロイ.
この例では、関数コードは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"
を返す
クリックテスト機能.
関数の実行後、[コード] タブで結果を表示できます。
詳細情報
Function Computeコンソールに加えて、次のいずれかの方法を使用してトリガーを設定できます。
SDKを使用してトリガーを設定します。 詳細は、SDK をご参照ください。
既存のトリガーを変更または削除するには、「トリガーの管理」をご参照ください。