AWS日記33 (DocumentDB)

# はじめに
今回は [Amazon DocumentDB](https://aws.amazon.com/jp/documentdb/) を試します。

デベロッパーガイドの[Amazon EC2 を使用したConnect](https://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/connect-ec2.html) の手順を参考に、EC2からDocumentDBに接続します。


# Amazon EC2 インスタンスを作成

![ec2_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/0eba0cfc-ee5e-f543-10be-c46f9d4cce15.jpeg)

 - Amazon EC2 コンソールで、「インスタンスを起動」 を選択します。

![ec2_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/c3a69ea3-1cd4-c40b-92e1-306b7ceee1b9.jpeg)

 - 今回は「Amazon Linux 2 AMI」 を選択します。

![ec2_3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/90e79de5-b3e1-ae53-35ee-3f447632deec.jpeg)

 - インスタンスタイプは「t2.micro」 を選択します。

![ec2_5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/c6a5943e-ea5a-7169-a6a4-13b3a990d5f6.jpeg)

 - SSH接続できる設定になっていることを確認します。


 - 次の画面でAmazon EC2 key pairを作成・ダウンロードし、インスタンスを起動します。

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

![security_group_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/a40f96bf-64c6-45a4-cb09-a0768c1d3e07.jpeg)

 - Amazon EC2 コンソールから「セキュリティーグループ」を選択します。
 - セキュリティーグループ名を入力し、VPCを選択します。

![security_group_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/6f92b6ad-cba6-2edb-4b77-2e68d482c680.jpeg)

 - インバウンドルールから「ルールを追加」を選択します。

![security_group_3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/ec4ad728-bb6e-6d66-f279-72e23c2030ba.jpeg)

 - ポート範囲は「27017」に設定します。
 - ソースは先ほど作成したEC2のセキュリティーグループを選択します。
 - ページ最下部の「セキュリティーグループを作成」を選択します。

# Amazon DocumentDB クラスターを作成

![documentdb_0.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/deb92b4a-9822-dcd4-f793-d744ba2b3c6c.jpeg)

 - Amazon DocumentDB コンソールのクラスターから、「作成」を選択します。

![documentdb_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/7a1599bd-5482-a105-43f5-8a3ff9154f57.jpeg)

 - 今回はインスタンス数を「 1 」に設定します。

![documentdb_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/81b03492-a1d2-e3c7-b391-cf93974752a8.jpeg)

 - マスターユーザー名とマスターパスワードを設定します。
 - ページ最下部の「詳細設定の表示」を選択します。

![documentdb_3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/3ed00d5e-20c0-0330-a10f-b0f8d53bdebc.jpeg)

 - Virtual Private Cloud(VPC)はEC2と同じ設定にします。
 - VPCセキュリティーグループは、先ほど作成したセキュリティーグループを選択します。

![documentdb_5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/d0bb82bc-ec00-292a-848b-a6bd928d5a2c.jpeg)

 - ページ最下部の「クラスターの作成」を選択します。

# EC2に接続

![access_to_ec2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/10b66211-8055-5279-a1a5-4809788b5eaf.jpeg)

 - EC2コンソールから、SSHクライアントでの接続方法を確認します。
 - EC2インスタンス作成時にダウンロードしたキーを使い、EC2にSSH接続します。

## mongo シェルをインストール
 - リポジトリ・ファイルを作成します。

```bash
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 シェルをインストールします

```bash
sudo yum install -y mongodb-org-shell
```

# Amazon DocumentDB に接続

![access_to_documentdb.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/5dcab6fd-775b-9141-4e82-f8e68127e4ee.jpeg)

 - Amazon DocumentDBコンソールから、mongoシェルで接続する方法を確認します。
 - 認証に必要な証明書をダウンロードします。

```bash
wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
```

 - mongoシェルのコマンドを実行し接続します。

## 動作確認
```bash
rs0:PRIMARY> help
	db.help()                    help on db methods
	db.mycoll.help()             help on collection methods
	sh.help()                    sharding helpers
	rs.help()                    replica set helpers
	help admin                   administrative help
	help connect                 connecting to a db help
	help keys                    key shortcuts
	help misc                    misc things to know
	help mr                      mapreduce

	show dbs                     show database names
	show collections             show collections in current database
	show users                   show users in current database
	show profile                 show most recent system.profile entries with time >= 1ms
	show logs                    show the accessible logger names
	show log [name]              prints out the last segment of log in memory, 'global' is default
	use <db_name>                set current database
	db.mycoll.find()             list objects in collection mycoll
	db.mycoll.find( { a : 1 } )  list objects in mycoll where a == 1
	it                           result of the last line evaluated; use to further iterate
	DBQuery.shellBatchSize = x   set default number of items to display on shell
	exit                         quit the mongo shell
```

# 終わりに
Amazon DocumentDB を試しました。

SSHトンネルを作成して[Amazon VPC の外部から Amazon DocumentDB クラスターへの接続](https://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/connect-from-outside-a-vpc.html)する方法も、今後試して行こうと思います。

<details><summary>参考資料</summary><div>

[Amazon DocumentDB の使用開始](https://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/get-started-guide.html)

[AWS DocumentDBのクラスタ構築からmongoコマンドで接続するまで](https://suzuki-navi.hatenablog.com/entry/2020/06/13/131412)

[Amazon DocumentDB (MongoDB 互換) の料金](https://aws.amazon.com/jp/documentdb/pricing/)

[Install MongoDB Community Edition on Amazon Linux](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-amazon/)

[Amazon DocumentDB を使って AWS Lambda ベースのアプリケーションを実行する](https://aws.amazon.com/jp/blogs/news/running-aws-lambda-based-applications-with-amazon-documentdb/)