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

Elastic Container Instance:ECI Pod から RDS インスタンスへの接続

最終更新日:Jun 22, 2026

コンテナ化アプリケーションを ApsaraDB RDS for MySQL インスタンスなどのデータベースに接続するには、ApsaraDB RDS インスタンスのホワイトリストを設定し、ECI Pod の作成時にデータベース接続情報を提供する必要があります。 このトピックでは、サーバーレス Kubernetes クラスターで ECI Pod を作成する際に ApsaraDB RDS に接続する方法について説明します。

背景情報

ApsaraDB RDS は、Alibaba Cloud が提供する、安定性、信頼性、拡張性に優れたオンラインデータベースサービスです。Alibaba Cloud の分散ファイルシステムとパフォーマンス専有型ソリッドステートドライブ (SSD) 上に構築されており、MySQL、SQL Server、PostgreSQL などの複数のデータベースエンジンをサポートしています。このトピックでは、ApsaraDB RDS for MySQL インスタンスを例として使用します。ビジネス要件に応じてデータベースエンジンを選択できます。詳細については、「データベースエンジン」をご参照ください。

前提条件

  • ApsaraDB RDS for MySQL インスタンスが作成され、そのインスタンス用のデータベースアカウントが設定されていること。詳細については、「ApsaraDB RDS for MySQL インスタンスの作成」および「データベースとアカウントの作成」をご参照ください。

  • サーバーレス Kubernetes クラスターが作成されています。 詳細については、「サーバーレス Kubernetes クラスターを作成する」をご参照ください。

    説明

    このトピックでは、サーバーレス Kubernetes クラスターを例として使用します。別のタイプの Kubernetes クラスターを使用する場合は、ECI に接続するために、クラスターに仮想ノードがデプロイされていることを確認してください。

  • ApsaraDB RDS インスタンスと Kubernetes クラスターが相互に通信できること。

    最高のパフォーマンスとセキュリティを確保するため、ApsaraDB RDS インスタンスと Kubernetes クラスターを同じ Virtual Private Cloud (VPC) にデプロイすることを推奨します。これにより、内部ネットワーク通信が可能になります。異なる VPC にある場合は、パブリックネットワーク経由でのアクセスを設定する必要があります。

RDS ホワイトリストの設定とエンドポイントの取得

内部ネットワーク経由での RDS へのアクセス

ご利用の Kubernetes クラスターと ApsaraDB RDS インスタンスが同じ VPC 内にある場合、アプリケーションは内部ネットワーク経由でインスタンスにアクセスできます。ApsaraDB RDS ホワイトリストを設定し、内部エンドポイントを取得してください。

  1. ApsaraDB RDS ホワイトリストを設定します。

    内部ネットワーク経由で接続する場合、IP アドレスまたはセキュリティグループをホワイトリストに追加できます。

    • IP アドレス

      VPC または vSwitch の CIDR ブロックを ApsaraDB RDS ホワイトリストに追加します。これにより、その CIDR ブロック内のすべての ECI インスタンスが ApsaraDB RDS インスタンスにアクセスできるようになります。詳細については、「IP アドレスホワイトリストの設定」をご参照ください。

    • セキュリティグループ

      ご利用の ECI インスタンスのセキュリティグループを ApsaraDB RDS ホワイトリストに追加します。これにより、そのセキュリティグループ内のすべての ECI インスタンスが ApsaraDB RDS インスタンスにアクセスできるようになります。詳細については、「セキュリティグループの設定」をご参照ください。

  2. ApsaraDB RDS インスタンスのデータベースの接続ページで、内部エンドポイントを見つけ、記録します。

パブリックネットワーク経由での RDS へのアクセス

ご利用の Kubernetes クラスターと ApsaraDB RDS インスタンスが異なる VPC にある場合、アプリケーションはパブリックネットワーク経由で接続する必要があります。ApsaraDB RDS ホワイトリストを設定し、パブリックエンドポイントを申請してください。

重要
  • パブリックエンドポイントを使用すると、インスタンスがセキュリティリスクにさらされる可能性があります。このオプションは慎重に使用してください。

  • より高速なデータ転送と高いセキュリティを実現するため、アプリケーションを ApsaraDB RDS インスタンスと同じリージョンおよびネットワーク内の ECI インスタンスに移行し、内部エンドポイントを使用することを推奨します。

  1. ApsaraDB RDS ホワイトリストを設定します。

    パブリックネットワーク経由で接続する場合、IP アドレスホワイトリストを設定する必要があります。詳細については、「IP アドレスホワイトリストの設定」をご参照ください。

    • ご利用の ECI インスタンスが NAT ゲートウェイを使用してパブリックネットワークにアクセスする場合、NAT ゲートウェイの Elastic IP アドレス (EIP) を IP アドレスホワイトリストに追加します。

    • ご利用の ECI インスタンスが EIP を使用してパブリックネットワークにアクセスする場合、ECI インスタンスの EIP を IP アドレスホワイトリストに追加します。

  2. データベースのパブリックエンドポイントを申請して記録します。詳細については、「パブリックエンドポイントの申請または解放」をご参照ください。

RDS に接続するためのアプリケーションの設定

このプロシージャでは、サーバーレス Kubernetes クラスターを内部ネットワーク経由で ApsaraDB RDS インスタンスに接続する方法について説明します。

  1. ACK コンソールにログインします。

  2. クラスター ページで、目的のクラスターを見つけ、その名前をクリックしてクラスター詳細ページを開きます。

  3. ConfigMap を作成して、ApsaraDB RDS の接続情報を保存します。

    説明

    ConfigMap は、環境構成をコンテナイメージから分離します。これにより、アプリケーションの構成更新が簡素化されます。

    1. 左側のナビゲーションウィンドウで、[設定] > [ConfigMap] を選択します。

    2. 作成する をクリックします。

    3. ConfigMap の詳細を入力し、OK をクリックします。

      名前を rds-config に設定し、次のキーと値のペアを追加します。

      パラメーター

      説明

      host

      rm-2zem97a62s9******.mysql.rds.aliyuncs.com

      データベースエンドポイント。ApsaraDB RDS インスタンスのデータベースの接続ページで確認できます。

      port

      3306

      データベースのポートです。ApsaraDB RDS インスタンスの データベースの接続 ページで確認できます。

      database

      test-db

      データベース名。ApsaraDB RDS インスタンスの データベース管理 ページで確認できます。

  4. Secret を作成して、データベースのユーザー名とパスワードを保存します。

    説明

    Secret の使用は、アプリケーションのデータベース認証情報などの機密情報を安全に管理するためのベストプラクティスです。

    1. 左側のナビゲーションウィンドウで、[設定] > [Secret] を選択します。

    2. 作成する をクリックします。

    3. シークレットの詳細を入力し、OK をクリックします。

      名前を rds-secret に設定し、次のキーと値のペアを追加します。

      パラメーター

      説明

      username

      test

      データベースユーザー名です。ApsaraDB RDS インスタンスの アカウント管理 ページで確認できます。

      password

      pwd******

      データベースのパスワードです。パスワードを忘れた場合は、お使いの ApsaraDB RDS インスタンスの アカウント管理 ページでリセットしてください。

  5. ECI Pod を作成して接続をテストします。

    1. 左側のナビゲーションウィンドウで、[ワークロード] > [Pod] を選択します。

    2. YAML のリソースの作成 をクリックします。

    3. YAML 構成を入力し、作成する をクリックします。

      ApsaraDB RDS は、ネイティブのデータベースサービスと完全に互換性があります。任意の標準的なデータベースクライアントを使用して、ApsaraDB RDS インスタンスに接続できます。次の YAML ファイルは一例です。

      説明

      この例を使用するには、まず ApsaraDB RDS インスタンスに username という名前のテーブルを作成し、そのテーブルに user という名前の列を作成する必要があります。

      次の YAML 構成では、環境変数を使用して、エンドポイント、ポート、名前、ユーザー名、パスワードといったデータベース接続の詳細を提供します。コンテナイメージには、データベースに接続してデータを挿入する Python スクリプトが含まれています。

      apiVersion: v1
      kind: Pod
      metadata:
        labels:
          name: rds-test
        name: rds-test
      spec:
        containers:
        - name: test-rds
          image: registry.cn-hangzhou.aliyuncs.com/eci_open/sqlclient:1.0.1  # データベースに接続するための Python スクリプトを含むコンテナイメージ。
          imagePullPolicy: IfNotPresent
          command: ["/bin/bash","-c","python3 /testapp/mysqlclient.py"]
          env:
          - name: MYSQL_HOST 
            valueFrom:
              configMapKeyRef:
                name: rds-config  # ConfigMap の名前。
                key: host  # ConfigMap 内のキー。
          - name: MYSQL_PORT
            valueFrom:
              configMapKeyRef:
                name: rds-config # ConfigMap の名前。
                key: port # ConfigMap 内のキー。
          - name: MYSQL_DB
            valueFrom:
              configMapKeyRef:
                name: rds-config  # ConfigMap の名前。
                key: database # ConfigMap 内のキー。
          - name: MYSQL_USERNAME
            valueFrom:
              secretKeyRef:
                name: rds-secret # Secret の名前。
                key: username  # Secret 内のキー。
          - name: MYSQL_PWD
            valueFrom:
              secretKeyRef:
                name: rds-secret # Secret の名前。
                key: password # Secret 内のキー。
        restartPolicy: Never

      上記の例のイメージには、username テーブルの user 列に行を挿入する Python スクリプト (mysqlclient.py) が含まれています。スクリプトは次のとおりです。

      import pymysql
      import os
      import time
      config = {
          'host': str(os.getenv('MYSQL_HOST')),
          'port': int(os.getenv('MYSQL_PORT')),
          'user': str(os.getenv('MYSQL_USERNAME')),
          'password': str(os.getenv('MYSQL_PWD')),
          'database': str(os.getenv('MYSQL_DB')),
      }
      def mysqlClient():
          print("データベースに接続しています...")
          db = pymysql.connect(**config)
          try:
              cursor = db.cursor()
              cursor.execute("INSERT INTO username(user) VALUES('Mrs')")
              cursor.close()
              db.commit()
              cursor = db.cursor()
              cursor.execute("SELECT user FROM username")
              result = cursor.fetchall()
              cursor.close()
              if result != None:
                  print(result)
                  time.sleep(99999)
          except Exception as e:
              print('システムエラー: ', e)
          finally:
              db.close()
      if __name__ == '__main__':
          mysqlClient()
  6. データベースにログインして結果を確認します。

    1. ApsaraDB RDS コンソールにログインします。

    2. 左側のナビゲーションウィンドウで、インスタンス をクリックします。 上部のナビゲーションバーで、インスタンスが配置されているリージョンを選択し、インスタンス ID をクリックします。

    3. 左側のナビゲーションウィンドウで、データベース管理をクリックします。

    4. 対象のデータベースを見つけ、[操作] 列のSQL クエリをクリックします。

    5. 表示されたダイアログボックスで、データベースのユーザー名とパスワードを入力し、ログイン をクリックします。

    6. SQL コマンドを実行して結果を確認します。

      SELECT * FROM `username` コマンドを実行します。出力には、username テーブルの user 列に新しい行が表示されます。

よくある質問

データベース接続の失敗には、一般的に次のような原因が考えられます。

  • ネットワークタイプが異なる

  • VPC が異なる

  • ドメイン名の名前解決の失敗またはエラー

  • リージョンが異なる

  • IP アドレスホワイトリストの構成が正しくない

  • 読み取り専用インスタンスのホワイトリストが設定されていない

  • 内部エンドポイントまたはパブリックエンドポイントの使い方が正しくない

  • 接続数の上限に達した

  • ユーザー名またはパスワードが正しくない

  • エンドポイントを解決できない

ご利用のネットワーク環境 (内部ネットワークまたはパブリックネットワーク) に基づいて問題をトラブルシューティングしてください。詳細については、「ApsaraDB RDS 接続の失敗のトラブルシューティング」をご参照ください。