Aurora DSQL の開始方法 - Amazon Aurora DSQL

Amazon Aurora DSQL はプレビューサービスとして提供されています。詳細については、「AWS サービス規約」の「ベータ版とプレビュー」を参照してください。

Aurora DSQL の開始方法

以下のセクションでは、単一リージョンおよびマルチリージョンの Aurora DSQL クラスターを作成し、それらに接続して、サンプルスキーマを作成してロードする方法について説明します。AWS Management Consoleを使用してクラスターにアクセスし、psql ユーティリティを使用してデータベースを操作します。

前提条件

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

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

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

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

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

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

    python3 --version psql --version

    AWS CLI を別の環境で使用する場合は、Python v3.8 以降と psql v14 以降を手動で設定してください。

  • AWS CloudShell を使用して Aurora DSQL にアクセスする場合、Python v3.8 以降と psql v14 以降が追加の設定なしで提供されます。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 からアクセスできます。コンソールでは、次のアクションを実行できます。

クラスターを作成する

単一リージョンまたは複数リージョンのクラスターを作成できます。

クラスターに接続する

IAM ID にアタッチされたポリシーと一致する認証オプションを選択します。認証トークンをコピーし、クラスターに接続するときにパスワードとして指定します。管理者として接続すると、コンソールは IAM アクション dsql:DbConnectAdmin を使用してトークンを作成します。カスタムデータベースロールを使用して接続すると、コンソールは IAM アクション dsql:DbConnect を使用してトークンを作成します。

クラスターを変更する

削除保護を有効または無効にすることができます。削除保護が有効になっている場合、クラスターを削除することはできません。

クラスターを削除

このアクションを元に戻すことはできません。また、データを取得することもできません。

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

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

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

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

psql ユーティリティは、PostgreSQL へのターミナルベースのフロントエンドです。これにより、クエリをインタラクティブに入力し、PostgreSQL に発行して、クエリ結果を表示できます。psql の詳細については、「https://www.postgresql.org/docs/current/app-psql.htm」を参照してください。PostgreSQL が提供するインストーラをダウンロードするには、「PostgreSQL Downloads」を参照してください。

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. Host - クラスターエンドポイントを使用します。

      Databasepostgres と入力します。

      Authentication - Database Native を選択します。

      Username - admin と入力します。

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

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

    注記

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

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

重要

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

認証情報の有効期限

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

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

      Database - Aurora DSQL は PostgreSQL のデフォルトの postgres を使用します

      Authentication - User & Password を選択します。

      Username - admin と入力します。

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

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

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

    注記

    クライアント接続で 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 の基本単位は、データを保存するクラスターです。このタスクでは、単一のリージョンにクラスターを作成します。

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

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

  3. 削除保護やタグなど、必要な設定を構成します。

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

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

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

認証トークンを使用してクラスターに接続するには
  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 番目のクラスターを作成する別のリージョンです。Aurora DSQL は、元のクラスターに対するすべての書き込みをピア接続クラスターにレプリケートします。任意のピア接続クラスターで読み取りと書き込みが可能です。

  • 監視リージョン

    このリージョンは、ピア接続クラスターに書き込まれるすべてのデータを受け取りますが、書き込むことはできません。監視リージョンは、暗号化されたトランザクションログの限られたウィンドウを保存します。Aurora DSQL はこれらの機能を使用して、マルチリージョンの耐久性と可用性を提供します。

次の例は、クロスリージョン書き込みレプリケーションと、両方のリージョンエンドポイントからの一貫した読み取りを示しています。

新しいクラスターを作成し、マルチリージョンに接続するには
  1. Aurora DSQL コンソールで、[クラスター] ページに移動します。

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

  3. [ピア接続リージョンを追加] を選択します。

  4. [ピア接続クラスターリージョン] からピア接続クラスターのリージョンを選択します。

  5. 監視リージョンとして [us-west-2] を選択します。

    注記

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

  6. 削除保護やタグなどの追加設定を選択します。

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

  8. 2 つのブラウザタブで (https://console.aws.amazon.com/cloudshell) から AWS CloudShell コンソールを開きます。us-east-1 で 1 つの環境を開き、us-east-2 で別の環境を開きます。

  9. Aurora DSQL コンソールで、作成したピア接続クラスターを選択します。

  10. [ピア接続リージョン] 列でピアを選択します。

  11. ピア接続クラスターにエンドポイントをコピーします。

  12. us-east-2 CloudShell 環境で psql を起動し、ピア接続クラスターに接続します。

    export PGSSLMODE=require \ psql --dbname postgres \ --username admin \ --host replace_with_your_cluster_endpoint_in_us-east-2
1 つのリージョンに書き込み、2 番目のリージョンから読み取るには
  1. us-east-2 CloudShell 環境で、「ステップ 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 invoice_created_idx on example.invoice(created); CREATE TABLE example.department(id INT PRIMARY KEY UNIQUE, name text, email text);
  2. psql メタコマンドを使用してサンプルデータをロードします。詳細については、「ステップ 3: Aurora DSQL でサンプル SQL コマンドを実行する」を参照してください。

    \copy example.invoice(created, purchaser, amount) from samples/invoice.csv csv \include samples/department-insert-multirow.sql
  3. us-east-1 CloudShell 環境で、別のリージョンから挿入したデータをクエリします。

    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;