Aurora DSQL の開始方法 - Amazon Aurora DSQL

Aurora DSQL の開始方法

Amazon Aurora DSQL は、トランザクションワークロード用に最適化されたサーバーレスの分散リレーショナルデータベースです。以下のセクションでは、単一リージョンおよびマルチリージョンの Aurora DSQL クラスターを作成し、それらに接続して、サンプルスキーマを作成してロードする方法について説明します。AWS Management Consoleを使用してクラスターにアクセスし、psql ユーティリティを使用してデータベースを操作します。最終的に、動作中の Aurora DSQL クラスターがセットアップされ、テストまたは本番ワークロードで使用できるようになります。

前提条件

Aurora DSQL の使用を開始する前に、以下の前提条件を満たしていることを確認してください。

  • IAM ID には、AWS Management Consoleにサインインするためのアクセス許可が必要です。

  • IAM ID は、以下のいずれかの条件を満たしている必要があります。

    • AWS アカウント内の任意のリソースに対して任意のアクションを実行できるアクセス許可

    • IAM アクセス許可 iam:CreateServiceLinkedRole と IAM ポリシーアクション dsql:* へのアクセス許可

  • Unix 系環境で AWS CLI を使用する場合は、Python バージョン 3.8 以降と psql バージョン 14 以降がインストールされていることを確認してください。アプリケーションのバージョンを確認するには、以下のコマンドを実行します。

    python3 --version psql --version

    AWS CLI を別の環境で使用する場合は、Python バージョン 3.8 以降と psql バージョン 14 以降を手動で設定してください。

  • AWS CloudShell を使用して Aurora DSQL にアクセスする場合、Python バージョン 3.8 以降と psql バージョン 14 以降が追加の設定なしで提供されます。AWS CloudShell の詳細については、「AWS CloudShell とは」をご参照ください。

  • GUI を使用して Aurora DSQL にアクセスする場合は、DBeaver または JetBrains DataGrip を使用します。詳細については、「DBeaver を使用した Aurora DSQL へのアクセス」および「JetBrains DataGrip を使用した Aurora DSQL へのアクセス」を参照してください。

Aurora DSQL へのアクセス

Aurora DSQL には、以下の方法でアクセスできます。CLI、API、SDK の使用方法については、「Aurora DSQL へのアクセス」を参照してください。

AWS Management Console 経由での Aurora DSQL へのアクセス

Aurora DSQL のAWS Management Consoleには、https://console.aws.amazon.com/dsql からアクセスできます。

SQL クライアントを使用した Aurora DSQL へのアクセス

Aurora DSQL は PostgreSQL プロトコルを使用します。クラスターに接続するときに、署名付き IAM 認証トークンをパスワードとして指定して、任意のインタラクティブクライアントを使用できます。認証トークンは、Aurora DSQL が AWS 署名バージョン 4 を使用して動的に生成する一意の文字列です。

Aurora DSQL はトークンを認証にのみ使用します。トークンは、接続が確立された後は接続に影響を与えません。期限切れのトークンを使用して再接続しようとすると、接続リクエストは拒否されます。詳細については、「Amazon Aurora DSQL での認証トークンの生成」を参照してください。

psql (PostgreSQL インタラクティブターミナル) を使用した Aurora DSQL へのアクセス

psql ユーティリティは、PostgreSQL へのターミナルベースのフロントエンドです。これにより、クエリをインタラクティブに入力し、PostgreSQL に発行して、クエリ結果を表示できます。クエリの応答時間を改善するには、PostgreSQL バージョン 17 クライアントを使用します。

PostgreSQL のダウンロードページからオペレーティングシステムのインストーラーをダウンロードします。psql の詳細については、「https://www.postgresql.org/docs/current/app-psql.htm」を参照してください。

AWS CLI が既にインストールされている場合は、次の例を使用してクラスターに接続します。psql がプリインストールされている AWS CloudShell を使用することも、psql を直接インストールすることもできます。

# Aurora DSQL requires a valid IAM token as the password when connecting. # Aurora DSQL provides tools for this and here we're using Python. export PGPASSWORD=$(aws dsql generate-db-connect-admin-auth-token \ --region us-east-1 \ --expires-in 3600 \ --hostname your_cluster_endpoint) # Aurora DSQL requires SSL and will reject your connection without it. export PGSSLMODE=require # Connect with psql, which automatically uses the values set in PGPASSWORD and PGSSLMODE. # Quiet mode suppresses unnecessary warnings and chatty responses but still outputs errors. psql --quiet \ --username admin \ --dbname postgres \ --host your_cluster_endpoint

DBeaver を使用した Aurora DSQL へのアクセス

DBeaver は、オープンソースの GUI ベースのデータベースツールです。これを使用してデータベースに接続し、管理することができます。DBeaver をダウンロードするには、DBeaver Community ウェブサイトの「download page」を参照してください。次の手順では、DBeaver を使用してクラスターに接続する方法について説明します。

DBeaver で新しい Aurora DSQL 接続を設定するには
  1. [新しいデータベース接続] を選択します。

  2. [新しいデータベース接続] ウィンドウで、[PostgreSQL] を選択します。

  3. [接続の設定/メイン] タブで、[接続方法: ホスト] を選択し、次の情報を入力します。

    1. ホスト - クラスターエンドポイントを使用します。

      データベースpostgres と入力します。

      認証 - Database Native を選択します。

      ユーザー名 - admin と入力します。

      パスワード - 認証トークンを生成します。生成されたトークンをコピーし、パスワードとして使用します。

  4. 警告が表示された場合は無視し、認証トークンを [DBeaver Password] フィールドに貼り付けます。

    注記

    クライアント接続で SSL モードを設定する必要があります。Aurora DSQL は SSLMODE=require をサポートしています。Aurora DSQL はサーバー側で SSL 通信を強制し、SSL 以外の接続を拒否します。

  5. クラスターに接続し、SQL ステートメントの実行を開始できます。

重要

DBeaver が PostgreSQL データベース向けに提供する管理機能 (Session ManagerLock Manager など) は、独自のアーキテクチャのため、データベースには適用されません。これらの画面はアクセス可能ですが、データベースのヘルスやステータスに関する信頼できる情報を提供しません。

DBeaver の認証情報の有効期限

確立されたセッションは、最大 1 時間、または DBeaver によって切断されるかタイムアウトが発生するまで認証されたままになります。新しい接続を確立する場合は、[接続設定][パスワード] フィールドに有効な認証トークンを指定する必要があります。新しいセッション (新しいテーブルの一覧表示や新しい SQL コンソールなど) を開こうとすると、新しい認証が強制的に試行されます。[接続設定] で設定された認証トークンが無効になった場合、その新しいセッションは失敗し、DBeaver は以前に開かれたすべてのセッションを無効にします。expires-in オプションを使用して IAM 認証トークンの有効期間を選択するときは、この点に注意してください。

JetBrains DataGrip を使用した Aurora DSQL へのアクセス

JetBrains DataGrip は、PostgreSQL を含む SQL とデータベースを操作するためのクロスプラットフォーム IDE です。DataGrip には、インテリジェントな SQL エディタを備えた堅牢な GUI が搭載されています。DataGrip をダウンロードするには、JetBrains ウェブサイトのダウンロードページにアクセスしてください。

JetBrains DataGrip で新しい Aurora DSQL 接続を設定するには
  1. [新しいデータソース] を選択し、[PostgreSQL] を選択します。

  2. [データソース/全般] タブに、次の情報を入力します。

    1. ホスト - クラスターエンドポイントを使用します。

      ポート - Aurora DSQL は PostgreSQL のデフォルトを使用します: 5432

      データベース - Aurora DSQL は PostgreSQL のデフォルトの postgres を使用します。

      認証 - User & Password を選択します。

      ユーザー名 - admin と入力します。

      パスワード - トークンを生成し、このフィールドに貼り付けます。

      URL - このフィールドは変更しないでください。他のフィールドに基づいて自動的に入力されます。

  3. パスワード - 認証トークンを生成してこれを指定します。トークンジェネレーターの結果出力をコピーし、[パスワード] フィールドに貼り付けます。

    注記

    クライアント接続で SSL モードを設定する必要があります。Aurora DSQL は PGSSLMODE=require をサポートしています。Aurora DSQL はサーバー側で SSL 通信を強制し、SSL 以外の接続を拒否します。

  4. クラスターに接続し、SQL ステートメントの実行を開始できます。

重要

DataGrip が PostgreSQL データベース向けに提供する一部のビュー (Sessions など) は、独自のアーキテクチャのため、データベースには適用されません。これらはアクセス可能ですが、データベースに接続されている実際のセッションに関する信頼できる情報は提供されません。

認証情報の有効期限

確立されたセッションは、最大 1 時間、または明示的な切断またはクライアント側のタイムアウトが発生するまで認証されたままになります。新しい接続を確立する必要がある場合は、新しい認証トークンを生成し、[データソースプロパティ][パスワード] フィールドに指定する必要があります。新しいセッション (新しいテーブルの一覧表示や新しい SQL コンソールなど) を開こうとすると、新しい認証が強制的に試行されます。[接続] 設定で設定された認証トークンが無効になった場合、その新しいセッションは失敗し、以前に開かれたすべてのセッションは無効になります。

Aurora DSQL での PostgreSQL プロトコルの使用

PostgreSQL は、クライアントとサーバー間の通信にメッセージベースのプロトコルを使用します。プロトコルは、TCP/IP および Unix ドメインソケットの両方でサポートされています。次の表は、Aurora DSQL が PostgreSQL プロトコルをどのようにサポートしているかを示しています。

PostgreSQL Aurora DSQL メモ
ロール (ユーザーまたはグループとも呼ばれます) データベースロール Aurora DSQL は、admin という名前のロールを作成します。カスタムデータベースロールを作成する場合は、admin ロールを使用して、それをクラスターへの接続時の認証に使用する IAM ロールに関連付ける必要があります。詳細については、「カスタムデータベースロールを設定する」を参照してください。
ホスト (hostname または hostspec とも呼ばれます) クラスターエンドポイント Aurora DSQL の単一リージョンクラスターは、単一のマネージドエンドポイントを提供し、リージョン内で利用できない場合はトラフィックを自動的にリダイレクトします。
ポート 該当なし - デフォルトの 5432 を使用 これは PostgreSQL のデフォルトです。
データベース (dbname) postgres を使用 Aurora DSQL は、クラスターの作成時にこのデータベースを作成します。
SSL モード SSL は常にサーバー側で有効 Aurora DSQL では、Aurora DSQL は require SSL モードをサポートしています。SSL を使用しない接続は Aurora DSQL によって拒否されます。
パスワード 認証トークン Aurora DSQL には、存続期間の長いパスワードの代わりに一時的な認証トークンが必要です。詳細についてはAmazon Aurora DSQL での認証トークンの生成を参照してください。

ステップ 1: Aurora DSQL 単一リージョンクラスターを作成する

Aurora DSQL の基本単位は、データを保存するクラスターです。このタスクでは、単一の AWS リージョンにクラスターを作成します。

Aurora DSQL で単一リージョンクラスターを作成するには
  1. AWS Management Consoleにサインインし、https://console.aws.amazon.com/dsql で Aurora DSQL コンソールを開きます。

  2. [クラスターを作成] を選択し、[シングルリージョン] を選択します。

  3. (オプション) [クラスター設定] で、次のいずれかのオプションを選択します。

    • [暗号化の設定をカスタマイズ (詳細設定)] を選択して、AWS KMS keyを選択または作成します。

    • 削除オペレーションでクラスターが削除されないようにするために、[削除保護を有効にする] を選択します。デフォルトでは、削除保護が選択されています。

  4. (オプション) [タグ] で、このクラスターのタグを選択または入力します。

  5. [クラスターを作成] を選択します。

ステップ 2: Aurora DSQL クラスターに接続する

クラスターエンドポイントは、クラスター ID とリージョンに基づいて Aurora DSQL クラスターを作成すると自動的に生成されます。名前の形式は clusterid.dsql.region.on.aws です。クライアントはエンドポイントを使用して、クラスターへのネットワーク接続を作成します。

認証は IAM を使用して管理されるため、データベースに認証情報を保存する必要はありません。認証トークンは動的に生成される一意の文字列です。トークンは認証にのみ使用され、確立後の接続には影響しません。接続を試みる前に、「前提条件」で説明されているように、IAM ID に dsql:DbConnectAdmin アクセス許可があることを確認してください。

注記

データベース接続速度を最適化するには、PostgreSQL バージョン 17 クライアントを使用し、PGSSLNEGOTIATION を direct に設定します: PGSSLNEGOTIATION=direct

認証トークンを使用してクラスターに接続するには
  1. Aurora DSQL コンソールで、接続先のクラスターを選択します。

  2. [接続] を選択します。

  3. [エンドポイント (ホスト)] からエンドポイントをコピーします。

  4. [認証トークン (パスワード)] セクションで、[管理者として接続] が選択されていることを確認します。

  5. 生成された認証トークンをコピーします。このトークンの有効期間は 15 分です。

  6. オペレーティングシステムのコマンドラインで、次のコマンドを使用して psql を起動し、クラスターに接続します。your_cluster_endpoint を、先ほどコピーしたクラスターエンドポイントに置き換えます。

    PGSSLMODE=require \ psql --dbname postgres \ --username admin \ --host your_cluster_endpoint

    パスワードの入力を求められたら、先ほどコピーした認証トークンを入力します。期限切れのトークンを使用して再接続しようとすると、接続リクエストは拒否されます。詳細については、「Amazon Aurora DSQL での認証トークンの生成」を参照してください。

  7. [Enter] キーを押します。PostgreSQL プロンプトが表示されます。

    postgres=>

    アクセス拒否エラーが発生した場合は、IAM ID に dsql:DbConnectAdmin アクセス許可があることを確認してください。アクセス許可があるにもかかわらずアクセス拒否エラーが引き続き発生する場合は、「IAM をトラブルシューティングする」および「IAM ポリシーで、アクセス拒否または操作が許可されていないことを示すエラーをトラブルシューティングする方法を教えてください」を参照してください。

ステップ 3: Aurora DSQL でサンプル SQL コマンドを実行する

SQL ステートメントを実行して Aurora DSQL クラスターをテストします。次のサンプルステートメントには、department-insert-multirow.sql および invoice.csv という名前のデータファイルが必要です。これらのファイルは、GitHub の aws-samples/aurora-dsql-samples リポジトリからダウンロードできます。

Aurora DSQL でサンプル SQL コマンドを実行するには
  1. example という名前のスキーマを作成します。

    CREATE SCHEMA example;
  2. 自動的に生成された UUID をプライマリキーとして使用する請求書テーブルを作成します。

    CREATE TABLE example.invoice( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), created timestamp, purchaser int, amount float);
  3. 空のテーブルを使用するセカンダリインデックスを作成します。

    CREATE INDEX ASYNC invoice_created_idx on example.invoice(created);
  4. 部門テーブルを作成します。

    CREATE TABLE example.department(id INT PRIMARY KEY UNIQUE, name text, email text);
  5. psql \include コマンドを使用して、GitHub の aws-samples/aurora-dsql-samples リポジトリからダウンロードした department-insert-multirow.sql という名前のファイルをロードします。my-path をローカルコピーへのパスに置き換えます。

    \include my-path/department-insert-multirow.sql
  6. psql \copy コマンドを使用して、GitHub の aws-samples/aurora-dsql-samples リポジトリから、ダウンロードした invoice.csv という名前のファイルをロードします。my-path をローカルコピーへのパスに置き換えます。

    \copy example.invoice(created, purchaser, amount) from my-path/invoice.csv csv
  7. 部門をクエリし、合計売上でソートします。

    SELECT name, sum(amount) AS sum_amount FROM example.department LEFT JOIN example.invoice ON department.id=invoice.purchaser GROUP BY name HAVING sum(amount) > 0 ORDER BY sum_amount DESC;

    次の出力例は、部門 3 の売上が最も多いことを示しています。

    name | sum_amount --------------------------+-------------------- Example Department Three | 54061.67752854594 Example Department Seven | 53869.65965365204 Example Department Eight | 52199.73742066634 Example Department One | 52034.078869900826 Example Department Six | 50886.15556256385 Example Department Two | 50589.98422247931 Example Department Five | 49549.852635496005 Example Department Four | 49266.15578027619 (8 rows)

ステップ 4: マルチリージョンクラスターを作成する

マルチリージョンクラスターを作成する際は、以下のリージョンを指定します。

リモートリージョン

これは、2 番目のクラスターを作成するリージョンです。このリージョンに 2 番目のクラスターを作成し、最初のクラスターにピア接続します。Aurora DSQL は、最初のクラスターに対するすべての書き込みをリモートクラスターにレプリケートします。任意のクラスターで読み取りと書き込みが可能です。

ウィットネスリージョン

このリージョンは、マルチリージョンクラスターに書き込まれるすべてのデータを受け取ります。ウィットネスリージョンはクライアントエンドポイントをホストせず、ユーザーデータアクセスも提供しません。暗号化されたトランザクションログの制限されたウィンドウが、監視リージョンで保持されます。このログにより、復旧が容易になり、リージョンが利用できない場合のトランザクションクォーラムがサポートされます。

次の例は、最初のクラスターを作成し、別のリージョンに 2 番目のクラスターを作成し、2 つのクラスターをピアリングしてマルチリージョンクラスターを作成する方法を示しています。さらに、クロスリージョン書き込みレプリケーションと、両方のリージョンエンドポイントからの一貫した読み取りも示しています。

マルチリージョンクラスターを作成するには
  1. AWS Management Consoleにサインインし、https://console.aws.amazon.com/dsql で Aurora DSQL コンソールを開きます。

  2. ナビゲーションペインで [Clusters] (クラスター) を選択してください。

  3. [クラスターを作成] を選択し、[マルチリージョン] を選択します。

  4. (オプション) [クラスター設定] で、最初のクラスターに次のいずれかのオプションを選択します。

    • [暗号化の設定をカスタマイズ (詳細設定)] を選択して、AWS KMS keyを選択または作成します。

    • 削除オペレーションでクラスターが削除されないようにするために、[削除保護を有効にする] を選択します。デフォルトでは、削除保護が選択されています。

  5. [マルチリージョン設定] で、最初のクラスターに次のオプションを選択します。

    • [ウィットネスリージョン] で、リージョンを選択します。現在、マルチリージョンクラスターのウィットネスリージョンでは、米国を拠点とするリージョンのみがサポートされています。

    • (オプション) [リモートリージョンクラスター ARN] に、別のリージョンにある既存のクラスターの ARN を入力します。マルチリージョンクラスターの 2 番目のクラスターとして機能するクラスターが存在しない場合は、最初のクラスターを作成した後にセットアップを完了します。

  6. (オプション) 最初のクラスターのタグを選択します。

  7. 最初のクラスターを作成するには、[クラスターの作成] を選択します。前のステップで ARN を入力しなかった場合、コンソールには [クラスターのセットアップは保留中です] の通知が表示されます。

  8. [クラスターのセットアップは保留中です] の通知で、[マルチリージョンクラスターのセットアップを完了する] を選択します。このアクションにより、別のリージョンで 2 番目のクラスターの作成が開始されます。

  9. 2 番目のクラスターについて、次のいずれかのオプションを選択します。

    • リモートリージョンクラスター ARN を追加する – クラスターが存在し、マルチリージョンクラスターの 2 番目のクラスターにする場合は、このオプションを選択します。

    • 別のリージョンでクラスターを作成する – 2 番目のクラスターを作成するには、このオプションを選択します。[リモートリージョン] で、この 2 番目のクラスターのリージョンを選択します。

  10. [your-second-region でクラスターを作成する] を選択します。ここで、your-second-region は 2 番目のクラスターの場所です。コンソールが 2 番目のリージョンで開きます。

  11. (オプション) 2 番目のクラスターのクラスター設定を選択します。例えば、AWS KMS keyを選択できます。

  12. 2 番目のクラスターを作成するには、[クラスターの作成] を選択します。

  13. [initial-cluster-region でピアリングする] を選択します。ここで、initial-cluster-region は作成した最初のクラスターをホストするリージョンです。

  14. プロンプトが表示されたら、[確認] を選択します。このステップで、マルチリージョンクラスターの作成を完了します。

2 番目のクラスターに接続してするには
  1. Aurora DSQL コンソールを開き、2 番目のクラスターのリージョンを選択します。

  2. [クラスター] を選択します。

  3. マルチリージョンクラスター内の 2 番目のクラスターの行を選択します。

  4. [アクション] で、[CloudShell で開く] を選択します。

  5. [管理者として接続] を選択します。

  6. [CloudShell の起動] を選択します。

  7. [Run] (実行) を選択します。

  8. ステップ 3: Aurora DSQL でサンプル SQL コマンドを実行する」の手順に従って、サンプルスキーマを作成します。

    トランザクションの例

    CREATE SCHEMA example; CREATE TABLE example.invoice(id UUID PRIMARY KEY DEFAULT gen_random_uuid(), created timestamp, purchaser int, amount float); CREATE INDEX ASYNC invoice_created_idx on example.invoice(created); CREATE TABLE example.department(id INT PRIMARY KEY UNIQUE, name text, email text);
  9. psql copy および include コマンドを使用してサンプルデータをロードします。詳細については、「ステップ 3: Aurora DSQL でサンプル SQL コマンドを実行する」を参照してください。

    \copy example.invoice(created, purchaser, amount) from samples/invoice.csv csv \include samples/department-insert-multirow.sql
初期クラスターをホストするリージョンから 2 番目のクラスターのデータをクエリするには
  1. Aurora DSQL コンソールで、最初のクラスターのリージョンを選択します。

  2. [クラスター] を選択します。

  3. マルチリージョンクラスター内の 2 番目のクラスターの行を選択します。

  4. [アクション] で、[CloudShell で開く] を選択します。

  5. [管理者として接続] を選択します。

  6. [CloudShell の起動] を選択します。

  7. [Run] (実行) を選択します。

  8. 2 番目のクラスターに挿入したデータをクエリします。

    SELECT name, sum(amount) AS sum_amount FROM example.department LEFT JOIN example.invoice ON department.id=invoice.purchaser GROUP BY name HAVING sum(amount) > 0 ORDER BY sum_amount DESC;