AnalyticDB for MySQL Data Lakehouse Edition (V3.0) を使用すると、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 MySQL Data Lakehouse Edition (V3.0) クラスターとApsaraDB RDS for MySQLインスタンスが同じリージョンで作成されます。詳細については、「クラスターの作成」および「ApsaraDB RDS 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 Data Lakehouse Edition (V3.0) クラスターと同じリージョンにバケットが作成されます。 詳細については、「OSSの有効化」および「バケットの作成」をご参照ください。
承認は完了です。 詳細については、「権限付与の実行」をご参照ください。
重要Alibaba Cloudアカウント内のデータにアクセスするには、AliyunADBSparkProcessingDataRole権限が必要です。 Alibaba Cloudアカウント間でデータにアクセスするには、他のAlibaba Cloudアカウントの認証を実行する必要があります。
データ準備
ApsaraDB RDS for MySQLインスタンスにデータベースを作成し、データベースにテーブルを作成してから、このテーブルにデータを書き込みます。 サンプル文:
データベースの作成 'テスト';
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
) エンジン=InnoDBデフォルト料金=utf8
;
人に値を挿入 (1、'a' 、'b' 、5);
人に値を挿入する (2、'c' 、'd' 、6);
人に値を挿入 (3、'e' 、'f' 、7);
ENI経由でApsaraDB RDS for MySQLにアクセス
Sparkジョブに必要なドライバーとJARパッケージをアップロードする
ApsaraDB RDS for MySQLインスタンスのテーブルへのアクセスに使用するプログラムを作成します。 次に、Sparkジョブに必要なJARパッケージにプログラムをコンパイルします。 この例では、JARパッケージの名前は
rds_test.jar
です。 サンプルコード:パッケージcom.aliyun.spark org.apache.spark.sql.SparkSessionをインポートする オブジェクトSparkRDS { def main(args: Array[String]): Unit = { val sparkSession = SparkSession.builder() . appName("rds mysql test") .getOrCreate() // ApsaraDB RDS for MySQLインスタンスの内部エンドポイント。 詳細については、「エンドポイントとポート番号の表示と変更」をご参照ください。 val url = "jdbc:mysql:// rm-bp11mpql1e01 **** .mysql.rds.aliyuncs.com" // ApsaraDB RDS for MySQLインスタンスのテーブルの名前。 名前はdb_name.table_name形式で指定します。 val dbtable = "test.persons" // ApsaraDB RDS for MySQLデータベースへの接続に使用されるデータベースアカウント。 val user = "mysql_username" // データベースアカウントのパスワード。 val password = "mysql_password" val jdbcDF = sparkSession.read . フォーマット ("jdbc") . オプション ("url", url) . オプション ("driver", "com.mysql.jdbc.Driver") . オプション ("dbtable", dbtable) . オプション ("user", user) . オプション ("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コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 Lake Warehouse Edition(3.0) タブで、管理するクラスターを見つけ、クラスター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.exe cutor.instances": 1、 "spark.exe cutor.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コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 Lake Warehouse Edition(3.0) タブで、管理するクラスターを見つけ、クラスターIDをクリックします。
重要Alibaba Cloudアカウント全体でApsaraDB RDS for MySQLにアクセスする場合は、新しいAlibaba Cloudアカウント用に作成されたRAMユーザーとしてAnalyticDB for MySQLコンソールにログインする必要があります。 詳細については、「権限付与の実行」をご参照ください。
左側のナビゲーションウィンドウで、
を選択します。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.exe cutor.instances": 1、 "spark.exe cutor.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
です。 サンプルコード:パッケージorg.example org.apache.spark.sql.SparkSessionをインポートする object Test { def main(args: Array[String]): Unit = { // JKS証明書ファイルのOSSパス。oss:// testBucketName/folder/ApsaraDB-CA-Chain.jks形式です。 val JKS_FILE_PATH = args(0) // ApsaraDB RDS for MySQLデータベースへの接続に使用されるデータベースアカウント。 val USERNAME = args (1) // データベースアカウントのパスワード。 val PASSWORD = args (2) ApsaraDB for RDS データベースの名前です。 val DATABASE_NAME = args (3) // ApsaraDB RDS for MySQLインスタンスのテーブルの名前。 val TABLE_NAME = args (4) // ApsaraDB RDS for MySQLインスタンスの内部エンドポイント。 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") . オプション ("driver", "com.mysql.cj.jdbc.Driver") . オプション ("url", mysqlUrl) . オプション ("user", USERNAME) . オプション (「パスワード」、パスワード) . オプション ("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コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 Lake Warehouse Edition(3.0) タブで、管理するクラスターを見つけ、クラスターIDをクリックします。
左側のナビゲーションウィンドウで、
を選択します。Sparkジョブのジョブリソースグループとジョブタイプを選択します。 この例では、バッチタイプが選択されています。
Sparkエディターで次のコードを実行します。
{ "file": "oss:// testBucketName/test.jar" 、"className": "org.example.Test" 、 "name": "MYSQL PEMテスト" 、 "conf": { "spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES": "oss:// testBucketName/folder/ApsaraDB-CA-Chain.jks" 、"spark.exe cutorEnv.ADB_SPARK_DOWNLOAD_FILES": "oss:// testBucketName/folder/ApsaraDB-CA-Chain.jks" 、 "spark.driver.resourceSpec": "small" 、 "spark.exe cutor.instances": 1、 "spark.exe cutor.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コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 Lake Warehouse Edition(3.0) タブで、管理するクラスターを見つけ、クラスターIDをクリックします。
重要Alibaba Cloudアカウント全体でApsaraDB RDS for MySQLにアクセスする場合は、新しいAlibaba Cloudアカウント用に作成されたRAMユーザーとしてAnalyticDB for MySQLコンソールにログインする必要があります。 詳細については、「権限付与の実行」をご参照ください。
左側のナビゲーションウィンドウで、
を選択します。Sparkジョブのジョブリソースグループとジョブタイプを選択します。 この例では、バッチタイプが選択されています。
Sparkエディターで次のコードを実行します。
{ "file": "oss:// testBucketName/test.jar" 、 "className": "org.example.Test" 、 "name": "MYSQL PEMテスト" 、 "conf": { "spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES": "oss:// testBucketName/folder/ApsaraDB-CA-Chain.jks" 、 "spark.exe cutorEnv.ADB_SPARK_DOWNLOAD_FILES": "oss:// testBucketName/folder/ApsaraDB-CA-Chain.jks" 、 "spark.driver.resourceSpec": "small" 、 "spark.exe cutor.instances": 1、 "spark.exe cutor.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アプリケーションに関する情報の表示」をご参照ください。