Amazon Web Services ブログ

Amazon DocumentDB (MongoDB 互換) の開始方法 – パート 2 – AWS Cloud9 の使用

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

このシリーズのパート 2 のこの投稿では、 AWS Cloud9 を使用した Amazon DocumentDB の開始方法を示します。最初の手順として、デフォルトの Amazon VPCAWS Cloud9 環境と Amazon DocumentDB クラスターを作成します。デフォルトの VPC を作成する手順については、Amazon VPC の開始方法をご参照ください。この投稿では、mongo シェルを使用して AWS Cloud9 環境から Amazon DocumentDB クラスターに接続して、いくつかのクエリを実行する方法を示しています。このチュートリアルを完了にかかる費用は 0.30 USD 未満です。AWS リソースを作成する場合、AWS IAM のベストプラクティスに従うことをお勧めします。ローカルマシンで Amazon DocumentDB の使用を開始する方法の詳細については、「Getting started with Amazon DocumentDB (with MongoDB compatibility); Part 1 – using Amazon EC2」をご参照ください。

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

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

AWS Cloud9 環境の作成

AWS Cloud9 環境を作成するには、次の手順を実行します。

  1. AWS マネジメントコンソールを使用して、AWS Cloud9 マネジメントコンソールで、[環境を作成] を選択します。
  1. [環境の名前と説明] の [名前] に、環境の名前を入力します。
    この投稿では、DocumentDBCloud9 と名前を付けています。
  1. [次のステップ] を選択します。
  2. [設定の構成] セクションでは、すべてのデフォルト設定値をそのままにします。
  3. [次のステップ] を選択します。
  4. [レビュー] セクションで、[環境を作成] を選択します。

AWS Cloud9 環境のプロビジョニングには、最大 3 分かかります。完了すると、次のコマンドプロンプトが表示されます。

コマンドプロンプトにリダイレクトされ、mongo シェルをインストールして Amazon DocumentDB クラスターに接続します。

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

この手順では、AWS Cloud9 環境からポート 27017 (Amazon DocumentDB のデフォルトポート) を開いて Amazon DocumentDBクラスターに接続できるように新しいセキュリティグループを作成します。次の手順を実行します。

  1. Amazon EC2 コンソール の [ネットワークとセキュリティ] で、[セキュリティグループ] を選択します。
  2. [セキュリティグループの作成] を選択します。
  3. [セキュリティグループ名] に、demoDocDB と入力します。
  4. VPC の場合、デフォルト の VPC を使用します。
  5. [説明] にはグループの説明を入力します。
  6. [インバウンドのルール] セクションでは、[ルールを追加] を選択します。
  7. [タイプ] で、[カスタム TCP] を選択します。
  8. [ポート範囲] に 27017 と入力します。
    ソースセキュリティグループは、作成した AWS Cloud9 環境用のセキュリティグループです。
  9. 使用可能なセキュリティグループの一覧を表示するには、宛先フィールドに cloud9 と入力します。
  10. aws-cloud9- <environment name>で名付けられたセキュリティグループを選択します。
  11. 他のすべてのデフォルト設定をそのままにして、[セキュリティグループを作成] を選択します。

次のスクリーンショットは、この手順で作成したセキュリティグループと、AWS Cloud9 環境を作成したときに作成した AWS Cloud9 セキュリティグループを示しています。

Amazon DocumentDB クラスターの作成

Amazon DocumentDB クラスターを作成するには、次の手順を実行します。

  1. Amazon DocumentDB マネジメントコンソールの [クラスター] で、[作成] を選択します。
  2. [Amazon DocumentDB クラスターを作成する] のページの [インスタンス数] で、[1] を選択します。
    これにより、コストを最小限に抑えることができます。
  3. 他の設定はデフォルトのままにします。
  4. [認証] セクションで、ユーザー名とパスワードを入力します。
  5. [詳細設定を表示] をオンにします。
  6. [ネットワーク設定] セクションの [VPC セキュリティグループ] で、[demoDocDB] を選択します。
  7. [クラスターの作成] を選択します。

Amazon DocumentDB がクラスターをプロビジョニングしています。完了するまでに数分かかることがあります。クラスターとインスタンスの両方のステータスが [使用可能] と表示されたら、クラスターに接続できます。Amazon DocumentDB がクラスターをプロビジョニングしている間に、Amazon DocumentDB クラスターに接続するための残りの手順を実行します。

mongo シェルのインストール

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

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

AWS Cloud9 環境をまだ開いている場合、手順 3 に進みます。

  1. AWS Cloud9 マネジメントコンソールの [環境] で、[DocumentDBCloud9] を選択します。
  2. IDE を開くを選択します。
  3. コマンドプロンプトで、次のコードを使い、リポジトリファイルを作成します。
    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 
  4. 完了したら、次のコードを使い mongo シェルをインストールします。
    sudo yum install -y mongodb-org-shell

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

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

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

Amazon DocumentDB クラスターへの接続

  1. Amazon DocumentDB コンソールの [クラスター] で、クラスターを見つけます。
    この投稿では、クラスター docdb-2020-02-08-14-15-11 を使用します。
  2. 作成したクラスターを選択します。
  3. 提供された接続文字列をコピーします。
    <insertYourPassword> を省略して、接続時に mongo シェルがパスワードの入力を求めるようにします。これにより、パスワードをクリアテキストで入力する必要がなくなります。
    接続文字列は次のコードのようになります。
    パスワードを入力して 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 クラスターを停止してコストを抑えるか、クラスターを削除できます。デフォルトでは、30 分間何も操作しないと、AWS Cloud9 環境の基盤となる EC2 インスタンスを停止してコストを節約します。

まとめ

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

 


著者について

 

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

 

 

 

 

Kashif Imran は、アマゾン ウェブ サービスのソリューションアーキテクトです