trigger イベントを AWS EventBridge に送信する
項目一覧
Overview
MongoDBはAWS Eventbridge 提携するイベントソースを提供しており、Atlas Function を呼び出す代わりに Atlas trigger イベントをイベントバスに送信できます。イベントを EventBridge に送信するには、任意の trigger タイプを構成できます。データベーストリガーは、非致命的なエラーによるトリガーの停止を減らすために、カスタムエラー処理もサポートしています。
triggerイベントを EventBridge に送信するために必要なものはすべて、 Amazon Web ServicesアカウントIDです。 このガイドでは、アカウント ID の検索、trigger の構成、trigger イベントソースとイベント バスの関連付け、カスタム エラー処理の設定について説明します。
手順
注意
Amazon Web ServicesEventBridgetrigger イベントの の配置エントリは 256 KB 未満である必要があります。
パフォーマンスの最適化セクションの putEvents エントリのサイズを縮小する方法について学びます。
MongoDB パートナー イベント ソースを設定する
triggerイベントをAWS Eventbridge に送信するには、イベントを受信するアカウントのAWS account ID {0 が必要です。Amazon EventBridge コンソール を開きます ナビゲーションPartner event sources メニューで [ ] をクリックします。MongoDBパートナー イベント ソースを検索し、[ Set upをクリックします。
MongoDB パートナー イベント ソースのページで、[Copy] をクリックして AWS アカウント ID をクリップボードにコピーします。
trigger の構成
AWS account IDを取得したら、イベントを EventBridge に送信するよう trigger を構成できます。
Atlas App Services UI で、新しいデータベースtrigger 、認証trigger 、またはスケジュールされたtriggerを作成して構成し、 EventBridge イベントタイプを選択します。
EventBridge からコピーしたAWS Account IDを貼り付け、trigger イベントを送信するAWS Regionを選択します。
オプションで、trigger エラーを処理する関数を構成できます。 カスタム エラー処理はデータベース trigger でのみ有効です。 詳細については、このページの「カスタム エラー処理」セクションを参照してください。
デフォルトでは、trigger はイベント オブジェクト内のBSON typesを標準のJSON型に変換します。 BSON type 情報を保持するには、代わりにイベント オブジェクトを拡張 JSON 形式にシリアル化します。 拡張 JSON は、読みやすさと相互運用性を犠牲にして、型情報を保持します。
拡張 JSON を有効にするには、 Advanced (Optional)セクションのEnable Extended JSONトグルをクリックします。
/triggers
ディレクトリにtrigger 構成ファイルを作成します。 function_name
フィールドを省略し、 AWS_EVENTBRIDGE
イベント プロセッサを定義します。
account_id
フィールドを EventBridge からコピーした AWS Account ID に設定し、region
フィールドをAmazon Web Servicesリージョンに設定します。
デフォルトでは、trigger はイベント オブジェクト内のBSON typesを標準のJSON型に変換します。 BSON type 情報を保持するには、代わりにイベント オブジェクトを拡張 JSON 形式にシリアル化します。 拡張 JSON は、読みやすさと相互運用性を犠牲にして、型情報を保持します。
拡張 JSON を有効にするには、 extended_json_enabled
フィールドをtrue
に設定します。
オプションで、trigger エラーを処理する関数を構成できます。 カスタム エラー処理はデータベース trigger でのみ有効です。 詳細については、このページの「カスタム エラー処理」セクションを参照してください。
trigger 構成ファイルは、次のようになります。
{ "name": "...", "type": "...", "event_processors": { "AWS_EVENTBRIDGE": { "config": { "account_id": "<AWS Account ID>", "region": "<AWS Region>", "extended_json_enabled": <boolean> } } } }
注意
サポート対象の AWS リージョン
サポートされているAmazon Web Services リージョンの完全なリストについて は、Amazon SaaS パートナーから の の受信イベント を参照してください ガイドを参照してください。
trigger イベントソースとイベント バスの関連付け
EventBridge コンソールに戻り、ナビゲーション ペインでパートナー イベント ソースを選択します。Partner event sources テーブルで、Pending trigger ソースを検索及び選択し、[Associate with event bus] をクリックします。
Associate with event bus 画面で、他のアカウントや組織に対して必要なアクセス権限を定義し、[Associate] をクリックします。
確認が完了すると、trigger イベントソースのステータスがPendingからActiveに変わり、イベント バスの名前がイベントソース名と一致するように更新されます。 そのパートナー イベント ソースのイベントでtriggerされるルールの作成を開始できるようになりました。 詳細については、「 SaaS パートナー イベントでトリガーするルールの作成 」を参照してください。
カスタムエラー処理
注意
データベーストリガーのみがカスタムエラーハンドラーをサポートします
現在、データベーストリガーのみがカスタムエラー処理をサポートしています。 認証トリガーとスケジュールされたトリガーは現時点ではカスタムエラー処理をサポートしていません。
再試行が成功しない場合に、trigger が失敗したときに実行されるエラー ハンドラーを作成できます。 カスタムエラー処理を使用すると、 AWS Eventbridgeからのエラーがtriggerを一時停止するのに十分であるか、またはエラーを無視して他のイベントの処理を続行できるかどうかを判断できます。 中断されたデータベース trigger の詳細については、「 中断された trigger 」を参照してください。
新しいカスタム エラー ハンドラーの作成
以下のように trigger の作成 ページ、または [ 関数 ] タブから新しい関数を直接作成できます。 Atlas App Services で関数を定義する方法の詳細については、「 関数の定義 」を参照してください。
関数コードの書込み
Functionセクションでは、関数エディターで JavaScript コードを直接記述します。 関数エディターには、必要に応じて編集できるデフォルトの関数が含まれています。 関数の作成の詳細については、関数のドキュメントを参照してください。
関数をテストする
Testing Console関数エディターの下の タブでは、テスト コンソールのコメントに示されているように、error
パラメーターとchangeEvent
パラメーターにサンプル値を渡すことで関数をテストできます。
これらのパラメーターの詳細については、このページの「エラー ハンドラー パラメーター」セクションを参照してください。
テストを実行するには、 Runをクリックします。
エラーハンドラーを使用して trigger の構成を更新するには、次の手順に従ってアプリを更新 します。 ステップ3で構成ファイルを更新するときは、次の操作を行います。
エラー ハンドラーを記述する
関数の定義の手順に従って、エラー ハンドラーのソースコードと構成ファイルを記述します。
エラー ハンドラーのソースコードについては、次のテンプレート エラー ハンドラーを参照してください。
exports = async function(error, changeEvent) { // This sample function will log additional details if the error is not // a DOCUMENT_TOO_LARGE error if (error.code === 'DOCUMENT_TOO_LARGE') { console.log('Document too large error'); // Comment out the line below in order to skip this event and not suspend the Trigger throw new Error(`Encountered error: ${error.code}`); } console.log('Error sending event to EventBridge'); console.log(`DB: ${changeEvent.ns.db}`); console.log(`Collection: ${changeEvent.ns.coll}`); console.log(`Operation type: ${changeEvent.operationType}`); // Throw an error in your function to suspend the trigger and stop processing additional events throw new Error(`Encountered error: ${error.message}`); };
trigger 構成へのエラー ハンドラーの追加
Triggers
フォルダー内の trigger 構成ファイルにerror_handler
属性を追加します。 trigger 構成ファイルは、次のようになります。
{ "name": "...", "type": "DATABASE", "event_processors": { "AWS_EVENTBRIDGE": { "config": { "account_id": "<AWS Account ID>", "region": "<AWS Region>", "extended_json_enabled": <boolean> } } }, "error_handler": { "config": { "enabled": <boolean>, "function_name": "<Error Handler Function Name>" } } }
triggertrigger 構成ファイルの詳細については、trigger 構成ファイル を参照してください
MongoDB Atlas ユーザーの認証
MongoDB Atlas API キー ペアを使用して、管理ユーザー認証エンドポイントを呼び出します。
curl -X POST \ https://services.cloud.mongodb.com/api/admin/v3.0/auth/providers/mongodb-cloud/login \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -d '{ "username": "<Public API Key>", "apiKey": "<Private API Key>" }'
認証に成功すると、レスポンス本文にはaccess_token
値を持つ JSON オブジェクトが含まれます。
{ "access_token": "<access_token>", "refresh_token": "<refresh_token>", "user_id": "<user_id>", "device_id": "<device_id>" }
access_token
は App Services Admin API へのアクセスを許可します。 すべての管理 API リクエストのAuthorization
ヘッダーに Bearer トークンとして含める必要があります。
配置案の作成(任意)
配置案は、単一のユニットとして配置または破棄できるアプリケーション変更のグループを表します。 配置案を作成しない場合、更新は自動的に個別に配置されます。
配置案を作成するには、配置案を作成するエンドポイントに本文を入れずにPOST
リクエストを送信します。
curl -X POST 'https://services.cloud.mongodb.com/api/admin/v3.0/groups/{groupId}/apps/{appId}/drafts' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <access_token>'
エラー ハンドラー関数の作成
新しい関数の作成 エンドポイントへの リクエストを介して、失敗した のエラーを処理する関数を作成します。AWS EventbridgetriggerPOST
curl -X POST \ https://services.cloud.mongodb.com/api/admin/v3.0/groups/{groupId}/apps/{appId}/functions \ -H 'Authorization: Bearer <access_token>' \ -d '{ "name": "string", "private": true, "source": "string", "run_as_system": true }'
AWS Eventbridge trigger作成する
エンドポイントの作成 AWS EventbridgetriggerエンドポイントへのPOST
リクエストにより、エラー処理が有効になっている を作成します。trigger
curl -X POST \ https://services.cloud.mongodb.com/api/admin/v3.0/groups/{groupId}/apps/{appId}/triggers \ -H 'Authorization: Bearer <access_token>' \ -d '{ "name": "string", "type": "DATABASE", "config": { "service_id": "string", "database": "string", "collection": "string", "operation_types": { "string" }, "match": , "full_document": false, "full_document_before_change": false, "unordered": true }, "event_processors": { "AWS_EVENTBRIDGE": { "account_id": "string", "region": "string", "extended_json_enabled": false }, }, "error_handler": { "enabled": true, "function_id": "string" } }'
配置案を配置する
配置案を作成した場合は、配置案を配置案に含まれるすべての変更を配置できPOST
。 最初のステップとして配置案を作成しなかった場合、個々の関数と trigger リクエストは自動的に配置されます。
curl -X POST \ 'https://services.cloud.mongodb.com/api/admin/v3.0/groups/{groupId}/apps/{appId}/drafts/{draftId}/deployment' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <access_token>' \
Error Handler Parameters
デフォルトのエラー ハンドラーには、 error
とchangeEvent
の 2 つのパラメータがあります。
error
次の 2 つの属性を持つ。
code
: エラーが発生した EventBridge 配置リクエストのコード。 エラーハンドラーで使用されるエラーコードの一覧については、以下のセクションを参照してください。message
: エラーが発生した EventBridge put リクエストからのフィルタリングされていないエラー メッセージ。
changeEvent
EventBridge によって行われたデータに対するリクエストされた変更。 変更イベントの種類とその構成の詳細については、「変更イベント タイプ 」を参照してください。
エラー コード
EventBridge からエラーが受信された場合、イベント プロセッサはエラーをDOCUMENT_TOO_LARGE
またはOTHER
として解析します。 この解析されたエラーは、 error
パラメーターを介してエラー ハンドラー関数に渡されます。
DOCUMENT_TOO_LARGE
EventBridge trigger イベントの put エントリが 256 KB を超える場合、EventBridge はエラーをスローします。 エラーには次のいずれかが含まれます。
ステータス コード:400 と
total size of the entries in the request is over the limit
。ステータス コード:413 は、ペイロードが大きすぎることを示します。
入力サイズを縮小する方法の詳細については、以下の「パフォーマンスの最適化」セクションを参照してください。
OTHER
その他のすべてのエラーのデフォルトのバケット。
Tip
他のコードによるエラーのエラー処理の最適化
最も一般的なエラー メッセージに対して特別なエラー処理ケースを作成して、 OTHER
コードでエラーのエラー処理を最適化できます。 どのエラーに特殊なケースが必要かを判断するには、 error.message
で表示される最も一般的なエラー メッセージを追跡することをお勧めします。
エラー ハンドラー ログ
EventBridgetrigger エラー ハンドラーのtrigger trigger は、アプリケーション ログで表示できます。
App Services UI の左側のナビゲーションで [
Logs
をクリックします。アプリのすべてのエラー ハンドラー ログを表示するには、 ドロップダウンをクリックし、 を選択します。Filter by TypeTriggers Error Handlers
アプリのすべてのエラー ハンドラー ログを表示するには、 trigger_error_handler
値を--type
フラグに渡します。
appservices logs list --type=trigger_error_handler
App Services ログの取得エンドポイントへのGET
リクエストを使用して、 TRIGGER_ERROR_HANDLER
タイプのログを取得します。
curl -X GET 'https://services.cloud.mongodb.com/api/admin/v3.0/groups/{groupId}/apps/{appId}/logs' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <access_token>' -d '{ "type": "TRIGGER_ERROR_HANDLER" }'
アプリケーション ログの表示の詳細については、「アプリケーション ログの表示 」を参照してください。
サンプル イベント
trigger次のオブジェクトは、イベントを に送信し、エラーを処理するAWS Eventbridge を構成します。
"event_processors": { "AWS_EVENTBRIDGE": { "config": { "account_id": "012345678901", "region": "us-east-1" } } }, "error_handler": { "config": { "enabled": true, "function_name": "myErrorHandler.js" } }
パフォーマンスの最適化
Amazon Web ServicesEventBridgetrigger イベントの の配置エントリは 256 KB 未満である必要があります。
詳細については、「Amazon Web Services のドキュメント 」を参照してAmazon putEvents イベント エントリ サイズを計算します。
データベーストリガーを使用する場合、プロジェクト式は EventBridge にメッセージを送信する前にドキュメント サイズを縮小するのに役立ちます。 この式により、指定されたフィールドのみを含めることができ、ドキュメント サイズを縮小できます。