AnalyticDB for MySQLを使用すると、Alibaba Cloudアカウント内またはAlibaba Cloudアカウント間でApsaraDB RDS for MySQLにアクセスできます。 elastic network interface (ENI) またはSSL接続を介してApsaraDB RDS for MySQLにアクセスできます。 ENIベースのアクセスと比較して、SSLベースのアクセスは、ネットワーク接続の暗号化を提供し、より高いデータセキュリティを保証します。 このトピックでは、ENIおよびSSL接続を介してApsaraDB RDS for MySQLにアクセスする方法について説明します。
前提条件
AnalyticDB for MySQLData Lakehouse Editionクラスターが作成されます。
ApsaraDB RDS for MySQLインスタンスは、AnalyticDB for MySQLクラスターと同じリージョンに作成されています。 詳細については、「クラスターの作成」および「ApsaraDB RDS For MySQLインスタンスの作成」をご参照ください。
AnalyticDB for MySQLクラスターのジョブリソースグループが作成されます。 詳細については、「リソースグループの作成」をご参照ください。
AnalyticDB for MySQLクラスター用のデータベースアカウントが作成されます。
Alibaba Cloudアカウントを使用する場合は、特権アカウントを作成するだけで済みます。 詳細については、「データベースアカウントの作成」トピックの「特権アカウントの作成」セクションをご参照ください。
RAM (Resource Access Management) ユーザーを使用する場合は、特権アカウントと標準アカウントを作成し、標準アカウントをRAMユーザーに関連付ける必要があります。 詳細については、「データベースアカウントの作成」および「データベースアカウントの関連付けまたは関連付けの解除」をご参照ください。
ApsaraDB RDS for MySQLインスタンスがセキュリティグループに追加されました。 セキュリティグループのインバウンドルールとアウトバウンドルールは、ApsaraDB RDS for MySQLインスタンスのポートからのリクエストを許可します。 詳細については、「ApsaraDB RDS For MySQLインスタンスのセキュリティグループの設定」および「セキュリティグループルールの追加」をご参照ください。
Object Storage Service (OSS) が有効化され、AnalyticDB for MySQLクラスターと同じリージョンにバケットが作成されます。 詳細については、「OSSの有効化」および「バケットの作成」をご参照ください。
承認は完了です。 詳細については、「権限付与の実行」をご参照ください。
重要Alibaba Cloudアカウント内のデータにアクセスするには、AliyunADBSparkProcessingDataRole権限が必要です。 Alibaba Cloudアカウント間でデータにアクセスするには、他のAlibaba Cloudアカウントの認証を実行する必要があります。
データ準備
ApsaraDB RDS for MySQLインスタンスにデータベースを作成し、データベースにテーブルを作成してから、このテーブルにデータを書き込みます。 サンプル文:
CREATE DATABASE `test`;
CREATE TABLE `test`.`persons` (
`id` int(11) DEFAULT NULL,
`first_name` varchar(32) DEFAULT NULL,
`laster_name` varchar(32) DEFAULT NULL,
`age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;
INSERT INTO persons VALUES(1,'a','b',5);
INSERT INTO persons VALUES(2,'c','d',6);
INSERT INTO persons VALUES(3,'e','f',7);
ENI経由でApsaraDB RDS for MySQLにアクセス
Sparkジョブに必要なドライバーとJARパッケージをアップロードする
ApsaraDB RDS for MySQLインスタンスのテーブルへのアクセスに使用するプログラムを作成します。 次に、Sparkジョブに必要なJARパッケージにプログラムをコンパイルします。 この例では、JARパッケージの名前は
rds_test.jar
です。 サンプルコード:package com.aliyun.spark import org.apache.spark.sql.SparkSession object SparkRDS { def main(args: Array[String]): Unit = { val sparkSession = SparkSession.builder() .appName("rds mysql test") .getOrCreate() // The internal endpoint of the ApsaraDB RDS for MySQL instance. For more information, see View and change the endpoints and port numbers. val url = "jdbc:mysql://rm-bp11mpql1e01****.mysql.rds.aliyuncs.com" // The name of the table in the ApsaraDB RDS for MySQL instance. Specify the name in the db_name.table_name format. val dbtable = "test.persons" // The database account that is used to connect to the ApsaraDB RDS for MySQL database. val user = "mysql_username" // The password of the database account. val password = "mysql_password" val jdbcDF = sparkSession.read .format("jdbc") .option("url", url) .option("driver", "com.mysql.jdbc.Driver") .option("dbtable", dbtable) .option("user", user) .option("password", password) .load() jdbcDF.show() } }
エンジンバージョンのApsaraDB RDS for MySQLインスタンスと互換性のあるドライバーを https://dev.mysql.com/downloads/connector/j/ からダウンロードします。
この例では、mysql-connector-java-8.0.11.jarがダウンロードされます。
JARパッケージとドライバーをOSSにアップロードします。 詳細については、「オブジェクトのアップロード」をご参照ください。
Alibaba Cloudアカウント内のApsaraDB RDS for MySQLへのアクセス
AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 クラスターリスト ページで、エディションタブをクリックします。 管理するクラスターを確認し、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、
を選択します。Sparkジョブのジョブリソースグループとジョブタイプを選択します。 この例では、バッチタイプが選択されています。
Sparkエディターで次のコードを実行します。
{ "name": "rds-mysql-example", "jars": [ "oss://testBucketName/mysql-connector-java-8.0.11.jar" ], "file": "oss://testBucketName/rds_test.jar", "className": "com.aliyun.spark.SparkRDS", "conf": { "spark.adb.eni.enabled": "true", "spark.adb.eni.vswitchId": "vsw-bp17jqw3lrrobn6y****", "spark.adb.eni.securityGroupId": "sg-bp163uxgt4zandx****", "spark.driver.resourceSpec": "small", "spark.executor.instances": 1, "spark.executor.resourceSpec": "small" } }
下表に、各パラメーターを説明します。
パラメーター
説明
name
Sparkジョブの名前。
瓶
ApsaraDB RDS for MySQLドライバーのOSSパス。
この例では、mysql-connector-java-8.0.11.jarパッケージのOSSパスが使用されています。
file
Sparkジョブに必要なJARパッケージのOSSパス。
className
JavaまたはScalaアプリケーションのエントリクラス。
この例では、com.aliyun.spark.SparkRDSが使用されています。
spark.adb.eni.enabled
ENIを有効にするかどうかを指定します。
spark.adb.eni.vswitchId
ApsaraDB RDS for MySQLインスタンスのvSwitch ID。 vSwitch IDを表示するには、データベース接続ページのVPC上にポインターを移動します。
spark.adb.eni.securityGroupId
ApsaraDB RDS for MySQLインスタンスが追加されたセキュリティグループのID。 詳細については、「ApsaraDB RDS For MySQLインスタンスのセキュリティグループの設定」をご参照ください。
conf
Sparkジョブに必要な設定パラメーター (Apache Sparkと同様) 。 パラメーターは
key:value
形式である必要があります。 複数のパラメーターはコンマ (,) で区切ります。 詳細については、「Sparkアプリケーション設定パラメーター」をご参照ください。実行 をクリックします。
Sparkジョブの実行後、SparkジョブのログにあるApsaraDB RDS for MySQLテーブルのデータを表示します。 詳細については、Sparkエディターのトピックの「Sparkアプリケーションに関する情報の表示」をご参照ください。
Alibaba Cloudアカウント間でApsaraDB RDS for MySQLにアクセス
AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 クラスターリスト ページで、エディションタブをクリックします。 管理するクラスターを確認し、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、
を選択します。Sparkジョブのジョブリソースグループとジョブタイプを選択します。 この例では、バッチタイプが選択されています。
Sparkエディターで次のコードを実行します。
{ "name": "rds-mysql-example", "jars": [ "oss://testBucketName/mysql-connector-java-8.0.11.jar" ], "file": "oss://testBucketName/rds_test.jar", "className": "com.aliyun.spark.SparkRDS", "conf": { "spark.adb.eni.enabled": "true", "spark.adb.eni.vswitchId": "vsw-bp17jqw3lrrobn6y****", "spark.adb.eni.securityGroupId": "sg-bp163uxgt4zandx****", "spark.driver.resourceSpec": "small", "spark.executor.instances": 1, "spark.executor.resourceSpec": "small" "spark.adb.eni.roleArn":"acs:ram::testAccountID:role/testUserName" } }
下表に、各パラメーターを説明します。
パラメーター
説明
spark.adb.eni.roleArn
Alibaba Cloudアカウント間でApsaraDB RDS for MySQLにアクセスするために使用されるRAMロール。 複数のロールはコンマ (,) で区切ります。 パラメーターを
acs:ram::testAccountID:role/testUserName
形式で指定します。testAccountID
: ApsaraDB RDS for MySQLデータソースを所有するAlibaba CloudアカウントのID。testUserName
: Alibaba Cloudアカウント間で認証を実行するときに作成されるRAMロールの名前。 詳細については、「権限付与の実行」トピックの「Alibaba Cloudアカウント間の権限付与の実行」をご参照ください。
パラメーターの詳細については、前述のパラメーターテーブルをご参照ください。
実行 をクリックします。
Sparkジョブの実行後、SparkジョブのログにあるApsaraDB RDS for MySQLテーブルのデータを表示します。 詳細については、Sparkエディターのトピックの「Sparkアプリケーションに関する情報の表示」をご参照ください。
SSL接続を介したApsaraDB RDS for MySQLへのアクセス
SSL接続経由でApsaraDB RDS for MySQLにアクセスする前に、ApsaraDB RDS for MySQLインスタンスでSSL暗号化が有効になっており、内部エンドポイントへの接続が暗号化されていることを確認してください。 詳細については、「SSL暗号化機能の設定」をご参照ください。
ApsaraDB RDSコンソールからCA証明書をダウンロードし、証明書をOSSにアップロードする
ApsaraDB for RDS コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、[インスタンス] をクリックします。 表示されるページで、表示するインスタンスのIDをクリックします。
左側のナビゲーションウィンドウで、[セキュリティコントロール] をクリックします。
[CA証明書のダウンロード] をクリックします。
重要CA証明書のデフォルトの有効期間は1年です。 CA証明書の有効期限が切れた場合、別の証明書を生成する必要があります。 期限切れのCA証明書を使用して、SSL接続を介してApsaraDB RDS for MySQLにアクセスすることはできません。
CA証明書パッケージを解凍し、抽出したJKS証明書ファイルをOSSにアップロードします。 詳細については、「オブジェクトのアップロード」をご参照ください。
Sparkジョブに必要なドライバーとJARパッケージをアップロードする
ApsaraDB RDS for MySQLインスタンスのテーブルへのアクセスに使用するプログラムを作成します。 次に、Sparkジョブに必要なJARパッケージにプログラムをコンパイルします。 この例では、JARパッケージの名前は
test.jar
です。 サンプルコード:package org.example import org.apache.spark.sql.SparkSession object Test { def main(args: Array[String]): Unit = { // The OSS path of the JKS certificate file, which is in the oss://testBucketName/folder/ApsaraDB-CA-Chain.jks format. val JKS_FILE_PATH = args(0) // The database account that is used to connect to the ApsaraDB RDS for MySQL database. val USERNAME = args(1) // The password of the database account. val PASSWORD = args(2) The name of the ApsaraDB RDS for MySQL database. val DATABASE_NAME = args(3) // The name of the table in the ApsaraDB RDS for MySQL instance. val TABLE_NAME = args(4) // The internal endpoint of the ApsaraDB RDS for MySQL instance. val mysqlUrl = "jdbc:mysql://rm-bp11mpql1e01****.mysql.rds.aliyuncs.com:3306/?" + "useSSL=true" + s"&trustCertificateKeyStoreUrl=file:///tmp/testBucketName/folder/ApsaraDB-CA-Chain.jks" + "&trustCertificateKeyStorePassword=apsaradb" + "&trustCertificateKeyStoreType=JKS" + val spark = SparkSession.builder().getOrCreate() spark.read.format("jdbc") .option("driver", "com.mysql.cj.jdbc.Driver") .option("url", mysqlUrl) .option("user", USERNAME) .option("password", PASSWORD) .option("dbtable", s"${DATABASE_NAME}.${TABLE_NAME}") .load() .show() } }
下表に、各パラメーターを説明します。
パラメーター
説明
useSSL
SSL暗号化を有効にするかどうかを指定します。 有効な値:
true
false (デフォルト)
この例では、trueが選択されています。
trustCertificateKeyStoreUrl
JKS証明書ファイルのオンプレミスパス。
file:/// tmp/<JKS_FILE_PATH>
形式です。JKS_FILE_PATH
は、JKS証明書ファイルのOSSパスを指定します。たとえば、JKS証明書ファイルのOSSパスが
oss:// testBucketName/folder/ApsaraDB-CA-Chain.jks
の場合、JKS証明書ファイルのオンプレミスパスはfile:/// tmp/testBucketName/folder/ApsaraDB-CA-Chain.jks
です。trustCertificateKeyStorePassword
JKS証明書ファイルのパスワード。 このパラメーターの値はapsaradbです。
trustCertificateKeyStoreType
証明書ファイルの格納形式。 このパラメーターの値はJKSです。
test.jar
パッケージをOSSにアップロードします。 詳細については、「オブジェクトのアップロード」をご参照ください。
Alibaba Cloudアカウント内のApsaraDB RDS for MySQLへのアクセス
AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 クラスターリスト ページで、エディションタブをクリックします。 管理するクラスターを確認し、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、
を選択します。Sparkジョブのジョブリソースグループとジョブタイプを選択します。 この例では、バッチタイプが選択されています。
Sparkエディターで次のコードを実行します。
{ "file": "oss://testBucketName/test.jar", "className": "org.example.Test", "name": "MYSQL PEM Test", "conf": { "spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES": "oss://testBucketName/folder/ApsaraDB-CA-Chain.jks", "spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES": "oss://testBucketName/folder/ApsaraDB-CA-Chain.jks", "spark.driver.resourceSpec": "small", "spark.executor.instances": 1, "spark.executor.resourceSpec": "small", "spark.adb.eni.enabled": "true", "spark.adb.eni.vswitchId": "vsw-bp17jqw3lrrobn6y****", "spark.adb.eni.securityGroupId": "sg-bp163uxgt4zandx****" } }
下表に、各パラメーターを説明します。
パラメーター
説明
name
Sparkジョブの名前。
file
Sparkジョブに必要なJARパッケージのOSSパス。
className
JavaまたはScalaアプリケーションのエントリクラス。
この例では、org.example.Testが使用されています。
spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES
Sparkドライバーパラメーター。JKS証明書ファイルのOSSパスを指定します。 複数のJKS証明書ファイルをコンマ (,) で区切ります。 例:
spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES: "oss:// testBucketName/a.jks,oss:// testBucketName/b.jks"
spark.exe cutorEnv.ADB_SPARK_DOWNLOAD_FILES
Spark executorパラメーター。JKS証明書ファイルのOSSパスを指定します。 複数のJKS証明書ファイルをコンマ (,) で区切ります。 例:
spark.exe cutor.ADB_SPARK_DOWNLOAD_FILES: "oss:// testBucketName/a.jks,oss:// testBucketName/b.jks"
spark.adb.eni.enabled
ENIを有効にするかどうかを指定します。
spark.adb.eni.vswitchId
ApsaraDB RDS for MySQLインスタンスのvSwitch ID。 vSwitch IDを表示するには、データベース接続ページのVPC上にポインターを移動します。
spark.adb.eni.securityGroupId
ApsaraDB RDS for MySQLインスタンスが追加されたセキュリティグループのID。 詳細については、「ApsaraDB RDS For MySQLインスタンスのセキュリティグループの設定」をご参照ください。
conf
Sparkジョブに必要な設定パラメーター (Apache Sparkと同様) 。 パラメーターは
key:value
形式である必要があります。 複数のパラメーターはコンマ (,) で区切ります。 詳細については、「Sparkアプリケーション設定パラメーター」をご参照ください。実行 をクリックします。
Sparkジョブの実行後、SparkジョブのログにあるApsaraDB RDS for MySQLテーブルのデータを表示します。 詳細については、Sparkエディターのトピックの「Sparkアプリケーションに関する情報の表示」をご参照ください。
Alibaba Cloudアカウント間でApsaraDB RDS for MySQLにアクセス
AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 クラスターリスト ページで、エディションタブをクリックします。 管理するクラスターを確認し、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、
を選択します。Sparkジョブのジョブリソースグループとジョブタイプを選択します。 この例では、バッチタイプが選択されています。
Sparkエディターで次のコードを実行します。
{ "file": "oss://testBucketName/test.jar", "className": "org.example.Test", "name": "MYSQL PEM Test", "conf": { "spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES": "oss://testBucketName/folder/ApsaraDB-CA-Chain.jks", "spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES": "oss://testBucketName/folder/ApsaraDB-CA-Chain.jks", "spark.driver.resourceSpec": "small", "spark.executor.instances": 1, "spark.executor.resourceSpec": "small", "spark.adb.eni.enabled": "true", "spark.adb.eni.vswitchId": "vsw-bp17jqw3lrrobn6y****", "spark.adb.eni.securityGroupId": "sg-bp163uxgt4zandx****", "spark.adb.eni.roleArn":"acs:ram::testAccountID:role/testUserName", } }
下表に、各パラメーターを説明します。
パラメーター
説明
spark.adb.eni.roleArn
Alibaba Cloudアカウント間でApsaraDB RDS for MySQLにアクセスするために使用されるRAMロール。 複数のロールはコンマ (,) で区切ります。 パラメーターを
acs:ram::testAccountID:role/testUserName
形式で指定します。testAccountID
: ApsaraDB RDS for MySQLデータソースを所有するAlibaba CloudアカウントのID。testUserName
: Alibaba Cloudアカウント間で認証を実行するときに作成されるRAMロールの名前。 詳細については、「権限付与の実行」トピックの「Alibaba Cloudアカウント間の権限付与の実行」をご参照ください。
パラメーターの詳細については、前述のパラメーターテーブルをご参照ください。
実行 をクリックします。
Sparkジョブの実行後、SparkジョブのログにあるApsaraDB RDS for MySQLテーブルのデータを表示します。 詳細については、Sparkエディターのトピックの「Sparkアプリケーションに関する情報の表示」をご参照ください。