はじめに
1時間の音声を15秒で文字起こしし自然な会話形式に自動変換する「インタビューAI」を個人開発中。
現在、開発環境での開発をほぼ終え、本番環境への移行中。
フロントエンドは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.json
のdependencies
セクションに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をインストール
インストールが完了したら、MongoDB Compassを起動し、MongoDB Atlasから取得した接続文字列をコピーする。名前は任意だが、今回はprd-interview-aiにした。
すると、無事接続し下記のようにコレクションも表示された。今回は、クラスタ作成時にサンプルデータにチェックを入れていたので、サンプルデータがデフォルトで表示されている。
実際の動作確認とPostmanを使ったテスト手順
Cloud RunにデプロイしたバックエンドがMongoDB Atlasに接続できるかを確認し、APIリクエストを行って動作をテストする。
今回は、Visual Studio CodeからPostmanを使ってバックエンドAPIを直接呼び出すことでMongoDBとの接続をテストする。
Postmanの左上にある「New」ボタンをクリックし、「Request」を選択。
HTTPメソッドでPOSTを選択し、URLでCloud RunにデプロイしたバックエンドのURLを入力する。
「Body」タブを選択し、「raw」を選び、データ形式をJSON
に設定し、新規ユーザー登録として下記のJSONを入力して「Send」をクリック。
{
"uid": "test-uid",
"email": "test@example.com"
}
レスポンスのメッセージで、「ユーザーが正常に保存されました」と表示され、MongoDB Compassのusersコレクションにも無事作成したユーザーが保存されたことを確認できた。
まとめ
今回の記事では、MongoDB Atlasを使用して本番環境でデータベースのホスティングを行い、Google Cloud Runと連携させる手順を記載した。
MongoDB Atlasでクラスタを作成し、接続URIを安全に管理するためにGoogle Cloud Secret Managerを利用。また、MongoDB Compassを活用してデータの確認や、実際のAPI接続テストを行うことで、本番環境でのデータ保存の流れをフロントエンドとは分離して検証した。