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

PolarDB:DynamoDB 互換機能の使用

最終更新日:Mar 29, 2026

PolarDB for PostgreSQL は DynamoDB API をサポートしており、DynamoDB 互換のクライアントや SDK を直接 PolarDB クラスターに接続できます。標準的な DynamoDB の操作であれば、コードの変更は不要です。

このガイドでは、以下の 5 つのステップでセットアップ全体を説明します。

  1. バージョン要件の確認

  2. DynamoDB 互換機能の有効化

  3. DynamoDB エンドポイントの設定

  4. DynamoDB アカウントの作成

  5. ネットワークアクセスの設定と接続の確認

前提条件

開始する前に、ご利用のクラスターが以下の要件を満たしていることを確認してください。

  • カーネルバージョン:PostgreSQL 14、リビジョンバージョン 2.0.14.17.35.0 以降

  • データベースプロキシバージョン:2.3.59 以降

  • クラスタータイプ:標準クラスターのみ。PolarDB for PostgreSQL 分散版およびサーバーレスクラスターはサポートされていません

クラスターのバージョンを確認するには、PolarDBコンソールで、[設定と管理][バージョン管理]マイナーバージョンをスペックアップしてください。

DynamoDB 互換機能の有効化

既存のクラスターでこの機能を有効にするか、新規クラスターの作成時に選択します。

既存のクラスターの場合

クラスターの[基本情報]ページで、[DynamoDB 互換性]設定項目を見つけ、[オン]をクリックします。

image

新規クラスターの作成

  1. PolarDB クラスターのカスタム購入ページに移動します。

  2. [データベースエンジン]PostgreSQL 14 に設定し、[DynamoDB 互換性] を選択します。

  3. 必要に応じて、リージョン、ゾーン、ノードスペックを設定します。

image

DynamoDB エンドポイントの設定

この機能を有効化すると、システムにより、[基本情報] ページの [データベース接続] セクションにデフォルトの DynamoDB エンドポイントが自動的に作成されます。

image

(任意) [カスタムクラスターエンドポイントの作成] をクリックし、[エンドポイントタイプ][DynamoDB エンドポイント] に設定します。カスタムエンドポイントを使用すると、アタッチするノードおよび読み取り整合性レベルを事前に指定できます。

カスタムエンドポイントで設定された整合性レベルは、そのエンドポイントへのすべての読み取りリクエストに適用されます。個別の API リクエスト内の ConsistentRead=true パラメーターでは、事前に設定された整合性レベルをオーバーライドできません。
image

DynamoDB アカウントの作成

DynamoDB API へのアクセスには、標準のデータベースアカウントではなく、専用の DynamoDB アカウントを使用します。アカウント名がアクセスキー ID として機能し、生成されたキーがシークレットアクセスキーとして機能します。

  1. [設定と管理] > [アカウント] に移動し、[アカウントの作成] をクリックします。

  2. [アカウントの種類][DynamoDB アカウント] に設定し、アカウント名とパスワードを入力します。

    パスワードはコンソールでアカウントを管理するためにのみ使用され、API 認証には適用されません。

    image

  3. アカウントが作成された後、アカウント一覧でそのアカウントを探します。アカウント名は、お客様の AccessKey ID です。 [View][Key] 列でクリックして、Secret Access Key を取得します。

    image

ネットワークアクセスの設定と接続の確認

ネットワークアクセスの設定

アプリケーションが実行されている場所に基づいて接続方法を選択します。

  • プライベート接続 (推奨):アプリケーションが PolarDB クラスターと同じ Virtual Private Cloud (VPC) 内の Alibaba Cloud Elastic Compute Service (ECS) インスタンスで実行されている場合は、ECS インスタンスの IP アドレスまたはセキュリティグループをクラスターのホワイトリストに追加します。

  • インターネット接続: ローカル開発およびテスト用に、[データベース接続] セクションの [基本情報] ページで DynamoDB エンドポイントのインターネットエンドポイントをリクエストします。

    インターネット経由でクラスターにアクセスすると、セキュリティリスクが生じます。インターネットエンドポイントは、一時的な開発およびテスト目的でのみ使用し、完了したらリリースしてください。

    image

Python (Boto3) での接続確認

次の例では、Alibaba Cloud Linux 3.2104 LTS 64 ビットを実行している ECS インスタンスで Boto3 SDK を使用して接続を確認します。

PolarDB の DynamoDB 互換機能に接続する場合、region_name は空文字列 ("") に設定する必要があります。
  1. プロジェクトディレクトリを作成します。

    mkdir /home/testDynamoDB
    cd /home/testDynamoDB
  2. 仮想環境を作成してアクティブ化し、プロジェクトの依存関係を分離します。

    python3 -m venv myenv
    source myenv/bin/activate
  3. Boto3 をインストールします。

    pip3 install boto3
  4. 次のコードで main.py を作成します。endpoint_urlaws_access_key_id、および aws_secret_access_key を、ご利用の PolarDB クラスターのエンドポイントと DynamoDB アカウントの詳細に置き換えます。

    import boto3
    from botocore.exceptions import ClientError
    
    # 1. 接続詳細の設定
    # ご利用の PolarDB クラスターのエンドポイント URL
    endpoint_url = "http://<your-polardb-ddb-endpoint>:<port>"
    # ご利用の DynamoDB アカウントのアクセスキー ID
    aws_access_key_id = "<your-access-key-id>"
    # ご利用の DynamoDB アカウントのシークレットアクセスキー
    aws_secret_access_key = "<your-secret-access-key>"
    # PolarDB の DynamoDB 互換機能の場合、region_name は空文字列にする必要があります。
    region_name = ""
    
    # 2. DynamoDB リソースクライアントの作成
    dynamodb = boto3.resource(
        'dynamodb',
        endpoint_url=endpoint_url,
        aws_access_key_id=aws_access_key_id,
        aws_secret_access_key=aws_secret_access_key,
        region_name=region_name,
    )
    
    table_name = 'usertable'
    
    # 3. データベース操作用の関数の定義
    def create_table():
        """テーブルを作成します。すでに存在する場合は取得します。"""
        try:
            table = dynamodb.create_table(
                TableName=table_name,
                KeySchema=[{'AttributeName': 'userid', 'KeyType': 'HASH'}], # パーティションキー
                AttributeDefinitions=[{'AttributeName': 'userid', 'AttributeType': 'S'}]
                # ProvisionedThroughput は任意であり、PolarDB では無視されます
            )
            print("Creating table... Waiting for it to become active.")
            table.meta.client.get_waiter('table_exists').wait(TableName=table_name)
            print("Table is active!")
            return table
        except ClientError as e:
            if e.response['Error']['Code'] == 'ResourceInUseException':
                print("Table already exists.")
                return dynamodb.Table(table_name)
            else:
                raise
    
    def put_items(table):
        """テーブルにいくつかの項目を挿入します。"""
        users = [
            {'userid': 'user01', 'name': 'Alice', 'age': 24},
            {'userid': 'user02', 'name': 'Bob', 'age': 30},
            {'userid': 'user03', 'name': 'Charlie', 'age': 28}
        ]
        for user in users:
            table.put_item(Item=user)
        print("Inserted 3 items.")
    
    def scan_table(table):
        """テーブル内のすべての項目をスキャンして出力します。"""
        response = table.scan()
        items = response.get('Items', [])
        print(f"Scanned {len(items)} items:")
        for item in items:
            print(item)
    
    def delete_table(table):
        """テーブルを削除します。"""
        table.delete()
        print("Deleting table... Waiting for it to be removed.")
        table.meta.client.get_waiter('table_not_exists').wait(TableName=table_name)
        print("Table deleted successfully.")
    
    # 4. 検証プロセスの実行
    if __name__ == '__main__':
        try:
            user_table = create_table()
            put_items(user_table)
            scan_table(user_table)
        finally:
            # エラーが発生した場合でもテーブルがクリーンアップされるようにします
            if 'user_table' in locals():
                delete_table(user_table)
  5. スクリプトを実行します。このスクリプトは、テーブルを作成し、3 つの項目を挿入し、それらをスキャンしてからテーブルを削除します。

    python3 main.py

    期待される出力は次のとおりです。

    Creating table... Waiting for it to become active.
    Table is active!
    Inserted 3 items.
    Scanned 3 items:
    {'age': Decimal('24'), 'name': 'Alice', 'userid': 'user01'}
    {'age': Decimal('30'), 'name': 'Bob', 'userid': 'user02'}
    {'age': Decimal('28'), 'name': 'Charlie', 'userid': 'user03'}
    Deleting table... Waiting for it to be removed.
    Table deleted successfully.

    この出力は、接続が成功し、すべての設定が正しく機能していることを示します。

次のステップ

  • PolarDB for PostgreSQL でサポートされているDynamoDB API オペレーションをご確認ください。

  • 本番環境のセキュリティを向上させるには、インターネット接続から VPC 内のプライベート接続に切り替えます。

  • 読み取り整合性の動作をカスタマイズするには、カスタム DynamoDB エンドポイントを作成し、アプリケーションの要件に合わせて整合性レベルを設定します。