Amazon DocumentDB で、Amazon EC2 インスタンスとの 1 クリック EC2 接続がサポートされるようになりました

どうも、クラ本部の黒田です。
みなさん、大変お久しぶりですね。
2023年、あっという間に終わろうとしている12月は例年より、気温が高いなぁと感じいます。
来年に向けて、目標設定は完了していますか。
黒田の来年目標は、まず一つは、年収2000万を目標としているところ、なかりハード杉かもしれませんが、自分にとっては、それを実現する必要のある目標です。一緒に頑張りましょう!

さて、今回は、Amazon DocumentDB で、Amazon EC2 インスタンスとの 1 クリック EC2 接続がサポートされるようになりました とのことで、
早速 mongo シェル を使い、Amazon EC2 を用いて Amazon DocumentDB (MongoDB 互換性で) クラスターを起動して操作する方法をやってみたいというわけで、以下内容をご参考になれば幸いです。**

はじめに

Amazon DocumentDBとは
Amazon Web Services (AWS) が提供するフルマネージド型の分散ドキュメントデータベースサービスです。MongoDBと互換性があり、スケーラブルで高い耐久性を持つデータベースソリューションとして設計されています。

以下は、Amazon DocumentDBの主な特徴です:

MongoDBとの互換性:
Amazon DocumentDBはMongoDBとの高度な互換性を提供します。これにより、既存のMongoDBアプリケーションやツールを簡単にAmazon DocumentDBに移行することができます。

スケーラビリティ:
クラスターのサイズやインスタンスのタイプを簡単に変更することで、容易にスケールアップまたはスケールダウンが可能です。これにより、動的に変化するトラフィックやデータのニーズに柔軟に対応できます。

高耐久性と可用性:
Amazon DocumentDBはデータの耐久性と高可用性を確保するために、複数のアベイラビリティーゾーンにわたってデータを複製します。

セキュリティ:
AWSのセキュリティとアイデンティティ管理機能を活用し、データの安全性を確保します。これには、ネットワークの分離、暗号化、アクセス管理などが含まれます。

バックアップとリストア:
自動バックアップやスナップショットの作成により、データの保護とリカバリが容易です。

パフォーマンスの監視:
AWSの統合監視ツールを使用して、データベースのパフォーマンスをリアルタイムで監視し、最適化することができます。

Amazon DocumentDBは、大規模なアプリケーションや企業環境での使用に特に適しており、柔軟なスケーリング、高可用性、セキュリティ対策が重要な場合に特に有効です。


構成図

file


事前準備

実践する前に、以下の事前準備が必要です。

  • デフォルトVPCの上で EC2 インスタンスが起動し、セキュリティグループのインバウンドルールを22番ポートで、マイIPに設定してている準備をしてください。

    ※ 注意:Amazon Linux 2 AMIを使用することが必須です。

  • AmazonDocDBFullAccessのアクセス許可の設定している準備をしてください。

手順概要

  1. セキュリティグループ作成
    EC2 インスタンスからポート 27017 (Amazon DocumentDB のデフォルトポート) で Amazon DocumentDB クラスターに接続できるように、セキュリティグループを新規作成します。

DocDB セキュリティグループ:

セキュリティグループ プロトコル ポート 送信先
インバウンド TCP 27017 EC2セキュリティグループ
アウトバウンド すべて すべて 0.0.0.0/0

EC2 セキュリティグループ:

セキュリティグループ プロトコル ポート 送信先
インバウンド TCP 22 My IP
アウトバウンド すべて すべて 0.0.0.0/0
  1. Amazon DocumentDB クラスター作成
    Amazon DocumentDB コンソールに移動し、ナビゲーションペインから クラスター を選択します。
    インスタンスの数 については、1 を選択します。これにより、コストが最小限に抑えられます。その他の設定はデフォルト値のままにしておきます。
    認証には、サインイン認証情報を入力します。重要:ログイン認証情報は、後のステップでクラスターを認証する際に必要になります。
    ネットワーク設定 のセクションにおいて、前項作成した DocDB用セキュリティグループ を選択します。
    [Create cluster] (クラスターを作成) を選択します。



    file

  2. TeraTermを使用したインスタンスの接続
    EC2 インスタンスに接続する際には、SSH クライアントを使用します。TeraTermを起動します。

  3. mongo シェルをインストール
    Mongo シェルは、Amazon DocumentDB クラスターに接続してクエリするために使用するコマンドラインのユーティリティです。
    Amazon Linux で mongo シェルをインストールするには、リポジトリファイルを作成します。
    ・ EC2 インスタンスのコマンドラインで、次のコマンドを入力します。

    echo -e "[mongodb-org-5.0] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/5.0/x86_64/\ngpgcheck=1 \nenabled=1 \ngpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc" | sudo tee /etc/yum.repos.d/mongodb-org-5.0.repo

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

    sudo yum install -y mongodb-org-shell
{   ,     #_
   ~\_  ####_        Amazon Linux 2
  ~~  \_#####\
  ~~     \###|       AL2 End of Life is 2025-06-30.
  ~~       \#/ ___
   ~~       V~' '->
    ~~~         /    A newer version of Amazon Linux is available!
      ~~._.   _/
         _/ _/       Amazon Linux 2023, GA and supported until 2028-03-15.
       _/m/'           https://aws.amazon.com/linux/amazon-linux-2023/

[ec2-user@ip-100-00-46-90 ~]$
[ec2-user@ip-100-00-46-90 ~]$
[ec2-user@ip-100-00-46-90 ~]$
[ec2-user@ip-100-00-46-90 ~]$ echo -e "[mongodb-org-5.0] \nname=MongoDB Reposito                                                                                                                                                             ry\nbaseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/5.0/x86_64/\ngpgch                                                                                                                                                             eck=1 \nenabled=1 \ngpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc" |                                                                                                                                                              sudo tee /etc/yum.repos.d/mongodb-org-5.0.repo
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
[ec2-user@ip-100-00-46-90 ~]$
[ec2-user@ip-100-00-46-90 ~]$
[ec2-user@ip-100-00-46-90 ~]$
[ec2-user@ip-100-00-46-90 ~]$ sudo yum install -y mongodb-org-shell
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
mongodb-org-5.0                                          | 1.3 kB     00:00
mongodb-org-5.0/primary                                    |  47 kB   00:00
mongodb-org-5.0                                                         380/380
Resolving Dependencies
--> Running transaction check
---> Package mongodb-org-shell.x86_64 0:5.0.23-1.amzn2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package               Arch       Version             Repository           Size
================================================================================
Installing:
 mongodb-org-shell     x86_64     5.0.23-1.amzn2      mongodb-org-5.0      16 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 16 M
Installed size: 58 M
Downloading packages:
warning: /var/cache/yum/x86_64/2/mongodb-org-5.0/packages/mongodb-org-shell-5.0.                                                                                                                                                             23-1.amzn2.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID e2c63c11: NOKEY
Public key for mongodb-org-shell-5.0.23-1.amzn2.x86_64.rpm is not installed
mongodb-org-shell-5.0.23-1.amzn2.x86_64.rpm                |  16 MB   00:00
Retrieving key from https://www.mongodb.org/static/pgp/server-5.0.asc
Importing GPG key 0xE2C63C11:
 Userid     : "MongoDB 5.0 Release Signing Key <packaging@mongodb.com>"
 Fingerprint: f567 9a22 2c64 7c87 527c 2f8c b00a 0bd1 e2c6 3c11
 From       : https://www.mongodb.org/static/pgp/server-5.0.asc
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : mongodb-org-shell-5.0.23-1.amzn2.x86_64                      1/1
  Verifying  : mongodb-org-shell-5.0.23-1.amzn2.x86_64                      1/1

Installed:
  mongodb-org-shell.x86_64 0:5.0.23-1.amzn2

Complete!
[ec2-user@ip-100-00-46-90 ~]$
[ec2-user@ip-100-00-46-90 ~]$
  1. Amazon DocumentDB TLS の管理
    次のコード wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem を使用してAmazon DocumentDB の CA 証明書をダウンロードします。
[ec2-user@ip-100-00-46-90 ~]$
[ec2-user@ip-100-00-46-90 ~]$ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
--2023-12-16 10:11:54--  https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
Resolving truststore.pki.rds.amazonaws.com (truststore.pki.rds.amazonaws.com)... 18.172.170.98, 18.172.170.110, 18.172.170.123, ...
Connecting to truststore.pki.rds.amazonaws.com (truststore.pki.rds.amazonaws.com)|18.172.170.98|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 178780 (175K) [application/octet-stream]
Saving to: ‘global-bundle.pem’

100%[===================================================================================================================================================================================================>] 178,780      586KB/s   in 0.3s

2023-12-16 10:11:55 (586 KB/s) - ‘global-bundle.pem’ saved [178780/178780]
[ec2-user@ip-100-00-46-90 ~]$
[ec2-user@ip-100-00-46-90 ~]$
[ec2-user@ip-100-00-46-90 ~]$
  1. Amazon DocumentDB クラスターに接続する
    ・ コマンドラインで、次のコマンドを入力します。

    mongo --ssl --host kurodadb-ec2.cowupzjjocwm.ap-northeast-1.docdb.amazonaws.com:27017 --sslCAFile global-bundle.pem --username kurodaDB --password

    ・ 端末で Enter キーを押します。ここで、パスワードの入力を求められます。パスワードを入力します。

    [ec2-user@ip-100-00-46-90 ~]$ mongo --ssl --host kurodadb-ec2.cowupzjjocwm.ap-northeast-1.docdb.amazonaws.com:27017 --sslCAFile global-bundle.pem --username kurodaDB --password
    {"t":{"$date":"2023-12-16T10:12:08.099Z"},"s":"W",  "c":"CONTROL",  "id":23321,   "ctx":"-","msg":"Option: This name is deprecated. Please use the preferred name instead.","attr":{"deprecatedName":"ssl","preferredName":"tls"}}
    {"t":{"$date":"2023-12-16T10:12:08.100Z"},"s":"W",  "c":"CONTROL",  "id":23321,   "ctx":"-","msg":"Option: This name is deprecated. Please use the preferred name instead.","attr":{"deprecatedName":"sslCAFile","preferredName":"tlsCAFile"}}
    MongoDB shell version v5.0.23
    Enter password:
    connecting to: mongodb://kurodadb-ec2.cowupzjjocwm.ap-northeast-1.docdb.amazonaws.com:27017/?compressors=disabled&gssapiServiceName=mongodb
    {"t":{"$date":"2023-12-16T10:12:21.261Z"},"s":"I",  "c":"NETWORK",  "id":5490002, "ctx":"thread4","msg":"Started a new thread for the timer service"}
    Implicit session: session { "id" : UUID("161d1617-c36a-47fb-bd20-e8044a24fe21") }
    MongoDB server version: 5.0.0
    ================
    Warning: the "mongo" shell has been superseded by "mongosh",
    which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
    an upcoming release.
    For installation instructions, see
    https://docs.mongodb.com/mongodb-shell/install/
    ================
    Welcome to the MongoDB shell.
    For interactive help, type "help".
    For more comprehensive documentation, see
        https://docs.mongodb.com/
    Questions? Try the MongoDB Developer Community Forums
        https://community.mongodb.com
        Warning: Non-Genuine MongoDB Detected
        This server or service appears to be an emulation of MongoDB rather than an official MongoDB product.
    Some documented MongoDB features may work differently, be entirely missing or incomplete, or have unexpected performance characteristics.
    To learn more please visit: https://dochub.mongodb.org/core/non-genuine-mongodb-server-warning.
    rs0:PRIMARY>
    rs0:PRIMARY>

    ・ パスワードを入力し、rs0:PRIMARY> プロンプトが表示されたら、Amazon DocumentDB クラスターに正常に接続されています。

接続確認

データの挿入とクエリ
1 つのドキュメントを挿入するには、次のように入力します。

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

次の出力が返ります。

rs0:PRIMARY>
rs0:PRIMARY> db.collection.insert({"hello":"DocumentDB"})
WriteResult({ "nInserted" : 1 })
rs0:PRIMARY>
rs0:PRIMARY>

findOne() コマンドで書き込んだドキュメントを読み取ることができます (一つのドキュメントしか返さないため)。以下を入力します。

db.collection.findOne()

次の出力が返ります。

rs0:PRIMARY>
rs0:PRIMARY> db.collection.findOne()
{ "_id" : ObjectId("657d78a9f1ff1b70da4d664d"), "hello" : "DocumentDB" }
rs0:PRIMARY>
rs0:PRIMARY>

最後に

以上、mongo シェルを使い、Amazon EC2 を用いて Amazon DocumentDB (MongoDB 互換性で) クラスターを起動して操作する方法をご紹介しました。

では、皆さん、また次回お会いしましょう。

powershellを使ってIAMロールからスイッチロールする
「AWS Systems Manager ドキュメント」について調べてみる
【SSM Automation ハンズオン】承認者に確認後、EC2を起動する
more…

↑↑↑クラ本部メンバーが書いた記事のご紹介 ↑↑↑、合わせてやってみるのもいいかと

Last modified: 2023-12-17

Author