Amazon documentDB
メモの内容
AWSにdocumentDBをたてる
- awsコンソールからdocumentDBの画面から「作成」
AWS documentDBにアクセスする前の準備
- EC2などのAWSリソースからしかアクセスできない(パブリックなエンドポイントはない)
- これ知らないと結構ハマる aws.amazon.com
Amazon DocumentDB は VPC のみのサービスであり、パブリックエンドポイントをサポートしていません。その結果、AWS 外部の環境から Amazon DocumentDB クラスターに直接接続することはできません
今回はEC2を立ててそこからアクセスする
EC2のインスタンスを起動してSSH
- ここは割愛
EC2にmongo shellをインストールしたい
参考(公式ページ) aws.amazon.com
以下のコマンドでmongo shellインストール
$ 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 $ sudo yum install -y mongodb-org-shell
証明書のダウンロード
- 証明書で暗号化をして通信をする必要がある
- デフォルトでは暗号化通信が有効になっているので、この証明書を使うことが必須のよう
- 以下のコマンドでダウンロードしておく
$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
AWSのdocumentDBクラスタに接続する
これがよくわからん・・・(接続失敗することが当初多発した)
- 上記のように接続情報が出る
mongo シェルでこのクラスターに接続する
の部分に記載のある情報でアクセスしたい- しかし、なぜか失敗することがある(起動直後はだめだったので、クラスタが立ち上がるまで結構かかる?)
- 以下がエラーメッセージ
$ mongo --ssl --host <cluster-endpoint>.ap-northeast-1.docdb.amazonaws.com:27017 --sslCAFile rds-combined-ca-bundle.pem --username masteruser --password secretsecret MongoDB shell version v3.6.19 connecting to: mongodb://<cluster-endpoint>.ap-northeast-1.docdb.amazonaws.com:27017/?gssapiServiceName=mongodb 2020-08-29T03:58:48.208+0000 I NETWORK [thread1] getaddrinfo("<cluster-endpoint>.ap-northeast-1.docdb.amazonaws.com") failed: Name or service not known 2020-08-29T03:58:48.208+0000 E QUERY [thread1] Error: couldn't initialize connection to host <cluster-endpoint>.ap-northeast-1.docdb.amazonaws.com, address is invalid : connect@src/mongo/shell/mongo.js:263:13 @(connect):1:6 exception: connect failed
Failed: Name or service not known
クラスタにアクセスするのではなく、インスタンスに直接アクセスも可能
- とりあえずトラブルシュートするときにはインスタンスへのアクセス方法も知っておいていいと思う
クラスタエンドポイント
ではなく、インスタンス
にならとりあえず直接可能
- 以下に手順。
AWSのCLIを使ってdocumentDBのクラスタとかインスタンスを確認する
$ aws docdb describe-db-instances \ --db-instance-identifier sample-instance \ --query 'DBInstances[*].[Endpoint.Address,Endpoint.Port]'
- ここで取得したエンドポイントに対してmongo shellで接続!
$ mongo --ssl --host <インスタンスエンドポイント>:27017 --sslCAFile rds-combined-ca-bundle.pem --username masteruser --password <insertYourPassword>
mongo shellでの接続後
- DB表示
$ show dbs
- DB使う(勝手に作る)
$ use <db name>
- collection表示
$ show collections
my
というコレクション作る
$ db.createCollection('my');
my
というコレクションの全件表示
$ db.my.find()
my
というコレクションにインサート
$ db.my.insert({name: 'myname',})