💭

【MongoDB】本番環境でのMongoDB Atlas導入:クラスタ作成からCloud Runでの接続まで

2024/10/07に公開

はじめに

現在、1時間の音声を15秒で文字起こしし自然な会話形式に自動変換する「インタビューAI」を開発中。

https://www.interview-ai.site/

現在、開発環境での開発をほぼ終え、本番環境への移行中。

フロントエンドはReact、バックエンドはNode.js、データベースはMongoDBで開発。

MongoDB Atlasを使用して、本番環境でのデータベースホスティングからCloud Runでのバックエンド接続設定を行った。この記事では、クラスタ作成の手順、接続URIの安全な設定方法、Secret Managerを使ったシークレット管理、MongoDB Compassを用いたデータベースの確認方法までを記載。

MongoDB Atlasでのホスティングサービスの選択

ローカル環境のMongoDBは、Cloud Runから直接アクセスできないので、MongoDBをホスティングするために次のようなサービスを選択する必要がある。

  • MongoDB Atlas: クラウドベースのMongoDBホスティングサービスで、簡単にデプロイ可能。
  • 自分でホスティング: Google CloudのCompute Engineや他のクラウドプロバイダーを使用してMongoDBをホスティングする。

今回は、MongoDB Atlasを選択しようと思う。

MongoDB Atlasのクラスタ作成と設定手順

MongoDB Atlasにアクセスし、アカウントを作成する。

アカウント作成すると、クラスタ作成画面に自動で移動する。

本番リリース時は、M10が良いと思うが、一旦本番環境でDBが機能するかどうかを見たいのでM0(Free Tier:無料プラン)を選択。

クラスタ名(後から変更できない)は、サービス名と同じinterview-aiにする。プロバイダーは、今回GCPを利用しているのでGoogle Cloudを選択。

「Create Deployment」ボタンをクリックして、クラスタのプロビジョニングが完了するまで待つ。

MongoDB接続方法の選択

MongoDBクラスタの作成時に接続方法選択画面に移動する。

今回は、バックエンドアプリケーション(Node.jsなど)からMongoDBに接続するために、MongoDBのドライバーを使用する必要があるので「Drivers」を選択する。

MongoDB接続URIの取得

次の画面に記載されているように、backend/ディレクトリでnpm install mongodbを実行してMongoDBドライバーをインストールする。インストールが成功したら、package.jsondependenciesセクションにmongodbが追加されていることを確認。

Node.jsアプリケーションからMongoDB Atlasに接続するために使用する接続URIが、「Add your connection string into your application code」セクションに記載されているので、コピーしておく。

バックエンドからの接続設定:Cloud Runの利用

先ほどコピーした接続URIをCloud Runの環境変数MONGODB_URIとして設定する。

接続URIのセキュリティ管理として、Secret Managerを利用する。MongoDBの接続URIをSecret Managerに保存する。以下のコマンドでシークレットを作成できる。

echo -n "MongoDB接続URI" | gcloud secrets create MONGODB_URI --data-file=-

Cloud Runにデプロイする際に、作成したシークレットを環境変数として設定。以下のようにコマンドを実行する。

gcloud run deploy backend-service \
  --image gcr.io/[project-id]/backend \
  --platform managed \
  --region asia-northeast1 \
  --allow-unauthenticated \
  --set-secrets MONGODB_URI=projects/[project-number]/secrets/MONGODB_URI:latest \
  --service-account=service-account@[project-id].iam.gserviceaccount.com

無事デプロイが成功すると、公開されたバックエンドのサービスURLが表示される。

Cloud Runのコンテナ編集の「変数とシークレット」タブに、設定したMONGODB_URIが追加されたことを確認。

バックエンドコードの更新

MongoDB Atlasへの接続に必要なコードを実装する。接続URIを環境変数から取得するようにする。

const mongoose = require('mongoose');

// MongoDB接続
const uri = process.env.MONGODB_URI;

mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true })
    .then(() => console.log('MongoDB connected'))
    .catch(err => console.error('MongoDB connection error:', err));

この方法を使うことで、MongoDBの接続URIをSecret Managerで安全に管理し、Cloud Runにデプロイする際に機密情報を環境変数として設定することができる。

MongoDB Compassの導入とデータ確認

MongoDBクラスタを作成すると、下記のようなトップ画面が表示される。データベースをGUIで手軽に確認するためにMongoDB Compassを使用する。

「Connect」をクリックして、Compassをクリック。

すると、下記画面が表示されるので、MongoDB Compassをインストール

インストールが完了したら、、

続きはこちらで記載しています。
https://kazulog.fun/business/mongodb-atlas/

Discussion