AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

チュートリアル: trigger からサードパーティAPIを呼び出す

このチュートリアルでは、データベーストリガーを作成します。 trigger は、ドキュメントがコレクションに挿入されたときに サードパーティAPIを呼び出します。 trigger の関数は、公式のAWSソフトウェア開発キット(SDK)を外部依存関係として追加します。次に、この関数は SDK を使用して、挿入されたドキュメントを 拡張JSONオブジェクトとして S3 バケットに書込みます。

このチュートリアルのAWS S3 の例では、 Node.jsライブラリを持つ任意のサードパーティ サービスに適用されるパターンを示しています。

  • サービスのnpmパッケージを外部依存関係として追加します。

  • 必要な認証情報を シークレット として保存し、関数の 値 から参照。

  • 関数内に require() を含むパッケージをインポートし、保存した認証情報を使用して呼び出します。

Atlas の サンプル データ セット からの映画データを含むコレクションを使用します。

AWS認証情報を保存するには、次の値とシークレットを作成します。

  • AwsAccessKeyId: AWSアクセスキーIDを含む値。

  • AwsSecretAccessKeySecret: AWSシークレット アクセス キーを含む シークレット 。

  • AwsSecretAccessKey: シークレットにリンクする値。これにより、シークレットとして安全に保存された状態で、関数内のシークレット アクセス キーにアクセスできるようになります。

1

Atlas で、 Triggers ページに移動します。

  1. まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。

  2. まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。

  3. サイドバーで、 Streaming Data見出しの下のTriggersをクリックします。

Triggersページが表示されます。

  1. View All Appsボタンをクリックします。

  2. trigger を作成するアプリをクリックします。

  3. サイドバーで、 Build見出しの下のValuesをクリックします。

2
  1. [Create a Value] をクリックします。

  2. Value Name として AwsAccessKeyId を入力します。

  3. Valueタイプを選択します。

  4. Custom Contentオプションを選択し、 AWSアクセスキーIDを入力します。

    注意

    アクセス キーID は、引用符("<accessKeyId>")を含む string 値として入力する必要があります。

  5. [Save Draft] をクリックします。

3

注意

シークレット値には直接アクセスできないため、シークレットにリンクする 2 番目の 値 を作成する必要があります。

  1. [Create a Value] をクリックします。

  2. Value Name として AwsSecretAccessKey を入力します。

  3. Valueタイプを選択します。

  4. Link to Secret オプションを選択します。

  5. AwsSecretAccessKeySecret と入力し、Create "AwsSecretAccessKeySecret" をクリックしてシークレットに名前を付けます。

    AWSシークレット アクセス キーを、シークレット名の下に表示されるフィールドに貼り付けます。

  6. シークレットと値の両方を作成するには、Save Draft をクリックします。

ドキュメントの挿入時に新しい関数を呼び出すデータベーストリガーを作成します。 aws-sdk 依存関係を追加し、同じ形式で関数コードを定義します。

1

Atlas で、 Triggers ページに移動します。

  1. まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。

  2. まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。

  3. サイドバーで、 Streaming Data見出しの下のTriggersをクリックします。

Triggersページが表示されます。

2
  1. Add Triggerをクリックしてトリガー設定ページを開きます。

  2. Databasetrigger タイプを選択し、次の値を使用して trigger を構成します。

    設定
    値
    Trigger Name

    WriteDocumentToS3Trigger

    Watch Against

    Collection

    Cluster Name

    テスト クラスターの名前

    Database Name

    テストデータベースの名前

    Collection Name

    テストコレクションの名前

    Operation Type

    Insert のみを選択します。

    Event Type

    Function

  3. Functionセクションで、[+ New Function] を選択します。

3
  1. Functionセクションで、 Add Dependencyをクリックします。

  2. 最新バージョンを使用するには、 Add Dependencyウィンドウで、Define a Package Name として aws-sdk を入力し、Package Version を空白のままにします。

  3. パッケージを追加するには、 Addをクリックします。

4

YOUR_AWS_REGIONYOUR_S3_BUCKET_NAMEと を独自のAWSリージョンとAWSマネジメントコンソールからの完全なバケット名に置き換えます。

1/*
2 * Write a newly-inserted document to an S3 bucket as an Extended JSON object.
3 */
4exports = async function writeDocumentToS3(changeEvent) {
5 const { fullDocument } = changeEvent;
6
7 // require calls must be in the exports function
8 const S3 = require("aws-sdk/clients/s3");
9 const s3 = new S3({
10 accessKeyId: context.values.get("AwsAccessKeyId"),
11 secretAccessKey: context.values.get("AwsSecretAccessKey"),
12 region: "YOUR_AWS_REGION",
13 });
14
15 const key = `inserted-documents/${fullDocument._id.toString()}.json`;
16
17 // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property
18 await s3.putObject({
19 Bucket: "YOUR_S3_BUCKET_NAME",
20 Key: key,
21 Body: EJSON.stringify(fullDocument),
22 ContentType: "application/json",
23 }).promise();
24
25 return `Wrote document ${fullDocument._id} to ${key}`;
26};

ドキュメントが挿入されるたびに、関数は次の処理を実行します。

  • 変更イベントの fullDocumentフィールドから挿入されたドキュメントを読み取ります。

  • 値に保存されているAWS認証情報で認証する S3 クライアントを作成します。

  • ドキュメントを <_id>.json としてバケットの inserted-documents/ プレフィックスに書込みます。

注意

_idこの関数は、S3 オブジェクトキーの一部としてドキュメントの を使用します。ドキュメントで_id ObjectId 以外の 型が使用されている場合、キーは予想どおりにならない可能性があります。

5

重要

アプリで配置案が有効になっている場合は、Review & Deploy をクリックして、値、シークレット、依存関係、関数、trigger を配置します。これらを配置するまで、trigger は実行されず、次のステップは失敗します。

trigger が監視するコレクションにテストドキュメントを挿入します。対応する拡張JSONオブジェクトがS 3バケットにinserted-documents/ プレフィックスの下に表示されることを確認します。

1

方法については、 「 mongosh経由でクラスターに接続する 」を参照してください。

2

次の例では、テストコレクションに 1 つのドキュメントを挿入します。 YOUR_DATABASE_NAME と YOUR_COLLECTION_NAME を、trigger の作成時に入力したデータベースとコレクションに置き換えます。

// Replace YOUR_DATABASE_NAME and YOUR_COLLECTION_NAME with the
// database and collection that the Trigger watches.
use YOUR_DATABASE_NAME
db.YOUR_COLLECTION_NAME.insertOne({
tutorialTest: "atlas-trigger-s3",
createdAt: new Date()
})

insertedId出力からの 値に注目してください。関数は、 S3 オブジェクトの名前としてこの値を使用します。

3

AWSマネジメント コンソールで、S3 バケットを開き、inserted-documents/ プレフィックスに移動します。 という名前のオブジェクトが表示されます。<insertedId>.json <insertedId>insertedIdは前の手順の 値です。

注意

オブジェクトが表示されない場合は、trigger の実行ログを確認してください。その方法については、 trigger ログ を参照してください。