MongoDB Atlasは、HerokuにMongoDBを簡単かつ無料でセットアップしてデプロイできます。 MongoDB Atlasは、一般にマルチクラウドデータアプリケーションプラットフォームと呼ばれます。これは、ユーザーがデータを使用して構築する方法を簡素化および加速する、統合されたデータおよびクラウドDBサービスです。
より複雑なクラウドネイティブアプリの構築を開始する場合、適切なツールとサービスを選択することは非常に困難になる傾向があります。ただし、MongoDB Atlasが最適なソリューションであるため、最適なクラウドDBサービスを選択する場合はそうではありません。
一方、HerokuはPlatform as a Service(PaaS)であり、開発者にクラウド上でアプリを実行、構築、操作、操作する機能を提供します。 Herokuは多数のプログラミング言語をサポートしています。
この記事ガイドでは、HerokuにMongoDBをデプロイする方法について説明します。ほとんどのHerokuアプリケーションと簡単に統合できるため、MongoDBAtlasバージョンを使用します。このプロセスは最初は複雑に見えるかもしれませんが、深く掘り下げると何も複雑ではないことに気付くでしょう。必要なのは、MongoDB Atlasクラスター接続文字列を既知のHeroku構成変数に設定することだけです。これで、準備は完了です。
Atlasエディションは、クラウドでのMongoDBクラスター管理を自動化するフルマネージドクラウドMongoDBサービスです。自動スケーリング、自動バックアップ、完全なスイート管理、分析ツール、およびマルチAZ許容誤差をユーザーに提供します。 MongoDB Atlasは、最も洗練されたDBaaSの1つです。
ここに記載されている手順に従って、MongoDBを起動し、すばやく実行する方法を学びます。この記事で提供されている詳細なガイドに従うことで、MongoDBAtlasクラスターをHerokuアプリに接続する方法も確認できます。
HerokuにMongoDBをデプロイする方法
この記事ガイドは、次の前提条件が整っていることを前提としています。
- あなたはMongoDBに精通しており、MongoDBアプリケーションを作成しました
- Herokuに精通しており、以前にHerokuアプリケーションをデプロイしたことがあります
- HerokuCLIをインストールしました
- あなたはGitに精通しており、Gitをインストールしています。
上記の前提条件を使用して、上記の主題について詳しく学びましょう。
MongoDBAtlasClusterのセットアップ
まず、MongoDBAtlasClusterを5ステップ未満でセットアップする方法を見ていきます。
ステップ1:MongoDBAtlasアカウントを作成する
注: メールアドレスを使用してMongoDBアカウントを既に作成している場合は、登録プロセスをスキップして、アカウントにサインインしてください。
新しいMongoDBAtlasアカウントの登録は非常に簡単です。メールアドレスまたはGoogleアカウントを使用して登録することを選択できます。
プロセスは完全に無料です。したがって、追加料金が発生することを心配する必要はありません。
このリンクをたどって、MongoDBAtlasアカウントに無料で登録します。詳細を入力し、[無料で開始]ボタンをクリックして、無料のAtlasアカウントを取得してください。
Atlasアカウントを取得したら、次のステップに進みます
ステップ2:プロジェクトと組織を作成する
MongoDB Atlasは、デフォルトで、登録プロセスの完了後に組織とプロジェクトを作成するように求めるプロンプトを表示します。必要な詳細をすばやく入力してこのプロセスを完了し、次のステップに進みます。組織とプロジェクトは、将来的にクラスターを展開するために使用されます。
ステップ3:クラスターをデプロイする
このフェーズでは、さまざまなクラスターオプションからクラスターを選択します。この記事ガイドでは、MongoDBAtlasが提供する無料のクラスターオプションである「共有クラスター」オプションを使用します。 [共有クラスター]オプションの下にある[作成]をクリックします。
以下で強調表示されているように、次のページでクラスターのいくつかのオプションを選択するように求められます。
クラウドプロバイダーとリージョン
ここで、クラスターをデプロイする場所を選択する必要があります。アプリケーションに最も近いリージョンを選択することが不可欠です。理想的には、レイテンシー関連の問題を最小限に抑えるために、一定の領域を選択する必要があります。この地域を使用します。バージニア(us-east-1)」、このガイドのソースクラウドプロバイダーとしてAWSを使用。 Herokuにデプロイし、AWSでインフラストラクチャをホストするため、クラウドプロバイダーとしてAWSを選択しました。
クラスター層
このサブセクションでは、選択したクラスターオプション(この場合は共有クラスターオプション)で使用可能なクラスター層を確認します。ここでは、RAM、ストレージ、ティアの基本価格、およびvCPUの比較が表示されます。これらの比較は、プロジェクトに適した正しい階層を選択するのに役立ちます。このガイドでは、デフォルトの「M0サンドボックス」階層のままにしておきます。
追加設定
このセクションは、選択したティアによって異なります。選択したティアによっては、追加の設定が表示される場合があります。これらの設定には、バックアップオプションとデプロイするMongoDBバージョンが含まれます。 MongoDBバージョン4.4を選択し、バックアップオプションをオフのままにします。
クラスター名
これが最後のオプションです。ここで、クラスターに名前を付けた場合に役立ちます。私たちのクラスターを「Leafix」と呼びます。クラスターを作成した後は、変更することはできません。
注:[クラスターの作成]ボタンを使用してクラスターを作成する前に、選択したオプションを確認し、必要な変更を加えることをお勧めします。
ステップ4:新しく作成したクラスターのDBユーザーを作成する
MongoDB Atlasでは、クラスターにアクセスするために、クライアントがMongoDBデータベースユーザーとして認証される必要があります。提供された手順に従って、クラスターのDBユーザーを作成します。
- 「データベースアクセス」セクションに移動します。左側の「セキュリティ」タブの下にあります。
- 「新しいデータベースユーザーの追加」オプションをクリックします。
- プロンプトが表示されます。認証方法とデータベースユーザー権限を入力します
- 認証方法として「パスワード」を使用し、パスワードとユーザー名を入力します。
注: セキュリティに関連する問題を防ぐために、Atlasから強力なパスワードを自動生成することを強くお勧めします。パスワードを自動生成したら、後で簡単に取得できるように、パスワードをコピーして便利な場所に保存します。クラスタへの接続時にパスワードが必要になるため、この手順は非常に重要です。
- 「Atlasadmin」オプションを選択して、ユーザーに最も多くの権限を付与します。
- 完了したら、「ユーザーの追加」をクリックしてDBユーザーを作成します。
ステップ5:承認されたIPアドレスにクラスターアクセスを許可する
これは、MongoDBAtlasクラスターをセットアップする際の最後のステップです。このセクションでは、Atlasクラスターへのアクセスを可能にするIPアドレスを選択します。承認を与えるには、ここに記載されている手順に従ってください:
- [セキュリティ]で、[ネットワークアクセス]を選択します。
- 次に、「IPアドレスの追加」を選択します。
- 「どこからでもアクセスを許可する」を選択し、「確認」ボタンをクリックしてプロセスを完了します。
それで全部です。これで、MongoDBAtlasクラスターが正常にセットアップされました。
注 :セキュリティ上の問題があるため、本番環境ではこのタイプのIPアドレスアクセスを許可しないでください。アプリケーションの正確なIPアドレスを特定し、IPアドレス範囲を明示的に設定する必要があります。このプロセスは、クラスターのセキュリティを強化するように調整されています。
クラスターへの接続
新しく作成したクラスターに接続するには、次のガイドに従ってください:
- 左側のナビゲーションバーの[データストレージ]セクションで、[クラスター]をクリックします。
- [接続]タブをクリックします
- ドライバのバージョンを選択し、接続文字列のみをコピーします
完了したら、接続文字列を更新します。繰り返しになりますが、ユーザー名とパスワードを忘れずに追加してください。
Herokuアカウントの作成
Herokuアカウントの作成は非常に簡単です。まず、Herokuの公式ウェブサイトにアクセスして、MongoDBAtlasの場合と同じように登録します。 Herokuアカウントを完了したら、次に進み、HerokuCLIをインストールします。
HerokuCLIをインストールする
Heroku CLIにはGitが必要なため、LinuxOSにGitがインストールされていることを確認することが重要です。 Gitは、ほとんどの開発者が一般的に使用している人気のあるバージョン管理システムです。 Gitのインストールはとても簡単です。ターミナルを開き、以下のコマンドを実行します:
sudo apt-get install git-all
出力:
このコマンドは、GitをLinuxOSにインストールします。その後、次の別のコマンドを実行して、LinuxOSにHerokuをインストールします。
sudo snap install --classic heroku
出力:
ターミナルにコマンドを実行してHerokuを完全にインストールする時間を与えます。
HerokuWebサイトにログインして新しいアプリケーションを作成する
この記事を注意深くフォローしていて、Herokuアカウントを作成していると思います。その場合は、Herokuダッシュボードを開きます。 Herokuアカウントの作成に使用した詳細を入力して、ダッシュボードにログインします。ログインしたら、次の手順に進んで新しいアプリケーションを作成します。
- heroku.com/appsに移動します
- [新規]>[新しいアプリの作成]>[地域の選択]>[アプリの作成]を選択します。
- アプリが作成されるまでしばらくお待ちください。
- プロセスが完了すると、ダッシュボードにリダイレクトされます。 「デプロイ」セクションを選択します
Herokuアプリケーションをローカルリポジトリに接続する
以前に選択したこの記事の導入セクションに記載されている導入ガイドに従ってください。
それでも、前に選択した「Deploy」セクションでHerokuにログインします。
次のコマンド([デプロイ]セクションでも指定)を実行してHerokuに接続し、サーバー/プロジェクトのルートディレクトリから新しいDynoをビルドします。
注: アングルブラケット「<> 以下の例で使用されている「」は、ユーザー指定の識別子/パラメーター/引数の値を示します。コマンドを実行するときは、省略してください。
#Herokuリモートを追加
heroku git:remote -a <name-of-the-newly-created-app>
#利用可能なリモートを見てください。
#新しい「heroku」リモートリポジトリへの接続が表示されている必要があります。
git remote -v
#開発ブランチで、最新の作業をコミットします。
git add . git commit -m 'Write a clear, meaningful commit message here.' git push origin <development-branch-name>
#ブランチはマスターブランチにチェックアウトする必要があります。
git checkout master
#開発ブランチからの更新がマージされます。
git merge <development-branch-name> git push heroku master
構成変数を使用してMongoDBAtlasクラスターに接続するようにHerokuをセットアップする
Atlasクラスターをすばやくセットアップするのはとても楽しかったですが、このセクションをもっと楽しんでいただけると思います!
AtlasでサポートされているHerokuアプリケーションは、簡単に構築できます。クラスタの接続文字列を含むアプリケーションレベルの構成変数を作成します。セットアップが完了すると、アプリケーション内でその構成変数に安全にアクセスできます。
これがあなたのやり方です:
ステップ1:HerokuCLIを開いてログインします。
heroku login
このコマンドを使用すると、WebブラウザーのHerokuログインページに移動します。すでにログインしている場合は、[ログイン]ボタンをクリックします。-iフラグを使用してコマンドラインからログインすることもできます。
ステップ2:デモアプリのコピーを作成する
MongoDB Atlasを使用するプロトタイプのノードアプリケーションを作成しました。このレッスンを続けるために、Herokuに公開したいと思います。クローンを作成してから、次のディレクトリに移動します。
git clone https://github.com/adriennetacke/mongodb-atlas-heroku-leaflix-demo.git cd mongodb-atlas-heroku-leaflix-demo
出力:
ステップ3:Herokuアプリを作成する
heroku create leaflix
出力:
ご覧のとおり、leaflixに名前を付けました。
AtlasCluster接続文字列を取得します
Atlasクラスターのダッシュボードに戻って、接続文字列を取得してください。
- ドロップダウンメニューから[接続]を選択します。
- ドロップダウンメニューから[アプリケーションを接続]を選択します。
クラスタに接続するために必要な接続文字列は、ここにあります。接続文字列を書き留めます。
接続文字列をエディタに貼り付けます。 Heroku構成変数に割り当てる前に、いくつかの変更を加えます。
ご覧のとおり、Atlasには、以前に作成したデータベースユーザーのユーザー名が簡単に含まれています。 「password」を個人データベースユーザーのパスワードに置き換え、「dbname」を「sample_mflix」に置き換えます。これは、デモアプリが接続文字列を完成させて有効にするために使用するサンプルデータセットです。
注:データベースユーザーのパスワードがない場合は、パスワードを自動生成して接続文字列で使用してください。再度自動生成する場合は、更新することを忘れないでください。 [データベースアクセス]に移動し、パスワードを検索するデータベースユーザーで[編集]をクリックします>パスワードをリセットします>別の安全なパスワードを自動生成します。
MONGODB_URI構成変数を作成します
正しく作成できたので、接続文字列をHeroku構成変数に保存します。 MONGODB_URI構成変数を接続文字列に設定します:
heroku config:set MONGODB_URI="mongodb+srv://yourUsername:[email protected]/sample_mflix?retryWrites=true&w=majority"
覚えておくべきいくつかの重要なポイントは次のとおりです。
- このコマンドは1行のみで構成されています。
- 接続文字列の形式には特殊文字が含まれているため、引用符で囲む必要があります。
とても簡単です! Atlasクラスターの接続文字列がHeroku構成変数に正常に追加され、アプリがHerokuにデプロイされた後に安全にアクセスできるようになりました。
注: この構成変数は、アプリのHerokuダッシュボードの[設定]タブに入力することもできます。アプリでLeaflix>設定に移動します。 [構成変数]セクションの[構成変数を表示]ボタンをクリックして、そこに構成変数を入力します。
最後のステップは、これらの変数へのアクセスを許可するようにアプリケーションのコードを変更することです。
Herokuconfigvar値を使用してアプリをMongoDBAtlasクラスターに接続する
デモアプリケーションでAtlasクラスター接続文字列をハードコーディングしていることに気付くでしょう。以前に生成されたHeroku構成変数を使用するには、コードを作り直す必要があります。
環境変数は、構成変数をアプリケーションのコードに公開するために使用されます。これらの変数にアクセスするために選択した言語によって、それらにアクセスする方法が決まります。たとえば、Javaでは、 System.getenv(‘key’)を使用します 呼び出し、Rubyでは、 ENV [‘key’]を使用します 呼び出します。
アプリケーションがNodeで記述されていることを知っているので、Node.jsのprocess.env変数を使用してAtlasクラスターに接続できます。 server.jsファイルのURI定数を次のように変更します。
const uri = process.env.MONGODB_URI;
これで議論は終わりです。アプリケーションは、Heroku構成変数として追加したため、デプロイされたAtlasクラスター接続文字列に安全にアクセスします。
ファイルを保存し、変更をコミットしてから、Herokuにデプロイします。
git commit -am "fix: refactor hard-coded connection string to Heroku config var" git push heroku master
これで、アプリケーションがデプロイされました。このコマンドを使用して、Leaflixの少なくとも1つのインスタンスが実行されていることを再確認できます。
heroku ps:scale web=1
「dynoのスケーリング…完了、現在1:FreeでWebを実行しています」という通知を受け取ると、少なくとも1つのインスタンスが稼働していることがわかります。
最後に、アプリのウェブサイトに移動します。以下の手順に固執することでこれを行うことができます:
heroku open
「笑いが必要ですか?」を押すとボタンをクリックすると、当社のソフトウェアは、ジャンル領域の「コメディ」カテゴリに基づいて映画を選択します。すべてが正常であれば、次のように表示されます。この例では、サンプル_mflixデータセットが使用されています。これは、Atlasクラスターから直接取得されたものです。
MongoDBAtlasでのHerokuのIPアドレスの構成
クラスタはすでに動作しており、アプリはHerokuで稼働しています!
記事ガイドを参照するために、任意のIPアドレスからの接続を受け入れるようにクラスターを設定しました。アプリケーションへのアクセスのみを制限することをお勧めします。そのためのHerokuにはいくつかのオプションがあります。
最初のオプションは、アドオンを利用して、Atlasでのアクセスを制限するために使用できる静的なアウトバウンドIPアドレスをアプリケーションに与えることです。いくつかの例がここにあります。
もう1つのオプションは、Herokuプライベートスペースを使用し、スペースの静的アウトバウンドIPを使用することです。これはより高価な選択ですが、追加のアドオンが不要になります。
AWSまたはHerokuIP範囲を使用して、AWSエリアまたはそれらのリージョンのHerokuDynosで発信されたIPへのアクセスを提供できると主張するさまざまなドキュメントや記事があります。これは考えられますが、そのような範囲は時間の経過とともに変化する可能性があるため、お勧めしません。したがって、代わりに、上記の2つのアプローチのいずれかを使用することをお勧めします。
アプリケーションのIPアドレスを使用して、ファイアウォールを取得したら、Atlasでファイアウォールを構成できます。
Atlasクラスターから既存のIP範囲をすべて削除してから、許可リストに追加します。これを行うには、「IPアドレスを追加して既存のIP範囲を削除する」ために使用した手順に従います。
それで全部です! HerokuにMongoDBを正常にデプロイしました