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トピックは、Function Compute関数と同じリージョンに存在する必要があります。
中国 (成都)
トピック
リストからトピックを選択します。
Mytopic
フィルタータグ
メッセージフィルタリング用のタグを指定します。
関数の実行は、指定されたフィルタリングタグを含むメッセージが受信された場合にのみトリガーされます。
tag
イベント形式
イベント形式を選択します。 有効な値:
ストリーム
JSON
JSON
再試行ポリシー
再試行ポリシーを選択します。 有効な値:
バックオフ再試行
指数減衰再試行
再試行ポリシーの選択方法の詳細については、「NotifyStrategy」をご参照ください。
バックオフの再試行
ロール名
[AliyunMNSNotificationRole] を選択します。
説明上記のパラメーターを設定したら、[OK] をクリックします。 このタイプのトリガーを初めて作成する場合は、表示されるダイアログボックスで [今すぐ許可] をクリックします。
AliyunMNSNotificationRole
トリガーが作成されると、[トリガー] タブに表示されます。 既存のトリガーを変更または削除するには、「トリガーの管理」をご参照ください。
ステップ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トピックトリガーを作成した後、関数コードを記述し、関数をテストしてコードが正しいかどうかを確認できます。
関数の詳細ページで、コードタブをクリックし、コードエディターに関数コードを入力し、デプロイをクリックします。
この例では、関数コードは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"
コードタブでテスト機能をクリックします。
関数の実行後、[コード] タブで結果を表示できます。
追加情報
Function Computeコンソールに加えて、次の方法を使用してトリガーを設定できます。
Serverless Devsを使用してトリガーを設定します。 詳細については、「Serverless Devs」をご参照ください。
SDKを使用してトリガーを設定します。 詳細は、SDK をご参照ください。
既存のトリガーを変更または削除するには、「トリガーの管理」をご参照ください。