AWS documentDBメモ

Amazon documentDB

メモの内容

AWSにdocumentDBをたてる

  • awsコンソールからdocumentDBの画面から「作成」 f:id:y-ni-shi:20200829131510p:plain

AWS documentDBにアクセスする前の準備

  • EC2などのAWSリソースからしかアクセスできない(パブリックなエンドポイントはない)
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クラスタに接続する

これがよくわからん・・・(接続失敗することが当初多発した)

f:id:y-ni-shi:20200829131733p:plain

  • 上記のように接続情報が出る
  • 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

  • クラスタの名前が解決できていない?(DNSへの反映?)
    • クラスタの準備ができるまでは接続できないのか

クラスタにアクセスするのではなく、インスタンスに直接アクセスも可能

  • とりあえずトラブルシュートするときにはインスタンスへのアクセス方法も知っておいていいと思う
    • クラスタエンドポイントではなく、インスタンスにならとりあえず直接可能
  • 以下に手順。

AWSCLIを使ってdocumentDBのクラスタとかインスタンスを確認する

docs.aws.amazon.com

$ 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',})