Google Cloud Platform Functions と Google Cloud Platform Run を使用して、Atlas クラスターを操作できます。
ベストプラクティス
次のベストプラクティスを使用して、 Google Cloud Platform関数とAtlasの間の接続を適切に管理します。
関数スコープのデータベース接続ではなく、グローバルスコープのデータベース接続を使用して Cloud Function を作成します。
関数を呼び出すたびに新しいクライアントオブジェクトを定義しないでください。定義すると、ドライバーは関数を呼び出すごとに新しいデータベース接続を作成します。こうなると、コストが高くなり、アプリケーションがデータベース接続制限を超えてしまう可能性があります。最高のパフォーマンスを得るには、次のガイドラインに従ってください。
クライアントオブジェクトを一度だけ作成します。
オブジェクトを保存し、関数の呼び出し全体でクライアントを再利用できるようにします。
この接続例では、既存のデータベース接続を再利用して、データベースとの通信を高速化し、データベースへの接続数をアプリケーション トラフィックに関して適切なレベルに維持します。
多数のシャードを含むシャーディングされたクラスターに接続する関数がある場合、パフォーマンスの問題が発生する可能性があります。 たとえば、シャーディングされた Atlas クラスターが 10 個ある場合、ドライバーはデフォルトで 30 個の
mongosインスタンスすべてに接続します。 接続文字列にsrvMaxHostsオプションを使用して、ドライバーが接続するホストの最大数を設定できます。 ドライバーのパフォーマンスを向上させるには、srvMaxHosts=3を設定します。 例:mongodb+srv://<db_username>:<db_password>@<clusterName>.mongodb.net/?retryWrites=true&w=majority&srvMaxHosts=3 詳細については、「接続オプション 」を参照してください。
Atlas クラスターへのネットワーク アクセスを制限します。
クラスターと Atlas関数間の ネットワークピアリング接続 を使用してプライベート ネットワーク経由でAtlasGCP クラスターに接続するか、または IPプライベートエンドポイント を使用して、 アクセスIP リスト からプライベート アドレスのみを許可できるようにします。
プライベートネットワークを使用しない場合は、NAT ゲートウェイ 経由で Atlas クラスターに接続することを検討してください。それ以外の場合は、すべてのIPアドレス(0.0.0.0/0)に Atlas クラスターへのアクセスを許可する必要があります。
警告
/0CIDR(たとえば、0.0.0.0/0)を追加すると、どこからでもアクセスできるようになります。この構成により、配置が不正アクセス、データの持ち出し、その他の悪意のあるアクティビティにさらされる可能性があります。可能な限り、信頼できる IP アドレスまたは CIDR 範囲にアクセスを制限し、パブリックインターネットからのアクセスを許可する場合は、すべてのデータベースユーザーに対して強力な認証情報を使用してください。注意
プロジェクトアクセスリストに IPv4
/0CIDR(たとえば、0.0.0.0/0または10.0.0.0/0)を追加すると、Atlas は、そのプロジェクトに直接ロールが付与されているすべてのユーザー、またはチーム(そのチームにプロジェクトのロールが付与されている場合)を通じて間接的にロールが付与されているすべてのユーザーに、警告メールを送信します。
- maxIdleTimeMS を
60000に設定すると、アイドルタイムが 1 分経過した後に接続が自動的に閉じられます。maxIdleTimeMSを調整すると、サーバーレス関数からのタイムアウト エラーの発生を減らすことができます。
同時実行性を構成します。 新しいGoogle Cloud Platform関数を作成すると、
複数の同時リクエストを処理できる2nd gen環境を選択します。 2と 生成では、関数が多数の同時呼び出しで単一の
MongoClientを共有できるようにすることで、サーバーの接続負荷も軽減されます。同時実行設定を増やすと、コールド スタートが最小限に抑えられ、レイテンシが改善されます。
注意
同時実行設定を増やす場合は、最高のパフォーマンスを得るために CPU を増やす必要がある場合があります。詳細については、同時実行性 を参照してください。
Google Cloud Platform接続例
次の例では、Node.js Google Cloud Platform 関数を Atlas配置に接続します。 <YOUR-ATLAS-CONNECTION-STRING> を Atlas 接続文字列に置き換えます。
const { MongoClient } = require('mongodb'); let client; async function getConnection() { if (!client) { const client = new MongoClient('<YOUR-ATLAS-CONNECTION-STRING>'); client.on('connectionCreated', () => { console.log('New connection created successfully.'); }); // Connect to the database in the global scope await client.connect(); } return client; }