すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:ApsaraDB RDS for MySQLへのアクセス

最終更新日:Nov 25, 2024

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クラスター用のデータベースアカウントが作成されます。

  • 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パッケージをアップロードする

  1. 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()
      }
    }
  2. エンジンバージョンのApsaraDB RDS for MySQLインスタンスと互換性のあるドライバーを https://dev.mysql.com/downloads/connector/j/ からダウンロードします。

    この例では、mysql-connector-java-8.0.11.jarがダウンロードされます。

  3. JARパッケージとドライバーをOSSにアップロードします。 詳細については、「オブジェクトのアップロード」をご参照ください。

Alibaba Cloudアカウント内のApsaraDB RDS for MySQLへのアクセス

  1. AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 クラスターリスト ページで、エディションタブをクリックします。 管理するクラスターを確認し、クラスター ID をクリックします。

  2. 左側のナビゲーションウィンドウで、[ジョブの開発] > Spark Jar 開発 を選択します。

  3. Sparkジョブのジョブリソースグループとジョブタイプを選択します。 この例では、バッチタイプが選択されています。

  4. 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アプリケーション設定パラメーター」をご参照ください。

  5. 実行 をクリックします。

  6. Sparkジョブの実行後、SparkジョブのログにあるApsaraDB RDS for MySQLテーブルのデータを表示します。 詳細については、Sparkエディターのトピックの「Sparkアプリケーションに関する情報の表示」をご参照ください。

Alibaba Cloudアカウント間でApsaraDB RDS for MySQLにアクセス

  1. AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 クラスターリスト ページで、エディションタブをクリックします。 管理するクラスターを確認し、クラスター ID をクリックします。

  2. 左側のナビゲーションウィンドウで、[ジョブの開発] > Spark Jar 開発 を選択します。

  3. Sparkジョブのジョブリソースグループとジョブタイプを選択します。 この例では、バッチタイプが選択されています。

  4. 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アカウント間の権限付与の実行」をご参照ください。

    パラメーターの詳細については、前述のパラメーターテーブルをご参照ください。

  5. 実行 をクリックします。

  6. 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にアップロードする

  1. ApsaraDB for RDS コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、[インスタンス] をクリックします。 表示されるページで、表示するインスタンスのIDをクリックします。

  2. 左側のナビゲーションウィンドウで、[セキュリティコントロール] をクリックします。

  3. [CA証明書のダウンロード] をクリックします。

    重要

    CA証明書のデフォルトの有効期間は1年です。 CA証明書の有効期限が切れた場合、別の証明書を生成する必要があります。 期限切れのCA証明書を使用して、SSL接続を介してApsaraDB RDS for MySQLにアクセスすることはできません。

  4. CA証明書パッケージを解凍し、抽出したJKS証明書ファイルをOSSにアップロードします。 詳細については、オブジェクトのアップロード」をご参照ください。

Sparkジョブに必要なドライバーとJARパッケージをアップロードする

  1. 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です。

  2. test.jarパッケージをOSSにアップロードします。 詳細については、「オブジェクトのアップロード」をご参照ください。

Alibaba Cloudアカウント内のApsaraDB RDS for MySQLへのアクセス

  1. AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 クラスターリスト ページで、エディションタブをクリックします。 管理するクラスターを確認し、クラスター ID をクリックします。

  2. 左側のナビゲーションウィンドウで、[ジョブの開発] > Spark Jar 開発 を選択します。

  3. Sparkジョブのジョブリソースグループとジョブタイプを選択します。 この例では、バッチタイプが選択されています。

  4. 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アプリケーション設定パラメーター」をご参照ください。

  5. 実行 をクリックします。

  6. Sparkジョブの実行後、SparkジョブのログにあるApsaraDB RDS for MySQLテーブルのデータを表示します。 詳細については、Sparkエディターのトピックの「Sparkアプリケーションに関する情報の表示」をご参照ください。

Alibaba Cloudアカウント間でApsaraDB RDS for MySQLにアクセス

  1. AnalyticDB for MySQL コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 クラスターリスト ページで、エディションタブをクリックします。 管理するクラスターを確認し、クラスター ID をクリックします。

  2. 左側のナビゲーションウィンドウで、[ジョブの開発] > Spark Jar 開発 を選択します。

  3. Sparkジョブのジョブリソースグループとジョブタイプを選択します。 この例では、バッチタイプが選択されています。

  4. 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アカウント間の権限付与の実行」をご参照ください。

    パラメーターの詳細については、前述のパラメーターテーブルをご参照ください。

  5. 実行 をクリックします。

  6. Sparkジョブの実行後、SparkジョブのログにあるApsaraDB RDS for MySQLテーブルのデータを表示します。 詳細については、Sparkエディターのトピックの「Sparkアプリケーションに関する情報の表示」をご参照ください。