Amazon Web Services ブログ

Amazon DocumentDB (MongoDB 互換) の開始方法 – パート 1 – Amazon EC2 の使用

Amazon DocumentDB (MongoDB 互換) は、MongoDB のワークロードをサポートする高速でスケーラブル、かつ可用性に優れた完全マネージドのドキュメントデータベースサービスです。お客様は、基盤となるインフラストラクチャの管理を気にすることなく、現在ご使用のものと同じ MongoDB 3.6 向けのアプリケーションコード、ドライバー、ツールを、そのまま Amazon DocumentDB 上でワークロードを実行、管理、そしてスケールするのに使えます。ドキュメントデータベースである Amazon DocumentDB は、JSON データの保存、クエリ、およびインデックスを容易にします。

このシリーズのパート 1 のこの投稿では、Amazon DocumentDB の開始方法を示します。これを行うため、デフォルトの Amazon VPCAmazon EC2 インスタンスを作成します。デフォルトの VPC を作成する手順については、Amazon VPC の開始方法を参照してください。また、同じデフォルトの VPC で 1 インスタンスの Amazon DocumentDB クラスターをプロビジョニングします。この投稿では、ローカルコンピューターから EC2 インスタンスに SSH で接続し、mongo シェルを使用して EC2 インスタンスからクラスターに接続する方法を示します。最後に、Amazon DocumentDB クラスターに対してクエリを実行する方法を学びます。このチュートリアルを完了するためにかかる費用は 0.30 USD 未満です。 AWS リソースを作成するときは、AWS IAM のベストプラクティスに従うことをお勧めします。

次の図は、このチュートリアルの最終的なアーキテクチャを示しています。

このチュートリアルでは、特定のリージョンにおけるデフォルトの VPC を使用します。詳細については、Virtual Private Cloud (VPC) の作成を参照してください。

2 つのセキュリティグループの作成

最初のステップでは、デフォルトの VPC に 2 つの新しいセキュリティグループを作成します。最初のセキュリティグループ (demoEC2) では、ローカルマシン (クライアント) から EC2 インスタンスに SSH 接続できます。2 番目のセキュリティグループ (demoDocDB) を使用すると、EC2 インスタンスからポート 27017 (Amazon DocumentDB のデフォルトポート) で Amazon DocumentDB クラスターに接続できます。次の手順を実行します。

  1. Amazon EC2 コンソールで、[ネットワークとセキュリティ] を選択します。
  2. [セキュリティグループ] を選択します。
  3. [セキュリティグループの作成] を選択します。
    このページでは、セキュリティグループの名前と説明を入力するように求められます。
  4. 最初のセキュリティグループの [セキュリティグループ名] に、demoEC2 と入力します。
  5. オプションで、説明を入力します。
  6. [ルールの追加] を選択します。
  7. [タイプ] には [SSH] を選択します。[ポート範囲] は自動的にデフォルトで 22 になります。
  8. [ソース] で、[MY IP] を選択します。
    現在の IP アドレスからのみ demoEC2 セキュリティグループにアクセスできます。IP アドレスが変更された場合は、セキュリティグループを更新する必要があります。
  9. [作成] を選択します。
    次に、demoDocDB と呼ばれる Amazon DocumentDB クラスターの 2 番目のセキュリティグループを作成します。
  10. 次のとおり変更した上で、前の手順を繰り返します。
  • [タイプ] で、[カスタム TCP] を選択します。
  • [ポート範囲] に 27017 と入力します。
  • [ソース] で [demoEC2] を選択します。Amazon EC2 コンソールで demoEC2 ソース名を自動入力するには、ブラウザを更新しなければならない場合があります。
  1. [作成] を選択します。

EC2 インスタンスの作成

次のステップでは、Amazon DocumentDB クラスターのプロビジョニングに使用するのと同じリージョンおよび VPC に EC2 インスタンスを作成します。デフォルトの VCP に Amazon DocumentDB クラスターを作成します。Amazon DocumentDB は VPC のみのサービスであるため、この投稿では、EC2 インスタンスに SSH 接続し、EC2 インスタンスを使用して Amazon DocumentDB クラスターに接続する方法を示します。次の手順を実行します。

  1. Amazon EC2 コンソールで、[インスタンスの起動] を選択します。
  2. Amazon Linux 2 AMI を見つけ、[選択] を選択します。
  3. t2.micro インスタンスタイプを選択します。
  4. [確認して起動] を選択します。
  5. ステップ 7: インスタンスの起動の確認」ページで、最終設定を確認します。
    また、作成した demoEC2 セキュリティグループを使用することを指定する必要もあります。
  6. [セキュリティグループの編集] を選択します。
  7. [既存のセキュリティグループを選択] を選択します。
  8. demoEC2 グループを選択します。
  9. [確認して起動] を選択します。
    demoEC2 セキュリティグループを選択した場合は、セクションの下部に追加したルールが表示されます。次のスクリーンショットを参照してください。
  10. 情報を確認し、[起動] を選択します。
  11. [既存のキーペアの選択または新しいキーペアの作成] セクションで、Amazon EC2 キーペアを提供する必要があります。
    EC2 キーペアがない場合は、[新しいキーペアの作成] を選択して、指示に従います。秘密鍵ファイル (.pem ファイル) をダウンロードする必要があります。後で EC2 インスタンスにログインするときに、このファイルが必要になります。

    EC2 キーペアがある場合は、[キーペアの選択] で、リストからキーペアを選択します。EC2 インスタンスにログインするために使用できる秘密鍵ファイル (.pem ファイル) をすでに持っているはずです。
  12. [インスタンスの起動] を選択します。

Amazon DocumentDB クラスターの作成

EC2 インスタンスがプロビジョニングされている間に、Amazon DocumentDB クラスターを起動します。次の手順を実行します。

  1. Amazon DocumentDB コンソールの [クラスター] で、[作成] を選択します。
  2. [Amazon DocumentDB クラスターを作成する] のページの [インスタンス数] で、[1] を選択します。
    これにより、コストを最小限に抑えることができます。
  3. 他の設定はデフォルトのままにします。
  4. [認証] セクションで、ユーザー名とパスワードを入力します。
    このユーザー名とパスワードを使用して、後の手順でクラスターを認証します。
  5. [詳細設定を表示] をオンにします。
  6. [ネットワーク設定] セクションの [VPC セキュリティグループ] で、[demoDocDB] を選択します。
  7. [クラスターの作成] を選択します。
    Amazon DocumentDB がクラスターをプロビジョニングしています。完了するまでに数分かかることがあります。クラスターとインスタンスの両方のステータスが [使用可能] と表示されたら、クラスターに接続できます。Amazon DocumentDB がクラスターをプロビジョニングしている間に、Amazon DocumentDB クラスターに接続するための残りの手順を実行します。

EC2 インスタンスへの接続

mongo シェルをインストールするには、最初に EC2 インスタンスに接続する必要があります。mongo シェルをインストールすると、Amazon DocumentDB クラスターに接続してクエリを実行できます。次の手順を実行します。

  1. Amazon EC2 コンソールで、作成したインスタンスを選択します。
    インスタンスのステータスが [実行中] の場合、これに接続して、mongo シェルをインストールできます。
  2. [接続] を選択します。
    接続方法には 3 つのオプションがあります。
  • スタンドアロン SSH クライアント
  • セッションマネージャー
  • EC2 Instance Connect (ブラウザベースの SSH 接続)

この投稿では、EC2 Instance Connect とスタンドアロン SSH クライアントについて説明します。EC2 Instance Connect は、ブラウザベースの SSH 接続を使用して、ボタンをクリックするだけで EC2 インスタンスに接続するため、最も速く、かつ、多くの場合において最も簡単なオプションです。スタンドアロン SSH クライアントは、ローカルマシンで Terminal や PuTTY などの SSH クライアントを使用してクラスターに接続する場合に適したオプションです。

このチュートリアルを開始した後で IP アドレスが変更された場合、または後で環境に戻る場合、demoEC2 セキュリティグループの受信ルールを更新して、新しい API アドレスからの受信トラフィックを有効にする必要があります。

EC2 Instance Connect

ブラウザベースの SSH 接続を使用して EC2 インスタンスに接続するには、次の手順を実行します。

  1. [インスタンスに接続] セクションの [接続方法] で、[EC2 Instance Connect (ブラウザベースの SSH 接続)] を選択します。ユーザー名はデフォルトで「ec2-user」になります。
  2. [接続] を選択します。
    コマンドラインプロンプトが開き、そこからコマンドを実行できます。次のスクリーンショットを参照してください。
    mongo シェルのインストールの手順に進みます。

スタンドアロン SSH クライアント

スタンドアロン SSH クライアントのデフォルトの接続方法に接続するには、次の手順を実行します。

  1. [インスタンスに接続] セクションの [接続方法] で、[スタンドアロン SSH クライアント] を選択します。
  2. [接続] を選択します。
  3. [インスタンスに接続] セクションで、サンプルの接続文字列をコピーします。
    ローカルマシンとして macOS を使用している場合は、ターミナルを開き、サンプルの接続文字列を使用して EC2 インスタンスに接続します。この手順は、ローカルマシンとして何を使用しているかによって異なります。詳細については、SSH を使用して Linux インスタンスに接続するを参照してください。[接続] を選択する場合は、前にダウンロードまたは選択した .pem ファイルに適切なアクセス許可があることを確認する必要があります。このチュートリアルでは、.pem ファイルに documentdb.pem という名前を付けます。次のスクリーンショットは、EC2 インスタンスの .pem と、EC2 インスタンスに正しいアクセス許可を設定する方法を示しています。
    EC2 インスタンスに初めて接続するときは、ホストの信頼性を検証する必要があります。
  4. すべてが正しければ、yes と入力します。
    これで、Amazon DocumentDB クラスターと同じリージョンおよび VPC にある EC2 インスタンスに接続されます。次のスクリーンショットを参照してください。
    次のステップに進みます。

mongo シェルのインストール

これで、Amazon DocumentDB クラスターへの接続およびクエリに使用するコマンドラインユーティリティである mongo シェルをインストールできます。

mongo シェルを Amazon Linux にインストールするには、次の手順を実行します。

  1. リポジトリファイルを作成します。EC2 インスタンスのコマンドラインで、次のコマンドを実行します。
    echo -e "[mongodb-org-3.6] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.6/x86_64/\ngpgcheck=1 \nenabled=1 \ngpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc" | sudo tee /etc/yum.repos.d/mongodb-org-3.6.repo 

    完了したら、次のコマンドを実行して mongo シェルをインストールします。

    sudo yum install -y mongodb-org-shell

    新しい Amazon DocumentDB クラスターでは、Transport Layer Security (TLS) がデフォルトで有効になっています。詳細については、Amazon DocumentDB クラスターの TLS 設定の管理を参照してください。

  2. 転送中のデータを暗号化するには、Amazon DocumentDB の CA 証明書をダウンロードします。次のコードを参照してください。
    wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

    これで、Amazon DocumentDB クラスターに接続する準備ができました。

Amazon DocumentDB クラスターへの接続

  1. Amazon Document DB コンソールの [クラスター] で、クラスターを見つけます。
    この投稿では、クラスター docdb-2020-02-08-14-15-11 を使用します。
  2. 作成したクラスターを選択します。
  3. 提供された接続文字列をコピーします。
    <insertYourPassword> を省略して、接続時に mongo シェルがパスワードの入力を求めるようにします。これにより、パスワードをクリアテキストで入力する必要がなくなります。
    接続文字列は次のコードのようになります。

    mongo --ssl host docdb-2020-02-08-14-15-11.&lt;cluster&gt;.&lt;region&gt;.docdb.amazonaws.com:27107 --sslCAFile rds-combined-ca-bundle.pem --username demoUser --password

    パスワードを入力して rs0:PRIMARY> プロンプトが表示される場合、Amazon DocumentDB クラスターに正常に接続されています。トラブルシューティングの情報については、Amazon DocumentDB のトラブルシューティングをご参照ください。

データの挿入およびクエリ

これでクラスターに接続されたので、ドキュメントデータベースの使用に慣れるために、いくつかのクエリを実行できます。

単一のドキュメントを挿入するには、次のコードを入力します。

db.collection.insert({"hello":"DocumentDB"})

次の出力が得られます。

WriteResult({ "nInserted" : 1 })

作成したドキュメントは、findOne() コマンドで読み取ることができます (単一のドキュメントしか返さないため)。次のコードを参照してください。

db.collection.findOne()

次の出力が得られます。

{ "_id" : ObjectId("5e401fe56056fda7321fbd67"), "hello" : "DocumentDB" }

さらにいくつかのクエリを実行するのであれば、ゲームプロファイルのユースケースを検討してください。まず、プロファイルと呼ばれるコレクションにいくつかのエントリを挿入します。次のコードを参照してください。

db.profiles.insertMany([
{ "_id" : 1, "name" : "Tim", "status": "active", "level": 12, "score":202},
{ "_id" : 2, "name" : "Justin", "status": "inactive", "level": 2, "score":9},
{ "_id" : 3, "name" : "Beth", "status": "active", "level": 7, "score":87},
{ "_id" : 4, "name" : "Jesse", "status": "active", "level": 3, "score":27}
])

次の出力が得られます。

{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3, 4 ] }

find() コマンドを使用して、プロファイルコレクションのすべてのドキュメントを返します。次のコードを参照してください。

db.profiles.find()

次の出力が得られます。

{ "_id" : 1, "name" : "Tim", "status" : "active", "level" : 12, "score" : 202 }
{ "_id" : 2, "name" : "Justin", "status" : "inactive", "level" : 2, "score" : 9 }
{ "_id" : 3, "name" : "Beth", "status" : "active", "level" : 7, "score" : 87 }
{ "_id" : 4, "name" : "Jesse", "status" : "active", "level" : 3, "score" : 27 }

フィルターを使用して単一ドキュメント用のクエリを使用します。次のコードを参照してください。

db.profiles.find({name: "Jesse"})

次の出力が得られます。

{ "_id" : 4, "name" : "Jesse", "status" : "active", "level" : 3, "score" : 27 } 

ゲームの一般的なユースケースは、特定のユーザーのプロファイルを見つけ、ユーザーのプロファイルの値を増分することです。このシナリオでは、上位のアクティブなゲーマーに対してプロモーションを実行します。ゲーマーがアンケートに記入すると、スコアが +10 増加します。これを行うには、findAndModify コマンドを使用します。このユースケースでは、ユーザーである Tim がアンケートを受け取り、記入を完了しました。Tim のスコアにクレジットを付与するには、次のコードを入力します。

db.profiles.findAndModify({
    query: { name: "Tim", status: "active"},
    update: { $inc: { score: 10 } }
})

次の出力が得られます。

{
	"_id" : 1,
	"name" : "Tim",
	"status" : "active",
	"level" : 12,
	"score" : 202
}

次のクエリで結果を確認できます。

db.profiles.find({name: "Tim"})

次の出力が得られます。

{ "_id" : 1, "name" : "Tim", "status" : "active", "level" : 12, "score" : 212 }

これで、データの挿入およびクエリを続行できます。

クリーンアップ

チュートリアルが完了したら、コストを抑えるためにAmazon DocumentDB クラスターを停止して EC2 インスタンスを停止するか、リソースを削除できます。詳細については、Amazon DocumentDB クラスターの削除インスタンスの終了を参照してください。

まとめ

この投稿では、EC2 インスタンスを作成し、mongo シェルをインストールし、Amazon DocumentDB クラスターを作成し、クラスターに接続し、いくつかのクエリを実行して、Amazon DocumentDB 内で JSON ドキュメントを挿入およびクエリすることがいかに容易であるかを確認することにより、Amazon DocumentDB の開始方法を示しました。詳細については、Amazon DocumentDB の強化 (MongoDB 互換) を参照してください。最近のリリースとブログ投稿の詳細については、Amazon DocumentDB (MongoDB 互換) リソースを参照してください。このシリーズの次回のブログ投稿にご期待ください。AWS Cloud9 を使用した Amazon DocumentDB の開始方法を示します。

 


著者について

 

Joseph Idziorek は、アマゾン ウェブ サービスのプリンシパルプロダクトマネージャーです。