IBM Cloud Databases for MongoDB：PublicおよびPrivate Endpointへのアクセスについて


### はじめに

IBM Cloudで新しいDatabase Instanceをプロビジョニングすることは比較的に簡単です。

しかし、InstanceがPrivate Endpointで構成されている場合、特に初めてこのサービスを利用する方にとっては、アクセス方法がわかりにくいとの声をいただきました。

そのため、本記事ではPublic EndpointとPrivate Endpointそれぞれで、MongoDB Instanceにアクセスする方法について説明します。

### MongoDB DatabaseのPublic EndpointとPrivate Endpointについて

- プロビジョニング時にPublicかPrivateかを選択する必要があり、作成後に変更することはできません。


 IBM Cloud上にPostgreSQLなどのDatabaseを作成する際に、**Both public & private network**との選択肢があります。 

 ![Screenshot 2024-11-01 145155.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/1aef5d1b-96f0-00ab-7a35-29428b6491ab.png)

 一方、MongoDBがこの選択肢がないで、作成後に変更することもできません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/3cfe2d76-2574-54c6-4bc9-484a57d7c230.png)



- 既存のInstanceがPublic Endpointを使用しているか、Private Endpointを使用しているか、確認する方法

私の知る限りは、Cloud Portalで下記の方法のみです。
Instanceの**Overview** タブ　-->　**Endpoints** エリア　-->　**MongoDB** タブ：ここには**Public Connections** または **Private Connections** と表示されます。（もちろん、その画面の下部にある詳細情報の中にもPublicかPrivateか、見えます。）次の2つのスクリーンショットをご参考してください。

**Public Connections** の場合：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/f64699a3-a0ac-ec0b-f67c-b415ec5091e4.png)

また、**Private Connections** の場合：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/b6ad4b06-074c-e3e5-b97d-d905fad9ee6c.png)

**注**： 混乱しやすいかもしれませんが、**Private Connections**のInstanceでも、**Deployment Details** エリアにあるCRN情報には、**public**の文字が入っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/3ae9e5c3-e5e0-3051-78cf-b6e2592fd4e1.png)


### Public Endpointを使用するMongoDB Instanceにアクセス

こんな流れになります：
1. 初期パスワードを生成
2. ローカルPCにMongoDBシェルをインストール
3. IBMCloud CLIよりDatabaseをアクセス

#### Step 1: 初期パスワードを生成する

MongoDB Instanceの**Settings**画面で、Databaseの初期Admin Passwordを設定できます。
15文字以上で、少なくとも1つの数字と1つの文字を含む必要があります。Passwordを入力してから、**Change Password** ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/2a0a365e-43d6-fe3e-251b-f7821fd7481b.png)

#### Step 2：ローカルPCにMongoDBシェルをインストール

IBMCloud CLIは実際には裏でMongoDB シェルを使用しているため、ローカルPCにmongoshをインストールし、env $PATHを設定することが必要です。

MongoDB ShellのDownload Siteがこちら：
https://www.mongodb.com/try/download/shell

MongoDB ShellのVersion、及び、Local PCのOS、Download Packageのタイプを選択します。私のPCがWindowsなので、msi Packageが楽です。**Download**ボタンを押して、PCにインストールする際に特に注意点なしで全部Nextで完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/d511d4c5-9939-041b-5ee8-d8636fa73c50.png)

Windowsの環境変数 $PATH の設定も必要ですが、手順の説明は割愛します。

WindowsのPowerShellかCMDで、mongoshのバージョンが表示されるか、ご確認ください。

```ctr:
C:\Windows\System32>mongosh --version
2.3.2
```


#### Step 3：IBMCloud CLIよりDatabaseをアクセス

ここは、IBMcloud LoginやPlugin installなどの基本的なステップの紹介をスキップします。

InstanceのInstanceの**Overview** タブ　-->　**Endpoints** エリア　--> **Quick start** タブには、
接続するコマンドが表示されていて、特に編集なしで利用できます。**Database Password>>** のPromptにStep 1で設定されたパスワードを入力して、Databaseに接続できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/0da04f87-dd80-1d50-d394-9db396540fdf.png)

```ctr:
C:\Windows\System32>ibmcloud cdb cxn -s crn:v1:bluemix:public:databases-for-mongodb:jp-tok:a/27dc483xxxxxxxxxxxc0-9c9c-5ced312a6ce4::
Database Password>>
Current Mongosh Log ID: 6724xxxxxxxxxb01c
Connecting to:          mongodb://<credentials>@xxxxxxxxxxauthSource=admin&appName=mongosh+2.3.2
Using MongoDB:          6.0.12
Using Mongosh:          2.3.2

For mongosh info see: https://www.mongodb.com/docs/mongodb-shell/

replset [primary] test>

replset [primary] test>

replset [secondary] test> exit

C:\Windows\System32>
```



もしStep 2でMongo Shellのインストール、または、＄PATHの設定にうまくできてない場合、このステップで"**could not find mongosh on path: exec: "mongosh": executable file not found in $PATH**"とのエラーが出るはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/d8221329-f3c1-8bc9-ec0e-125c4dd748e5.png)

Public Endpointを使用するMongoDB Instanceにアクセスする手順が以上です。

### Private Endpointを使用するMongoDB Instanceにアクセス

Private Endpointの場合、VPNの接続が前提となります。また、Portalに提示されたibmcloud CLIを使用できず、直接mongoshを実行する必要があります。全体の流れは以下の通りです：

1. VPNを接続
1. 初期パスワードを生成
1. ローカルPCにMongoDBシェルをインストール
1. Mongo ShellよりDatabaseをアクセス


#### Step 1: VPNを接続する
私のIBM Cloud環境はClient VPN for VPCが使用されています。Local PCでは、OpenVPN ConnectとのClientを使って、IBM CloudのPrivate Networkに接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/b19007c6-ffa0-cf3d-92cb-0cbe7de038f5.png)


#### Step 2: 初期パスワードを生成する
手順はPublic Endpointの場合と同じです。

#### Step 3：ローカルPCにMongoDBシェルをインストール
手順はPublic Endpointの場合と同じです。

#### Step 4：Mongo ShellよりDatabaseをアクセスする

こちらのリンク先には、Mongo Shellのコマンド例と説明が記載されています：https://cloud.ibm.com/docs/databases-for-mongodb?topic=databases-for-mongodb-connecting-cli-client#connecting-cli-client-mongo-example

```ctr:
mongosh -u admin -p $PASSWORD --ssl --sslCAFile c5f07836-d94c-11e8-a2e9-62ec2ed68f84 --authenticationDatabase admin --host replset/bd574ce4-7b36-4274-9976-96db98a3ac10-0.b8a5e798d2d04f2e860e54e5d042c915.databases.appdomain.cloud:30484,bd574ce4-7b36-4274-9976-96db98a3ac10-1.b8a5e798d2d04f2e860e54e5d042c915.databases.appdomain.cloud:30484
```

必要なパラメータは：
    - **-u**: DatabaseのUsernameです。 **admin**を使ってください。
    - **-p**: DatabaseのPasswordです。 前述のステップ設定されたものです。
    - **--ssl --sslCAFile**: SSL証明書のFilenameです。 証明書は、MongoDB Instanceの**Overview** タブ　-->　**Endpoints** エリア　--> **MongoDB** タブ　--> 一番下にある**Certificate Authority** エリアでDownloadできます。
    - **--authenticationDatabase**: Authentication Databaseの名前です。 **admin**を使ってください
    - **--host**: Databaseのreplica set membersのhostnameとPort Noの情報です。**MongoDB** タブで確認できます。**Endpoint**の値を参照してもよいです。また、必ず **replica/xxx**のように入力する必要があります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/87afe3d7-bb1f-1540-ce99-ee65a4c432ef.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/455eb23a-d693-993d-ebd6-7c92f49eee4f.png)

```ctr:
C:\Windows\System32>mongosh -u admin -p Testaccessxxxxxxxxxx --ssl --sslCAFile 20accxxxxxxxxb02 --authenticationDatabase admin --host replset/7f7cf4ea-fe45-xxxxxxxx0.private.databases.appdomain.cloud:30588,7f7cf4ea-fe45-xxxxxxxx0.private.databases.appdomain.cloud:30588,7f7cf4ea-fe45-xxxxxxxx0.private.databases.appdomain.cloud:30588
WARNING: argument --ssl is deprecated and will be removed. Use --tls instead.
WARNING: argument --sslCAFile is deprecated and will be removed. Use --tlsCAFile instead.
Current Mongosh Log ID: 6724d323d5e1459ea586b01c
Connecting to:          mongodb://<credentials>@7f7cf4ea-fe45-xxxxxxxxx0.private.databases.appdomain.cloud:30588,7f7cf4ea-fe45-xxxxxxxxx0.private.databases.appdomain.cloud:30588,7f7cf4ea-fe45-xxxxxxxxx0.private.databases.appdomain.cloud:30588/?replicaSet=replset&authSource=admin&tls=true&tlsCAFile=20accfbb-5bcd-4edc-aacf-ca14822b8b02&appName=mongosh+2.3.2
Using MongoDB:          6.0.12
Using Mongosh:          2.3.2
mongosh 2.3.3 is available for download: https://www.mongodb.com/try/download/shell

For mongosh info see: https://www.mongodb.com/docs/mongodb-shell/

replset [primary] test>

replset [primary] test>

replset [primary] test> exit

C:\Windows\System32>

```

手順が以上です。
お役に立てれば幸いです。