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

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

最終更新日:Jun 12, 2024

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インスタンスの作成」をご参照ください。

  • ジョブリソースグループが作成されます。 詳細については、「リソースグループの作成」をご参照ください。

  • データベースアカウントが作成されます。

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

  1. 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()
      }
    }
  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コンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 Lake Warehouse Edition(3.0) タブで、管理するクラスターを見つけ、クラスター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.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アプリケーション設定パラメーター」をご参照ください。

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

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

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

  1. AnalyticDB for MySQLコンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 Lake Warehouse Edition(3.0) タブで、管理するクラスターを見つけ、クラスターIDをクリックします。

    重要

    Alibaba Cloudアカウント全体でApsaraDB RDS for MySQLにアクセスする場合は、新しいAlibaba Cloudアカウント用に作成されたRAMユーザーとしてAnalyticDB for MySQLコンソールにログインする必要があります。 詳細については、「権限付与の実行」をご参照ください。

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

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

  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です。 サンプルコード:

    パッケージ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です。

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

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

  1. AnalyticDB for MySQLコンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 Lake Warehouse Edition(3.0) タブで、管理するクラスターを見つけ、クラスターIDをクリックします。

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

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

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

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

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

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

  1. AnalyticDB for MySQLコンソールにログインします。 ホームページの左上でリージョンを選択します。 左側のナビゲーションウィンドウで、クラスターリスト をクリックします。 Lake Warehouse Edition(3.0) タブで、管理するクラスターを見つけ、クラスターIDをクリックします。

    重要

    Alibaba Cloudアカウント全体でApsaraDB RDS for MySQLにアクセスする場合は、新しいAlibaba Cloudアカウント用に作成されたRAMユーザーとしてAnalyticDB for MySQLコンソールにログインする必要があります。 詳細については、「権限付与の実行」をご参照ください。

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

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

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

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

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

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