trigger イベントを AWS EventBridge に送信する
項目一覧
MongoDBは AWS Eventbridge を提供します 提携するイベントソースを使用すると、Atlas Functionを呼び出す代わりに Atlas trigger イベントをイベントバスに送信できます。イベントを EventBridge に送信するには、任意の trigger タイプを構成できます。データベーストリガーは、非致命的なエラーによる trigger の停止を減らすために、カスタムエラー処理もサポートしています。
triggerイベントを EventBridge に送信するために必要なものはすべて、 Amazon Web ServicesアカウントIDです。 このガイドでは、 アカウントIDの検索、trigger の構成、triggerイベントソースとイベントバスの関連付け、カスタム エラー処理の設定について説明します。
手順
注意
EventBridge triggerイベントの個々のエントリは 256 KB より小さくなければなりません。
PutEvents
エントリのサイズを小さくする方法については、「パフォーマンスの最適化」セクションを参照してください。
MongoDB パートナー イベント ソースを設定する
triggerイベントをAWS Eventbridge に送信するには、イベントを受信するアカウントのAWS account ID {0 が必要です。
Amazon EventBridge コンソール を開きます ナビゲーションPartner event sources メニューで [ ] をクリックします。
MongoDB提携するイベントソースを検索し、[ Set up ] をクリックします。
MongoDB提携するイベントソースのページからCopy [] をクリックして、Amazon Web Services IDアカウント をクリップボードにコピーします。
trigger の構成
AWS account ID が取得されたら、データベースtriggerまたは予定されたtriggerを構成して、イベントを EventBridge に送信できます。
Atlas UIまたは App Services CLI を使用して trigger を構成できます。
Atlas UIで、次の設定で新しいデータベースtriggerまたは予定さtriggerたトリガー を作成し、構成します。
イベントタイプとしてEventBridgeを選択します。
EventBridge からコピーしたAWS Account IDを貼り付けます。
trigger イベントを送信するAWS Regionを選択します。
注意
サポート対象の AWS リージョン
サポートされているAmazon Web Services リージョンの完全なリストについて は、Amazon SaaS パートナーから の の受信イベント を参照してください ガイドを参照してください。
(データベース trigger のみの任意) trigger エラーを処理する関数を構成します。
詳細については、このページの「カスタム エラー処理」セクションを参照してください。
クリックして拡大します拡張JSONを有効にするには、 Advanced (Optional)セクションでEnable Extended JSON設定を切り替えます。
デフォルトでは 、trigger はイベントオブジェクト内のBSON typesを標準のJSON型に変換します。
拡張JSONを有効にすると、代わりにイベントオブジェクトが拡張JSON形式に直列化されることで、 BSON type 情報が保持されます。 これにより、読みやすさと相互運用性を犠牲にして、型情報が保持されます。
MongoDB Atlas ユーザーの認証
MongoDB Atlas Administration APIキーを使用して、App Services CLI にログします。
appservices login --api-key="<API KEY>" --private-api-key="<PRIVATE KEY>" アプリの最新の構成ファイルを取得する
次のコマンドを実行して、構成ファイルのローカルコピーを取得します。
appservices pull --remote=<App ID> デフォルトでは 、コマンドは現在の 作業ディレクトリにファイルをプルします。 任意の
--local
フラグを使用してディレクトリパスを指定できます。ローカルの
/triggers
ディレクトリに trigger構成ファイルを作成します。function_name
フィールドを省略し、AWS_EVENTBRIDGE
イベントプロセッサを定義します。account_id
フィールドに、EventBridge からコピーしたAWS Account IDを設定します。region
フィールドをAmazon Web Servicesリージョンに設定します。注意
サポート対象の AWS リージョン
サポートされているAmazon Web Services リージョンの完全なリストについて は、Amazon SaaS パートナーから の の受信イベント を参照してください ガイドを参照してください。
拡張 JSON を有効にするには、
extended_json_enabled
フィールドをtrue
に設定します。デフォルトでは 、trigger はイベントオブジェクト内のBSON typesを標準のJSON型に変換します。
拡張JSONを有効にすると、代わりにイベントオブジェクトが拡張JSON形式に直列化されることで、 BSON type 情報が保持されます。 これにより、読みやすさと相互運用性を犠牲にして、型情報が保持されます。
(データベース trigger のみの任意) trigger エラーを処理する関数を構成します。
詳細については、このページの「カスタム エラー処理」セクションを参照してください。
trigger の構成ファイルは、次のようになります。
{ "name": "...", "type": "...", "event_processors": { "AWS_EVENTBRIDGE": { "config": { "account_id": "<AWS Account ID>", "region": "<AWS Region>", "extended_json_enabled": <boolean> } } } }
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 」を参照してください。
新しいカスタム エラー ハンドラーの作成
App Services CLI を使用して、または App Services Admin APIを通じて Atlas UIに新しいエラー ハンドラーを作成できます。
この手順では、 Create a Triggerページで新しい関数を直接作成する方法について説明します。
Functionsページから関数を作成することもできます。 Atlas で関数を定義する方法の詳細については、「 関数の定義 」を参照してください。
関数コードの書込み
Functionセクションでは、関数エディターでJavaScriptコードを直接記述します。 関数エディターには、必要に応じて編集できるデフォルトの 関数 が含まれています。 関数の作成の詳細については、関数のドキュメント を参照してください。
関数をテストする
Testing Console関数エディターの下の タブでは、テスト コンソールのコメントに示されているように、 パラメーターとerror
changeEvent
パラメーターに例値を渡すことで関数をテストできます。
これらのパラメーターの詳細については、このページの「エラー ハンドラー パラメーター」セクションを参照してください。
テストを実行するには、 Runをクリックします。
App Services CLI を使用して、エラー ハンドラーで trigger の構成を更新できます。 詳しくは、「アプリの更新手順 」を参照してください。
MongoDB Atlas ユーザーの認証
MongoDB Atlas Administration APIキーを使用して、App Services CLI にログします。
appservices login --api-key="<API KEY>" --private-api-key="<PRIVATE KEY>"
エラー ハンドラーを記述する
関数の定義の手順に従って、エラー ハンドラーのソースコードと構成ファイルを記述します。
の例としては、次のテンプレート エラー ハンドラーを参照してください。
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>" } } }
詳細については、「 trigger 構成ファイル 」を参照してください。
変更を配置する
次のコマンドを実行して、変更を配置します。
appservices push
注意
この手順では、App Services Admin APIエンドポイントを参照します。 Atlas Administration APIエンドポイントは 使用されません。
MongoDB Atlas ユーザーの認証
MongoDB Atlas Administration APIキー ペア を使用して Login エンドポイントを呼び出します。
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へのアクセスを許可します。 すべての App Services Admin 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 Eventbridgetrigger POST
エンドポイントへの リクエスト、失敗した のエラーを処理する関数を作成します。
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 put リクエストのコード。 エラー ハンドラーで使用されるエラー コードのリストについては、このページの「エラー コード」セクションを参照してください。message
: エラーが発生した EventBridge put リクエストからのフィルタリングされていないエラー メッセージ。
changeEvent
EventBridge によって行われたデータに対するリクエストされた変更。 変更イベントの種類とその構成の詳細については、「変更イベント タイプ 」を参照してください。
エラー コード
EventBridge からエラーを受信した場合、イベントプロセッサはエラーをDOCUMENT_TOO_LARGE
またはOTHER
として解析します。 この解析されたエラーは、 error
パラメーターを介してエラー ハンドラー関数に渡されます。
DOCUMENT_TOO_LARGE
EventBridge triggerイベントのエントリが 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 は、アプリケーション ログで表示できます。
Atlas UIのTriggers
ページから、 Logsタブを選択します。
すべてのログはデフォルトで表示されます。 エラー ハンドラーのログのみを表示するには、 Show errors onlyトグルをクリックします。
すべてのエラー ハンドラー ログを表示するには、 trigger_error_handler
値を--type
フラグに渡します。
appservices logs list --type=trigger_error_handler
注意
この手順では、App Services Admin APIエンドポイントを参照します。 Atlas Administration APIエンドポイントは 使用されません。
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" } }
パフォーマンスの最適化
EventBridge triggerイベントの個々のエントリは 256 KB より小さくなければなりません。
詳細については、「Amazon Web Services のドキュメント 」を参照してAmazon putEventsイベントエントリ サイズを計算します 。データベーストリガーを使用する場合、 プロジェクト式には指定されたフィールドのみを含めることができるため、 EventBridge にメッセージを送信する前にドキュメントサイズを縮小できます。 プロジェクト式の詳細については、データベースtriggerプロジェクト式 のドキュメントを参照してください。