クラウドベンダーをGoogle Cloudに設定したデータソースまたはデータ移行タスクを作成する際に、エンドポイント接続方式を選択した場合は、事前に設定が必要です。本記事ではその設定方法について説明します。
前提条件
対応するタイプのデータベースインスタンスを作成し、そのインスタンスのユーザーVPC内の接続アドレスを取得していること。例えば、MySQLインスタンスは通常
address:portの単一のアドレスペアであり、Kafkaインスタンスには複数のアドレスペア(broker_address1:broker_port1、broker_address2:broker_port2など)が存在する場合があります。エンドポイントサービスに関連付けられたロードバランシングサービスや仮想サーバーなどのリソースでセキュリティグループ設定が有効になっている場合は、OB Cloudデータソースが属するプライベートネットワークアドレスを対応するセキュリティグループに追加する必要があります。詳細については、プライベートネットワークアドレスのネットワークセグメント説明を参照してください。
Cloud SQLインスタンスのプライベートネットワーク接続を設定する
GCP Cloud SQL for MySQL/PostgreSQLは、Private Service Connect (PSC)とPrivate Service Access (PSA)の2種類のプライベートネットワーク接続方式をサポートしています。Google CloudコンソールのCloud SQLインスタンスページにアクセスし、対象Cloud SQLインスタンスのInternal connection methodを確認することで、そのインスタンスがPSCモードかPSAモードを使用しているかを判断できます。
PSCモードを使用している場合、新規データ移行タスクの作成時にはEndpoint接続タイプのみがサポートされます。Cloud SQLインスタンスを作成した後、サービス接続を取得し、データソースまたはデータ移行タスク作成ページのGoogle Cloud > Endpoint > Connectionに入力します。詳細については、Private Service Connectを使用してインスタンスに接続するを参照してください。
PSCモードでは、権限プロジェクトを追加する必要もあります。操作手順は以下のとおりです。公式ドキュメントについては、Private Service Connectを有効にしたインスタンスを編集するを参照してください。
OceanBase Cloudコンソールにログインします。
データサービス > データソースまたはデータ移行タスクの新規作成ページで、Google Cloud > Endpoint > Connectionエリアの下部に表示されているProject IDを確認し、コピーします。
Google Cloudコマンドラインインターフェースで以下のコマンドを実行し、PSCモードのCloud SQLインスタンスに権限プロジェクトを追加します。
gcloud sql instances patch <INSTANCE_NAME> \ --project=<PROJECT_ID> \ --allowed-psc-projects=ALLOWED_PROJECTSパラメータ説明INSTANCE_NAME VPCネットワーク内のPrivate Service Connectエンドポイントが接続できるCloud SQLインスタンスの名前。 PROJECT_ID Google CloudプロジェクトのIDまたはプロジェクト番号。このプロジェクトには、VPCネットワーク内のPrivate Service Connectエンドポイントが接続できるインスタンスが含まれます。 ALLOWED_PROJECTS ステップ2でコピーしたProject ID。このプロジェクトにより、Private Service Connect を使用するよう設定済みのプロジェクトが置き換えられます。プロジェクトがこのリストに含まれていない場合、そのプロジェクトを使用してインスタンスを作成し、Private Service Connect を有効にすることはできません。 例えば、
omstest-mysql-pscはCloud SQLインスタンスの名前、oms-dev-112233はユーザー自身のプロジェクトID、oms_project_idはデータサービスページでコピーしたProject IDです。gcloud sql instances patch omstest-sit-cloudsql-psc \ インスタンス名 --project=oms-dev-112233 --allowed-psc-projects='oms-dev','oms_project_id'
PSAモードを使用している場合は、以下の操作に従って設定してください。PSAモードのCloud SQLインスタンスを作成する際、カスタムインスタンス-接続数エリアで対応する専用IPとパブリックIP情報を設定する必要があります。専用IPについては、自分のVPCネットワークを選択して関連付ける必要があります。
転送インスタンスの作成
以下は、GCPのgcloudコマンドを使用して転送インスタンス、インスタンスグループ、およびヘルスチェックを作成する例です。参考用ですので、実際の状況に応じて該当するパラメータの値を置き換えてください。
## インスタンスの作成
gcloud compute instances create <instance_name> \
--project=<project_id> \
--zone=<zone_id> \
--machine-type=c2d-standard-2 \
--network-interface=network-tier=STANDARD,stack-type=IPV4_ONLY,subnet=<subnet_name> \
--maintenance-policy=MIGRATE \
--provisioning-model=STANDARD \
--tags=lb-health-check \
--scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/sqlservice.admin,https://www.googleapis.com/auth/trace.append \
--create-disk=auto-delete=yes,boot=yes,device-name=<instance_name>,image=projects/rocky-linux-cloud/global/images/rocky-linux-8-optimized-gcp-v20240717,mode=rw,size=20,type=pd-balanced \
--labels=use=rdtest,product=oms,env=devsit
# インスタンスグループを作成し、上記で作成したインスタンスをインスタンスグループに追加する
gcloud compute instance-groups unmanaged create <instance_group_name> \
--project=<project_id> \
--zone=<zone_id> \
&& \
gcloud compute instance-groups unmanaged add-instances <instance_group_name> \
--project=<project_id> \
--zone=<zone_id> \
--instances=<instance_name>
# ヘルスチェックを作成する
gcloud compute health-checks create tcp <health_check_name> \
--project=<project_id> \
--port=3306 \
--proxy-header=NONE \
--region=us-west1 \
--no-enable-logging \
--check-interval=5 \
--timeout=5 \
--unhealthy-threshold=2 \
--healthy-threshold=2
パラメータ |
説明 |
|---|---|
| instance_name | Google Cloud仮想マシンインスタンスの名前。 |
| project_id | Google CloudプロジェクトID。 |
| zone_id | Google Cloud内のインスタンスまたはインスタンスグループのゾーン。 |
| subnet_name | サブネット名。ここで入力するサブネットは、Cloud SQLインスタンスを作成時に指定したネットワーク内にある必要があります。 |
| instance_group_name | Google Cloud内のインスタンスグループ名。 |
| health_check_name | Google Cloud内で作成されるヘルスチェック(health-check)の名前。 |
転送インスタンスにログインし、cloud-sql-auth-pluginをインストールする
以下は、転送インスタンスにログインし、cloud-sql-auth-pluginをインストールする手順の例です。実際の状況に応じて、該当するパラメータの値を置き換えてください。
仮想マシンインスタンスにログインした後、以下のコマンドを実行します。
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.11.3/cloud-sql-proxy.linux.amd64 chmod +x cloud-sql-proxygcloudコンソールページに移動し、以下のコマンドを実行します。
gcloud sql instances describe <mysql_instance_name> --format='value(connectionName)'例えば、Cloud SQLインスタンスの名前が
cloud_mysql_testの場合、コマンドは次のとおりです。gcloud sql instances describe cloud_mysql_test --format='value(connectionName)'実行結果は次のとおりです。
xxx@xxx: ~ (oms-dev) $ gcloud sql instances describe cloud_mysql_test --format='value (connectionName) ' oms-dev:us-west1:cloud_mysql_test実行結果を取得した後、仮想マシンインスタンスにログインし、以下のコマンドを実行します。
./cloud-sql-proxy --address 0.0.0.0 --port 3306 --private-ip oms-dev:us-west1:cloud_mysql_test > out.txt &以下のコマンドを実行して検証します。
sudo yum install -y telnet [xxx@xxx ~]$ telnet 127.0.0.1 3306 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. Q 8.0.31-google+ lt7gQs+F#i]F&;W_,:mysql_native_password
PSCサービスアタッチメントの作成
ロードバランシングエンジンの作成
Load Balancingページに移動し、+ CREATE LOAD BALANCERをクリックします。
Create a load balancerページで、以下の設定を順に選択します。
Type of load balancerをNetwork Load Balancerに選択し、Nextをクリックします。
Proxy or passthroughをPassthrough load balancerに選択し、Nextをクリックします。
Public facing or internalをInternalに選択し、Nextをクリックします。
選択が完了したら、CONFIGUREをクリックします。
Create Internal passthrough Network Load Balancerページで、各パラメータを設定します。
CREATEをクリックします。
Publish Serviceの作成
PUBLISH SERVICESページに移動し、+ PUBLISH SERVICEをクリックします。
Publish Serviceページで、各パラメータを設定します。
Load Balancer TypeをInternal passthrough Network Load Balancerに選択します。
Internal load balancerドロップダウンリストから、作成済みのロードバランサーを選択します。
Service nameテキストボックスにカスタム名を入力します。
Subnetsドロップダウンリストから作成済みのサブネットを選択し、OKをクリックします。新規作成が必要な場合は、RESERVE NEW SUBNETをクリックしてサブネットを新規作成します。
注意
Publish Service Subnetがユーザーのバックエンドサービスにアクセスできることを確認してください。
Accepted projectsエリアで、+ ADD ACCEPTED PROJECTをクリックし、権限を付与するプロジェクト名を入力します。
ここでのプロジェクト名は、データサービス>データソースの新規作成またはデータ移行タスクの新規作成ページの、Connectionエリアの下部に表示されているプロジェクト名をコピーしてください。
設定完了後、ADD SERVICEをクリックします。
Service attachmentの取得
Publish Serviceを作成した後、Service attachmentをコピーし、データソースまたはデータ移行タスクの新規作成ページの**Google Cloud** > Endpoint > **Connection**に入力する必要があります。データソースの新規作成の詳細については、データソースの新規作成を参照してください。タスクの新規作成の詳細については、MySQLデータベースのデータをOceanBaseデータベースのMySQL互換モードに移行するモジュールの対応するタイプのデータ移行タスクの新規作成ドキュメントを参照してください。
Service attachmentをコピーする手順は以下のとおりです:
Published servicesページで、対象のService名をクリックします。
Private Service Connect service detailsページで、Service attachmentの後ろにあるコピーアイコンをクリックして、サービス接続を取得します。
Kafkaインスタンスのプライベートネットワーク接続を設定する
Kafkaノードリストの取得
Google Cloudコマンドラインインターフェースで以下のコマンドを実行し、Kafkaクラスタ情報を取得します。
gcloud managed-kafka clusters describe <クラスタ名> --location us-west1実行結果の
bootstrapAddressはBootstrap接続アドレスを表し、subnetはクラスタが存在するサブネットを表します。Kafkaに接続できるインスタンスを作成します。サブネットはGCPのサブネットと一致している必要があります。
## インスタンスの作成 gcloud compute instances create <instance_name> \ --project=<project_id> \ --zone=<zone_id> \ --machine-type=c2d-standard-2 \ --network-interface=network-tier=STANDARD,stack-type=IPV4_ONLY,subnet=<subnet_name> \ --maintenance-policy=MIGRATE \ --provisioning-model=STANDARD \ --tags=lb-health-check \ --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/sqlservice.admin,https://www.googleapis.com/auth/trace.append \ --create-disk=auto-delete=yes,boot=yes,device-name=<instance_name>,image=projects/rocky-linux-cloud/global/images/rocky-linux-8-optimized-gcp-v20240717,mode=rw,size=20,type=pd-balanced \ --labels=use=rdtest,product=oms,env=devsit # インスタンスグループを作成し、上記で作成したインスタンスをインスタンスグループに追加します。 gcloud compute instance-groups unmanaged create <instance_group_name> \ --project=<project_id> \ --zone=<zone_id> \ && \ gcloud compute instance-groups unmanaged add-instances <instance_group_name> \ --project=<project_id> \ --zone=<zone_id> \ --instances=<instance_name>インスタンスにログインし、以下のコマンドを実行します。
sudo -i yum install -y wget java-1.8.0-openjdk wget -O kafka_2.13-3.7.2.tgz https://archive.apache.org/dist/kafka/3.7.2/kafka_2.13-3.7.2.tgz tar xfz kafka_2.13-3.7.2.tgz export KAFKA_HOME=$(pwd)/kafka_2.13-3.7.2 export PATH=$PATH:$KAFKA_HOME/binSASL認証情報を取得するための権限を付与し、認証ファイルを
client.propertiesとしてインスタンス上に保存します。Google CloudコンソールのIAMページにログインし、対象のサービスアカウント(service_account、SASLパスワード生成時に使用)を見つけます。
対象サービスアカウントのキーJSON設定を取得します(キー生成時にダウンロードして保存)。
SASLパスワードを生成します。
キーJSON設定ファイルの名前が
my_service_account.jsonである場合を例に、インスタンスで以下のコマンドを実行すると、base64エンコードされたパスワードが取得でき、password.txtファイルに生成されます。base64 -w 0 < my_service_account.json > password.txtインスタンスで以下のコマンドを実行し、対象サービスアカウントにGCP上のKafkaサービスへのアクセス権限を付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount: $SERVICE_ACCOUNT_EMAIL \ --role roles/managedkafka.clientSASL_PLAIN方式でデータソースサービスにデータソースを登録し、テスト接続を行います。このファイルをclient.propertiesとして保存します。security.protocol=SASL_SSL sasl.mechanism=PLAIN sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \ username="oms-xxxx.iam.gserviceaccount.com" \ password="ewogICxxxxFwaXMuY29tIgp9Cg==";
以下のコマンドを実行して、Brokerノードのアドレスを取得します。
# --bootstrap-server の後ろには、前述で取得したBootstrap接続アドレスを入力する必要があります kafka-configs.sh --bootstrap-server bootstrap.xxxx-test-oms.us-west1.managedkafka.oms-dev-41xxxx02.cloud.goog:9092 --describe --all --entity-type brokers --command-config client.properties | grep advertised.listeners | awk -F'EXTERNAL://|,' '{print $2}'例:
broker-0.bootstrap.xxxx-test-oms.us-west1_managedkafka.oms-dev-41xxxx02.cloud.goog:9092。
Nginxの設定
取得したBrokerノードリストに基づいてNginxを設定します。
# Nginx起動失敗時に設定が必要な場合
sudo setenforce 0
load_module '/usr/lib64/nginx/modules/ngx_stream_module.so';
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
# 各Serverは一つのKafka Bootstrap Server接続アドレスに対応します
# listenの後ろはNginxのポート番号で、proxy_passのポート番号と同じである必要はありません
server {
listen 19092;
proxy_pass bootstrap.<region_id>.managedkafka.<project_id>.cloud.goog:9092;
proxy_timeout 60s;
}
server {
listen 19093;
proxy_pass broker-0.<region_id>.managedkafka.<project_id>.cloud.goog:9092;
proxy_timeout 60s;
}
server {
listen 19094;
proxy_pass broker-1.<region_id>.managedkafka.<project_id>.cloud.goog:9092;
proxy_timeout 60s;
}
server {
listen 19095;
proxy_pass broker-2.<region_id>.managedkafka.<project_id>.cloud.goog:9092;
proxy_timeout 60s;
}
}
注意
Nginxは
ngx_stream_moduleをサポートしている必要があります。Nginxの
proxy_timeoutを60秒以上に設定することを推奨します。
ヘルスチェックの作成
gcloud compute health-checks create tcp <health_check_name> \
--project=<project_id> \
--port=<任意のNginx転送ポート> \
--proxy-header=NONE \
--region=<region_id> \
--no-enable-logging \
--check-interval=5 \
--timeout=5 \
--unhealthy-threshold=2 \
--healthy-threshold=2
PSCサービスアタッチメントの作成
ロードバランサーの作成
Load Balancingページに移動し、+ CREATE LOAD BALANCERをクリックします。
Create a load balancerページで、以下の設定を順に選択します。
Type of load balancerをNetwork Load Balancerに選択し、Nextをクリックします。
Proxy or passthroughをPassthrough load balancerに選択し、Nextをクリックします。
Public facing or internalをInternalに選択し、Nextをクリックします。
選択が完了したら、CONFIGUREをクリックします。
Create Internal passthrough Network Load Balancerページで、各パラメータを設定します。
CREATEをクリックします。
Publish Serviceの作成
PUBLISH SERVICESページに移動し、+ PUBLISH SERVICEをクリックします。
Publish Serviceページで、各パラメータを設定します。
Load Balancer TypeをInternal passthrough Network Load Balancerに選択します。
Internal load balancerドロップダウンリストから、作成済みのロードバランサーを選択します。
Service nameテキストボックスにカスタム名を入力します。
Subnetsドロップダウンリストから作成済みのサブネットを選択し、OKをクリックします。新規作成が必要な場合は、RESERVE NEW SUBNETをクリックしてサブネットを新規作成します。
注意
Publish Service Subnetがユーザーのバックエンドサービスにアクセスできることを確認してください。
Accepted projectsエリアで、+ ADD ACCEPTED PROJECTをクリックし、権限を付与するプロジェクト名を入力します。
ここでのプロジェクト名は、データサービス>データソースの新規作成またはデータ移行タスクの新規作成ページのConnectionエリアに表示されているプロジェクト名をコピーしてください。
設定が完了したら、ADD SERVICE をクリックします。
Service Attachmentの取得
Publish Serviceを作成した後、Service attachmentをコピーし、データソースまたはデータ移行タスクの作成ページにあるGoogle Cloud > Endpoint > Connectionに入力する必要があります。タスクの詳細については、MySQLデータベースのデータをOceanBaseデータベースのMySQL互換モードに移行するを参照してください。
Service attachmentをコピーする手順は以下のとおりです:
Published servicesページで、対象のService名をクリックします。
Private Service Connect service detailsページで、Service attachmentの後ろにあるコピーアイコンをクリックして、サービス接続を取得します。