Private Service Connect でマルチリージョン MongoDB Atlas にアクセスする

1. はじめに

Private Service Connect(PSC)を使用すると、サービスを非公開で安全かつ簡単に利用できるようになります。このモデルでは、サービスの消費者が組織間でサービス プロデューサーに非公開で接続できるようになるため、ネットワークのアーキテクチャが大幅に簡素化され、Virtual Private Cloud ピアリングが不要になります。図 1 は、VPC ピアリングと PSC 属性を示しています。

図 1. 4f9551fc32ed83f5.png

サービス ユーザーは、プライベート IP をサービスに割り当てる方法を柔軟に選択できると同時に、プロデューサー VPC のサブネット範囲を管理する負担を軽減できます。サービス接続を使用すると、VPC から選択した仮想 IP をこのようなサービスに簡単に割り当てることができます。

この Codelab では、MongoDB Atlas での PSC グローバル アクセスの使用を示す包括的な Private Service Connect アーキテクチャを構築します。

グローバル アクセスを使用すると、クライアントはリージョン境界を越えて Private Service Connect(PSC)に接続できます。これは、複数のリージョンにホストされているマネージド サービスに高可用性を作成する場合や、クライアントと同じリージョンにないサービスへのアクセスをクライアントに許可する場合に便利です。

2. グローバル アクセスを有効にする

グローバル アクセスは、コンシューマー側の転送ルールで構成されるオプション機能です。次のコマンドは、構成方法を示しています。

gcloud beta compute forwarding-rules create psc-west \
    --region=us-west1 \
    --network=consumer-vpc \
    --address=psc-west-address \
    --target-service-attachment=projects/.../serviceAttachments/sa-west \
    --allow-psc-global-access
  • --allow-psc-global-access フラグは、Private Service Connect エンドポイントでグローバル アクセスを有効にします。
  • グローバル アクセスにより、クライアントは Private Service Connect 転送ルールとは異なるリージョンに存在できますが、転送ルールは接続先のサービス アタッチメントと同じリージョンに存在する必要があります。
  • グローバル アクセスを有効にするために、プロデューサーのサービス アタッチメントで構成を行う必要はありません。これは純粋にコンシューマー側のオプションです。

既存のエンドポイントのグローバル アクセスも、いつでもオンまたはオフに切り替えることができます。既存のエンドポイントでグローバル アクセスを有効にしても、アクティブな接続でトラフィックが中断することはありません。次のコマンドを使用して、既存の転送ルールでグローバル アクセスを有効にします。

gcloud beta compute forwarding-rules update psc-west --allow-psc-global-access

グローバル アクセスの無効化

--no-allow-psc-global-access フラグを使用して、既存の転送ルールでグローバル アクセスを無効にすることもできます。このコマンドを実行すると、アクティブなリージョン間トラフィックはすべて終了します。

gcloud beta compute forwarding-rules update psc-west --no-allow-psc-global-access

3. 作成するアプリの概要

  1. マルチリージョン MongoDB Atlas クラスタ(トポロジは図 2 を参照)が作成されます。このクラスタには、us-west1 リージョンに 1 つのノード、us-west2 リージョンに 2 つのノードがそれぞれ配置されます。
  2. us-west1 と us-west2 の MongoDB クラスタにアクセスするコンシューマー VPC と関連付けられた VM。
  3. us-west1 リージョンと us-west2 リージョンにそれぞれ 1 つの VPC と 2 つのサブネット。各サブネットに少なくとも 64 個の空き IP アドレスがある(/26 以下のサブネットを作成する)。

MongoDB クライアントは、コンシューマー VPC の vm1 にインストールされます。us-west1 でプライマリ ノードに障害が発生すると、クライアントは us-west2 の新しいプライマリ ノードを介して読み取り/書き込みを行うことができます。

図 2. ab6c2791514c4481.png

学習内容

  • 2 つのリージョンにデプロイされた VPC とサブネットを作成する方法
  • マルチリージョン MongoDB Atlas クラスタをデプロイする方法
  • プライベート エンドポイントの作成方法
  • MongoDB に接続する方法
  • マルチリージョン MongoDB フェイルオーバーを実行して検証する方法

必要なもの

  • Google Cloud プロジェクト
  • リージョンごとに /26 サブネットを提供する
  • クラスタ階層 M10 以上の MongoDB クラスタを作成するための MongoDB Atlas へのプロジェクト オーナーまたは組織オーナーのアクセス権。(PoV の実行に無料クレジットを使用するには、GETATLAS を使用してください)。

4. 始める前に

Codelab をサポートするようにプロジェクトを更新する

この Codelab では、$変数を使用して、Cloud Shell での gcloud 構成の実装を支援します。

Cloud Shell で、次の操作を行います。

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

5. コンシューマーの設定

コンシューマー VPC を作成する

Cloud Shell で、次の操作を行います。

gcloud compute networks create consumer-vpc --project=$projectname --subnet-mode=custom

コンシューマー サブネットを作成する

Cloud Shell で、次の操作を行います。

gcloud compute networks subnets create vm-subnet --project=$projectname --range=10.10.10.0/29 --network=consumer-vpc --region=us-west1

Cloud Shell 内で、us-west1 のコンシューマー エンドポイントを作成します。

gcloud compute networks subnets create psc-endpoint-us-west1 --project=$projectname --range=192.168.10.0/26 --network=consumer-vpc --region=us-west1

Cloud Shell で、us-west2 のコンシューマー エンドポイントを作成します。

gcloud compute networks subnets create psc-endpoint-us-west2 --project=$projectname --range=172.16.10.0/26 --network=consumer-vpc --region=us-west2

Cloud Router と NAT 構成

この VM インスタンスには外部 IP アドレスがないため、この Codelab ではソフトウェア パッケージのインストールに Cloud NAT を使用します。

Cloud Shell 内で、Cloud Router を作成します。

gcloud compute routers create consumer-cr --network consumer-vpc --region us-west1

Cloud Shell 内で、NAT ゲートウェイを作成します。

gcloud compute routers nats create consumer-nat --router=consumer-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-west1

インスタンス vm1 の構成

次のセクションでは、Compute Engine インスタンス vm1 を作成します。

Cloud Shell 内で、インスタンス vm1 を作成します。

gcloud compute instances create vm1 \
    --project=$projectname \
    --zone=us-west1-a \
    --machine-type=e2-micro \
    --network-interface=subnet=vm-subnet,no-address \
    --maintenance-policy=MIGRATE \
    --provisioning-model=STANDARD \
--create-disk=auto-delete=yes,boot=yes,device-name=vm1,image=projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20230213,mode=rw,size=10,type=projects/$projectname/zones/us-west1-a/diskTypes/pd-balanced
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump -y
      sudo apt-get install dnsutils -y"

IAP に VM インスタンスへの接続を許可するには、次のファイアウォール ルールを作成します。

  • IAP を使用してアクセス可能にするすべての VM インスタンスに適用されます。
  • IP 範囲 35.235.240.0/20 からの上り(内向き)トラフィックを許可します。この範囲には、IAP が TCP 転送に使用するすべての IP アドレスが含まれています。

Cloud Shell 内で、IAP ファイアウォール ルールを作成します。

gcloud compute firewall-rules create ssh-iap-consumer-vpc \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

6. マルチリージョン MongoDB Atlas クラスタを作成する

  • PSC の設定を開始する前に、Atlas クラスタを設定する必要があります。MongoDB Atlas には、次の 2 つの方法のいずれかで登録できます。
  • Google Cloud アカウントをお持ちの場合は、Google Cloud Marketplace から。サブスクリプションを設定するには、ドキュメントを参照してください。
  • Atlas 登録ページ
  • Atlas に登録したら、下図のように [Build a Database] ボタンをクリックします。

796f5bda844bf400.png

  • [Create new cluster](新しいクラスタを作成)→ [Dedicated](専用)

56c340661d86962c.png

  • クラウド プロバイダとリージョン → Google Cloud
  • マルチクラウド、マルチリージョン、ワークロードの分離 → 選択済み(青いチェックマーク)

6c10293ffd9814ae.png

  • 選択可能なノード → us-west1(1 ノード)、us-west2(2 ノード)

e652bd944d785871.png

  • クラスタ階層 → M10、その他の設定はすべてデフォルトのままにします。

ffa0195b96c2c5ff.png

  • クラスタ名 → psc-mongodb-uswest1-uswest2

3720fb8c15ba5cc2.png

  • [選択] → [クラスタを作成] を選択します。

ec5e3e6983c02e27.png

  • データベースの作成には 7 ~ 10 分かかります

d75778d5abf484aa.png

デプロイ後のクラスタのビュー

1f0ec6a401578650.png

7. us-west1 のプライベート エンドポイントの作成

  • Atlas アカウントにログインして、プロジェクトに移動します。

新規ユーザーを作成して、任意のデータベースに対する読み取り/書き込みアクセスを許可する

[Security] → [Database Access] で [add new database user] を選択します。次の例では、ユーザー名とパスワードが codelab として構成されています。組み込みのロールの読み取りと書き込みを任意のデータベースに選択してください。

f622ab14ddc96fc7.png

  • [Security] → [Network Access] で、[IP Access List] にエントリは不要です。

MongoDB Atlas でプライベート エンドポイントを準備する

  • [ネットワーク アクセス] → [プライベート エンドポイント] → [専用クラスタ] → [プライベート エンドポイントを追加] を選択します。88f5c1d9ae7e46d9.png

クラウド プロバイダ

  • [Google Cloud] を選択し、[次へ] をクリックします。

5503248bf4019a35.png

サービス アタッチメント

  • リージョン(us-west1)を選択して [次へ] をクリックします。

cb31aea7cad182f9.png

Endpoints

  • Private Service Connect エンドポイントを作成するには、次の情報を指定します。
  • Google Cloud プロジェクト ID: 詳細については、「手順を表示」を選択してください
  • VPC 名: consumer-vpc
  • サブネット名: psc-endpoint-us-west1
  • プライベート サービス接続エンドポイントの接頭辞: psc-endpoint-us-west1

21d76af5367832f4.png

エンドポイントを設定する

次のセクションでは、setup_psc.sh という名前でローカルに保存する必要があるシェル スクリプトが生成されます。保存したら、psc グローバル アクセスを許可するようにシェル スクリプトを編集します。この操作は、Google Cloud プロジェクトの Cloud Shell 内で実行できます。

  • シェル スクリプトの例(出力の値は異なります)

5c80cf7315a05c25.png

  • MongoBD コンソールからシェル スクリプトをコピーし、Google Cloud Cloud Shell ターミナルにコンテンツを保存します。スクリプトを setup_psc.sh として保存してください。

更新前の例:

#!/bin/bash
gcloud config set project yourprojectname

for i in {0..49}
do
  gcloud compute addresses create psc-endpoint-us-west1-ip-$i --region=us-west1 --subnet=psc-endpoint-us-west1
done

for i in {0..49}
do
  if [ $(gcloud compute addresses describe psc-endpoint-us-west1-ip-$i --region=us-west1 --format="value(status)") != "RESERVED" ]; then
    echo "psc-endpoint-us-west1-ip-$i is not RESERVED";
    exit 1;
  fi
done

for i in {0..49}
do
  gcloud compute forwarding-rules create psc-endpoint-us-west1-$i --region=us-west1 --network=consumer-vpc --address=psc-endpoint-us-west1-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west1/serviceAttachments/sa-us-west1-61485ec2ae9d2e48568bf84f-$i
done

if [ $(gcloud compute forwarding-rules list --regions=us-west1 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west1*)" | wc -l) -gt 50 ]; then
  echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west1. Either delete the competing resources or choose another endpoint prefix."
  exit 2;
fi

gcloud compute forwarding-rules list --regions=us-west1 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west1*)" > atlasEndpoints-psc-endpoint-us-west1.json

グローバル アクセスをサポートするようにシェル スクリプトを更新する

nano または vi エディタを使用して、次の構文でシェル スクリプトを特定して更新します。

gcloud beta compute forwarding-rules create psc-endpoint-us-west1-$i --region=us-west1 --network=consumer-vpc --address=psc-endpoint-us-west1-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west1/serviceAttachments/sa-us-west1-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access

更新後の例:

#!/bin/bash
gcloud config set project yourprojectname

for i in {0..49}
do
  gcloud compute addresses create psc-endpoint-us-west1-ip-$i --region=us-west1 --subnet=psc-endpoint-us-west1
done

for i in {0..49}
do
  if [ $(gcloud compute addresses describe psc-endpoint-us-west1-ip-$i --region=us-west1 --format="value(status)") != "RESERVED" ]; then
    echo "psc-endpoint-us-west1-ip-$i is not RESERVED";
    exit 1;
  fi
done

for i in {0..49}
do
  gcloud beta compute forwarding-rules create psc-endpoint-us-west1-$i --region=us-west1 --network=consumer-vpc --address=psc-endpoint-us-west1-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west1/serviceAttachments/sa-us-west1-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access
done

if [ $(gcloud compute forwarding-rules list --regions=us-west1 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west1*)" | wc -l) -gt 50 ]; then
  echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west1. Either delete the competing resources or choose another endpoint prefix."
  exit 2;
fi

gcloud compute forwarding-rules list --regions=us-west1 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west1*)" > atlasEndpoints-psc-endpoint-us-west1.json

シェル スクリプトを実行する

スクリプト setup_psc.sh に移動して実行します。完了すると、atlasEndpoints-psc-endpoint-us-west1.json というファイルが作成されます。この JSON ファイルには、次のデプロイ手順に必要な IP アドレスと Private Service Connect エンドポイント名のリストが含まれています。

Cloud Shell で次の操作を行います。

sh setup_psc.sh

スクリプトが完了したら、Cloud Shell エディタを使用して atlasEndpoints-psc-endpoint-us-west1.json をローカルにダウンロードします。

2856802dd6497f51.png b0059dc8e1558891.png

JSON ファイルをアップロードする

以前に保存した json ファイル atlasEndpoints-psc-endpoint-us-west1.json をアップロードします。

3a74e8d9952d793a.png

4938fd8256eb81b4.png

[作成] を選択

Private Service Connect エンドポイントを検証する

MongoDB UI で、プロジェクトに移動し、[Security] → [Network access] → [Private endpoint] の順に移動します。タブ、専用クラスタを選択すると、エンドポイントが使用可能になるまでに 10 分かかります。

利用可能なステータス

972aff09d180d9de.png

Google Cloud コンソールで、[ネットワーク サービス] → [Private Services Connect] に移動し、[接続エンドポイント] タブを選択します。コンシューマー エンドポイントが [保留中] → [承認済み] に移行していることを確認します。次の例をご覧ください。

5472dd938604b3.png

8. us-west2 のプライベート エンドポイントの作成

  • Atlas アカウントにログインして、プロジェクトに移動します。

MongoDB Atlas でプライベート エンドポイントを準備する

  • [ネットワーク アクセス] → [プライベート エンドポイント] → [専用クラスタ] → [プライベート エンドポイントを追加] を選択します。88f5c1d9ae7e46d9.png

クラウド プロバイダ

  • [Google Cloud] を選択し、[次へ] をクリックします。

5503248bf4019a35.png

サービス アタッチメント

  • リージョン(us-west2)を選択して [次へ] をクリックします。

fc0b7a8e4274be3b.png

Endpoints

  • Private Service Connect エンドポイントを作成するには、次の情報を指定します。
  • Google Cloud プロジェクト ID: 詳細については、「手順を表示」を選択してください
  • VPC 名: consumer-vpc
  • サブネット名: psc-endpoint-us-west2
  • Private Service Connect エンドポイントの接頭辞: psc-endpoint-us-west2

17b5a056587ede8a.png

エンドポイントを設定する

次のセクションでは、setup_psc.sh という名前でローカルに保存する必要があるシェル スクリプトが生成されます。保存したら、psc グローバル アクセスを許可するようにシェル スクリプトを編集します。この操作は、Google Cloud プロジェクトの Cloud Shell 内で実行できます。

  • シェル スクリプトの例(出力の値は異なります)

b021821e7d59f450.png

  • MongoBD コンソールからシェル スクリプトをコピーし、Google Cloud Cloud Shell ターミナルにコンテンツを保存します。スクリプトを setup_psc.sh として保存してください。

アップデート前の例:

#!/bin/bash
gcloud config set project yourprojectname

for i in {0..49}
do
  gcloud compute addresses create psc-endpoint-us-west2-ip-$i --region=us-west2 --subnet=psc-endpoint-us-west2
done

for i in {0..49}
do
  if [ $(gcloud compute addresses describe psc-endpoint-us-west2-ip-$i --region=us-west2 --format="value(status)") != "RESERVED" ]; then
    echo "psc-endpoint-us-west2-ip-$i is not RESERVED";
    exit 1;
  fi
done

for i in {0..49}
do
  gcloud compute forwarding-rules create psc-endpoint-us-west2-$i --region=us-west2 --network=consumer-vpc --address=psc-endpoint-us-west2-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west2/serviceAttachments/sa-us-west2-61485ec2ae9d2e48568bf84f-$i
done

if [ $(gcloud compute forwarding-rules list --regions=us-west2 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west2*)" | wc -l) -gt 50 ]; then
  echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west2. Either delete the competing resources or choose another endpoint prefix."
  exit 2;
fi

gcloud compute forwarding-rules list --regions=us-west2 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west2*)" > atlasEndpoints-psc-endpoint-us-west2.json

グローバル アクセスをサポートするようにシェル スクリプトを更新する

nano または vi エディタを使用して、次の構文でシェル スクリプトを特定して更新します。

gcloud beta compute forwarding-rules create psc-endpoint-us-west2-$i --region=us-west2 --network=consumer-vpc --address=psc-endpoint-us-west2-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2v
n1q0q/regions/us-west2/serviceAttachments/sa-us-west2-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access
done

更新後の例:

#!/bin/bash
gcloud config set project yourprojectname

for i in {0..49}
do
  gcloud compute addresses create psc-endpoint-us-west2-ip-$i --region=us-west2 --subnet=psc-endpoint-us-west2
done

for i in {0..49}
do
  if [ $(gcloud compute addresses describe psc-endpoint-us-west2-ip-$i --region=us-west2 --format="value(status)") != "RESERVED" ]; then
    echo "psc-endpoint-us-west2-ip-$i is not RESERVED";
    exit 1;
  fi
done

for i in {0..49}
do
  gcloud beta compute forwarding-rules create psc-endpoint-us-west2-$i --region=us-west2 --network=consumer-vpc --address=psc-endpoint-us-west2-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2v
n1q0q/regions/us-west2/serviceAttachments/sa-us-west2-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access
done

if [ $(gcloud compute forwarding-rules list --regions=us-west2 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west2*)" | wc -l) -gt 50 ]; then
  echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west2. Either delete the competing resources or choose another endpoint prefix."
  exit 2;
fi

gcloud compute forwarding-rules list --regions=us-west2 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west2*)" > atlasEndpoints-psc-endpoint-us-west2.json

シェル スクリプトを実行する

setup_psc.sh スクリプトに移動して実行します。完了すると、atlasEndpoints-psc-endpoint-us-west2.json というファイルが作成されます。この JSON ファイルには、次のデプロイ手順に必要な IP アドレスと Private Service Connect エンドポイント名のリストが含まれています。

Cloud Shell で次の操作を行います。

sh setup_psc.sh

スクリプトが完了したら、Cloud Shell エディタを使用して atlasEndpoints-psc-endpoint-us-west2.json をローカルにダウンロードします。

2856802dd6497f51.png 6e3d944944718f13.png

JSON ファイルをアップロードする

以前に保存した JSON ファイル atlasEndpoints-psc-endpoint-us-west2.json をアップロードします。

3a74e8d9952d793a.png

4938fd8256eb81b4.png

[作成] を選択

Private Service Connect エンドポイントを検証する

MongoDB UI で、プロジェクトに移動し、[Security] → [Network access] → [Private endpoint] の順に移動します。タブと専用クラスタを選択すると、エンドポイントが 10 分後に使用可能になります。

利用可能なステータス:

8801df4f6b39d20a.png

Google Cloud コンソールで、[ネットワーク サービス] → [Private Services Connect] に移動し、[接続エンドポイント] タブを選択します。コンシューマー エンドポイントが [保留中] → [承認済み] に移行していることが表示されます(次の例を参照)。コンシューマ エンドポイントに合計 100 個のエンドポイントがデプロイされており、次のステップに進む前に承認済みに移行する必要があります。

6131abcdef5c1f49.png

9. プライベート エンドポイントから MongoDB Atlas に接続する

Private Service Connections が承認されると、MongoDB クラスタの更新にさらに時間(10 ~ 15 分)が必要になります。MongoDB UI では、グレーのアウトラインはクラスタの更新を表しているため、プライベート エンドポイントへの接続は使用できません。

c1524d2c0c5765d1.png

デプロイを特定して [接続] を選択します(灰色のボックスは表示されなくなりました)。

3eea96af20bfad20.png

[接続タイプ] → [プライベート エンドポイント] を選択し、[接続方法を選択] を選択します。

16a9090e495640c7.png

[Connect with the MongoDB Shell] を選択します。

35e422af16cb5ce0.png

[I do not have the MongoDB Shell installed, Ubuntu 20.4] を選択し、手順 1 と手順 3 の内容をメモ帳にコピーします。

51be47403c00bab4.png

10. mongosh アプリケーションをインストールする

インストールを行う前に、手順 1 と 3 で取得した値を基にコマンド文字列を作成する必要があります。その後、Cloud Shell を使用して vm1 に SSH 接続し、mongosh アプリケーションをインストールしてプライマリ(us-west1)データベースに対して検証します。consumer-vpc で vm1 を作成したときに、Ubuntu 20.4 イメージがインストールされました。

接続方法を選択する: ステップ 1、ダウンロード URL をコピーする

5da980ff86265dd8.png

コマンド文字列の例。カスタム値に置き換えます。

https://downloads.mongodb.com/compass/mongodb-mongosh_1.7.1_amd64.deb

接続方法を選択する(ステップ 3)。

698286bdf3dee3c7.png

コマンド文字列の例。カスタム値に置き換えます。

mongosh "mongodb+srv://psc-mongodb-uswest1-uswest2-pl-0.2wqno.mongodb.net/psc-mongodb-uswest1-uswest2" --apiVersion 1 --username codelab

vm1 にログインする

Cloud Shell で、次の操作を行います。

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

Cloud Shell で IAP を使用して vm1 にログインします。タイムアウトした場合は再試行します。

gcloud compute ssh vm1 --project=$projectname --zone=us-west1-a --tunnel-through-iap

OS からインストールを実行する

Cloud Shell OS ログインからインストールを実行します。詳細については、こちらをご覧ください。以下の構文をカスタム文字列で更新します。

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

オペレーションは

OK

.

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

sudo apt-get update -y

wget https://downloads.mongodb.com/compass/mongodb-mongosh_1.7.1_amd64.deb

sudo dpkg -i mongodb-mongosh_1.7.1_amd64.deb

MongoDB デプロイに接続する

Cloud Shell os ログイン内で、次の操作を行います。構成されたユーザー名とパスワードは codelab です。

mongosh

mongosh "mongodb+srv://psc-mongodb-uswest1-uswest2-pl-0.2wqno.mongodb.net/psc-mongodb-uswest1-uswest2" --apiVersion 1 --username codelab

たとえば次のようになります。

d5d0324a273b4d5e.png

データベースに対してコマンドを実行する

Cloud Shell os ログイン内で、次の操作を行います。

show dbs
use Company
db.Employee.insertOne({"Name":"cosmo","dept":"devops"})
db.Employee.findOne({"Name":"cosmo"})

11. アクティブな MongoDB リージョン us-west1 をフェイルオーバーする

フェイルオーバーを実行する前に、us-west1 がプライマリで、us-west2 に 2 つのセカンダリ ノードがあることを確認します。

[データベース] → [psc-mongodb-uswest1-uswest2] → [概要] に移動します。

64ca0395807bb3ac.png

次のセクションでは、us-west1 にある vm1 にログインし、プライマリ MongoDB クラスタ リージョン us-west1 をフェイルオーバーして、us-west2 の MongoDB クラスタからデータベースにアクセスできることを確認します。

Atlas UI からプライマリ フェイルオーバーとリージョン フェイルオーバーの両方をテストできます。

  • Atlas UI にログインします。
  • クラスタ名(psc-mongodb-uswest1-uswest2)の横にある [...] → [Test Outage] をクリックします。

3a50da4381817975.png

  • [Regional Outage](地域別停止)を選択 → 地域を選択します。

b8dfff376477bcbb.png

  • プライマリ リージョン us-west1 を選択し、[リージョン停止をシミュレート] をクリックします。

76494a750a040bc5.png

クラスタを選択すると、3 ~ 4 分後に停止シミュレーションが表示されます。

ウィンドウを閉じる

3a9f0359bd4e288f.png

bac1b2db0d754bbf.png

us-west1 がダウンし、us-west2 がプライマリとして引き継がれたことを確認する

[データベース] → [psc-mongodb-uswest1-uswest2] → [概要] に移動します。

86fd7d5230715645.png

新しいプライマリ(us-west2)でクラスタへの接続を検証する

us-west1 にある vm1 にログインし、us-west2 の mongodb にアクセスして、Private Service Connect のグローバル アクセスを検証します。

Cloud Shell セッションが終了した場合は、次の操作を行います。

Cloud Shell で、次の操作を行います。

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

Cloud Shell で IAP を使用して vm1 にログインします。タイムアウトした場合は再試行します。

gcloud compute ssh vm1 --project=$projectname --zone=us-west1-a --tunnel-through-iap

MongoDB デプロイに接続する

Cloud Shell os ログイン内で、次の操作を行います。

mongosh

mongosh "mongodb+srv://psc-mongodb-uswest1-uswest2-pl-0.2wqno.mongodb.net/psc-mongodb-uswest1-uswest2" --apiVersion 1 --username codelab

たとえば次のようになります。

d262800a557b41a3.png

データベースに対してコマンドを実行する

Cloud Shell os ログイン内で、次の操作を行います。

show dbs
use Company
db.Employee.insertOne({"Name":"cosmo","dept":"devops"})
db.Employee.findOne()

exit

20c2571d84c0661d.png

成功: PSC グローバル アクセスにより、リージョン間でコンシューマー エンドポイントをシームレスに接続できることを確認しました。これにより、高可用性を実現したり、リージョンの停止に対応したりできます。この Codelab では、us-west1 にあるプライマリ ノードで MongoDB リージョン フェイルオーバーが発生したため、セカンダリ リージョン us-west2 がプライマリを引き継ぎました。クラスタでリージョン停止が発生しましたが、us-west1 にあるコンシューマー vm1 は us-west2 の新しいプライマリ クラスタに正常に到達しました。

12. クリーンアップ

Cloud コンソールからコンシューマー エンドポイントを削除する

[ネットワーク サービス] → [Private Service Connect] → [接続済みエンドポイント] に移動します。

フィルタ psc-endpoint を使用して、ラボ以外のコンシューマー エンドポイントが誤って削除される可能性を排除します。すべてのエンドポイントを選択 → [削除]

192548e374b444a1.png

コンシューマー エンドポイントに関連付けられている静的内部 IP アドレスを削除する

[VPC ネットワーク] → [consumer-vpc] → [静的内部 IP アドレス] に移動します。

フィルタ psc-endpoint を使用して、ラボ以外のコンシューマー エンドポイントが誤って削除される可能性を排除し、1 ページあたりの行数を 100 に増やします。すべてのエンドポイントを選択 → リリース

4cebf164c4fecd83.png

Cloud Shell から、codelab コンポーネントを削除します。

gcloud compute instances delete vm1 --zone=us-west1-a --quiet 

gcloud compute networks subnets delete psc-endpoint-us-west1 vm-subnet --region=us-west1 --quiet

gcloud compute networks subnets delete psc-endpoint-us-west2 --region=us-west2 --quiet

gcloud compute firewall-rules delete ssh-iap-consumer --quiet 

gcloud compute routers delete consumer-cr --region=us-west1 --quiet 

gcloud compute networks delete consumer-vpc --quiet

Atlas UI でクラスタ psc-mongodb-uswest1-uswest2 を特定 → シミュレーションを終了

f82e28ac984d9e20.png

[End outage simulation](停止シミュレーションを終了)—> [Exit](終了)を選択します。

38feaf055abdceea.png

クラスタは現在 us-west1 をプライマリとして復元しています。このプロセスには 3 ~ 4 分かかります。完了したら、クラスタを終了します。ステータスの変更を示す灰色の枠線が表示されます。

f249a61bcc966d41.png

9427a9349daa1fea.png

クラスタ名を挿入 → 終了

9ef6d3a6387c5b4b.png

us-west1 と us-west2 に関連付けられているプライベート エンドポイントを削除する

Atlas UI で、[Security] → [Network Access] → [Private Endpoint] に移動し、[Terminate] を選択します。

56415ea954b2fec9.png

13. 完了

お疲れさまでした。リージョン間の MongoDB へのグローバル アクセスで Private Service Connect エンドポイントを構成して検証しました。コンシューマー VPC、マルチリージョン MongoDB、コンシューマー エンドポイントが正常に作成されました。us-west1 にある VM は、リージョン フェイルオーバー時に us-west1 と us-west2 の両方の MongoDB に正常に接続しました。

Cosmopup はコードラボが大好きです。

8c2a10eb841f7b01.jpeg

次のステップ

以下の Codelab をご覧ください。

参考資料と動画

リファレンス ドキュメント