Amazon Web Services ブログ

AWS CloudFormation で Amazon Redshift 横串検索の採用を加速する

Amazon Redshift 横串検索を使用すると、1 つ以上の Amazon RDS for PostgreSQL および Amazon Aurora PostgreSQL データベースのデータを、Amazon Redshift にすでにあるデータと組み合わせることができます。このようなデータを Amazon S3 データレイクのデータと組み合わせることもできます。

この記事では、10 GB の TPC-H データセットを使用して Aurora PostgreSQL と Amazon Redshift をセットアップし、さらに AWS CloudFormation を使用して Amazon Redshift 横串検索を行う方法を示します。横串検索の使用の詳細については、「Redshift 横串検索を使用して、簡略化された ETL およびライブデータクエリソリューションを構築する」を参照してください。この記事で設定した環境を使用して、前の記事のさまざまなユースケースを試すことができます。

CloudFormation テンプレートを使用する利点

Amazon Redshift 横串検索を設定する標準的なワークフローには、6 つのステップが含まれます。詳細については、「Amazon Redshift 横串検索によるデータのクエリ」を参照してください。CloudFormation テンプレートを使用すると、これらの手動の手順をテキストファイルに記載されているいくつかの手順に要約できます。ファイル内の宣言コードは、作成するリソースの意図した状態をキャプチャし、Amazon Redshift 横串検索をサポートする AWS リソースの作成を自動化できます。このテンプレートをさらに拡張して、インフラストラクチャの唯一の信頼できる情報源にすることができます。

CloudFormation テンプレートはアクセラレータとして機能します。このテンプレートで、複数のリージョンと複数のアカウントにまたがり、最小限の労力と時間で、安全で繰り返し可能な方法でテクノロジーとインフラストラクチャのデプロイを自動化できるようになります。

アーキテクチャの概要

次の図は、ソリューションのアーキテクチャを示しています。

CloudFormation テンプレートは、アーキテクチャ内の次のコンポーネントをプロビジョニングします。

  • VPC
  • サブネット
  • ルートテーブル
  • インターネットゲートウェイ
  • Amazon Linux Bastion ホスト
  • シークレット
  • TPC-H データセットがプリロードされた Aurora PostgreSQL クラスター
  • TPC-H データセットがプリロードされた Amazon Redshift クラスター
  • 必要なアクセス許可を持つ Amazon Redshift IAM ロール

前提条件

AWS CloudFormation でリソースを作成する前に、次の前提条件を満たす必要があります。

  • AWS マネジメントコンソールおよび関連する AWS のサービスと対話するための十分な権限を持つ IAM ユーザーが存在すること。IAM 権限には、CloudFormation テンプレートを介して IAM ロールとポリシーを作成するためのアクセス権も含まれている必要があります。
  • us-east-1 リージョンに Amazon EC2 キーペアを作成したこと。プライベートキーは必ず保存してください。このキーペアの作成時が、保存できる唯一のタイミングです。CloudFormation スタックをセットアップするときに、このキーペアを入力パラメータとして使用します。

AWS CloudFormation によるリソースのセットアップ

この記事では、一般的なガイドとして CloudFormation テンプレートを示します。テンプレートは確認して、ニーズに合わせてカスタマイズできます。このスタックがデプロイするリソースの一部は、使用時にコストが発生します。

リソースを作成するには、次の手順を実行します。

  1. コンソールにサインインします。
  2. スタックを作成する us-east-1 リージョンを選択します。
  3. 次のように、[Launch Stack] を選択します。
  4. [Next] を選択します。これにより、テンプレートを使用して AWS アカウントで AWS CloudFormation が自動的に開始されます。必要に応じて、サインインするように求められます。CloudFormation テンプレートはコンソール内から表示できます。
  5. [Stack name] には、スタック名を入力します。
  6. [Session] では、デフォルトのままにします。
  7. [ec2KeyPair] では、前に作成したキーペアを選択します。
  8. [Next] を選択します。
  9. 次の画面で、[次へ] を選択します。
  10. 最後の画面で詳細を確認し、[I acknowledge that AWS CloudFormation might create IAM resources] を選択します。
  11. [Create] を選択します。スタックの作成には最大 45 分かかる場合があります。
  12. スタックの作成が完了したら、[Outputs] セクションで、以下のコンポーネントのキー値を記録します。これは、後の手順で使用します。
  • AuroraClusterEndpoint
  • AuroraSecretArn
  • RedshiftClusterEndpoint
  • RedshiftClusterRoleArn

これで、Aurora PostgreSQL と Amazon Redshift クラスターの両方にログインし、いくつかの基本的なコマンドを実行してそれらをテストする準備ができました。

Amazon Linux Bastion ホストを使用してクラスターにログインする

次の手順は、SSH クライアントを備えたコンピュータを使用して、Bastion ホストに接続することを前提としています。さまざまなクライアントを使用した接続の詳細については、「Linux インスタンスへの接続」を参照してください。

  1. (先の手順で保存した) EC2 キーペアのシークレットキーを、Amazon Linux Bastion ホストに接続する SSH クライアント上の場所に移動します。
  2. 次のコードを使用してプライベートキーの権限を変更し、公開されないようにします。chmod 400<private key file name; for example, bastion-key.pem>
  3. Amazon EC2 コンソールで、[Instances] を選択します。
  4. CloudFormation スタックで作成した Amazon Linux Bastion ホストを選択します。
  5. [Connect] を選択します。
  6. [SSHCommand] 値をコピーします。
  7. SSH クライアントで、ディレクトリを EC2 プライベートキーを保存した場所に変更し、SSHCommand 値を貼り付けます。
  8. コンソールで、Secrets Manager ダッシュボードを開きます。
  9. シークレット secretAuroraMasterUser-* を選択します。
  10. [Retrieve secret value] を選択します。
  11. Secret key/value のパスワードを記録します。これは、Aurora PostgreSQL クラスターへのログインに使用します。
  12. シークレット SecretRedshiftMasterUser を選択します。
  13. [Retrieve secret value] を選択します。
  14. [Secret key/value] のパスワードを記録します。これは、Amazon Redshift クラスターへのログインに使用します。
  15. PSQL クライアントを使用して、Aurora PostgreSQL と Amazon Redshift データベースの両方にログインします。CloudFormation テンプレートは、Amazon Linux Bastion ホストに PSQL クライアントバイナリをすでに設定しています。
  16. Bastion ホストのコマンドプロンプトに次のコードを入力します (<RedshiftClusterEndpoint> を AWS CloudFormation の出力の値と置き換えます):psql -h <RedshiftClusterEndpoint> -d dev -p 5439 -U fqdemo
  17. プロンプトが表示されたら、前に記録したデータベースユーザーのパスワードを入力します。
  18. 次の SQL コマンドを入力します。
    select "table" from svv_table_info where schema='public';

    次の 8 つのテーブルが出力として表示されます。

    dev=# select "table" from svv_table_info where schema='public';
     table   
    ----------
     orders
     customer
     region
     nation
     supplier
     part
     lineitem
     partsupp
    (8 rows)
  19. Bastion ホストの別のコマンドプロンプトセッションを起動し、次のコードを入力します (<AuroraClusterEndpoint> を AWS CloudFormation の出力の値と置き換えます):psql -h <AuroraClusterEndpoint> -d dev -p 5432 -U awsuser
  20. プロンプトが表示されたら、前に記録したデータベースユーザーのパスワードを入力します。
  21. 次の SQL コマンドを入力します。
    select tablename from pg_tables where schemaname='public';

    次の 8 つのテーブルが出力として表示されます。

    dev=# select tablename from pg_tables where schemaname='public';
     tablename 
    -----------
     region
     nation
     lineitem
     orders
     part
     supplier
     partsupp
     customer
    (8 rows)

横串クエリのセットアップを完了する

最後のステップは、Aurora PostgreSQL インスタンスに接続するための外部スキーマを作成することです。次のコード例は、この手順を完了するために Amazon Redshift クラスターで実行する必要がある外部スキーマステートメントを作成します。

CREATE EXTERNAL SCHEMA IF NOT EXISTS pg 
FROM POSTGRES 
DATABASE 'dev' 
SCHEMA 'public' 
URI '<AuroraClusterEndpoint>' 
PORT 5432 
IAM_ROLE '<IAMRole>' 
SECRET_ARN '<SecretARN>'

以下のパラメータを使用します。

  • URI – CloudFormation スタック出力からの AuroraClusterEndpoint 値。値の形式は、<stackname>-cluster.<randomcharacter>.us-east-1.rds.amazonaws.com です。
  • IAMRole – CloudFormation スタック出力からの RedshiftClusterRoleArn 値。値の形式は arn:aws:iam::<accountnumber>:role/<stackname>-RedshiftClusterRole-<randomcharacter> です。
  • SecretARN – CloudFormation スタック出力からの AuroraSecretArn 値。値の形式は arn:aws:secretsmanager:us-east-1:<accountnumber>: secret:secretAuroraMasterUser-<randomcharacter> です。

横串検索をテストする

横串検索を設定したので、Aurora PostgreSQL と Amazon Redshift の両方にプリロードされた TPC-H データセットを使って、機能のテストを開始できます。

次のクエリは、部品とサプライヤーの関係を示しています。テーブル PARTSUPPPART は Amazon Redshift に保存され、サブクエリの SUPPLIER テーブルは Aurora PostgreSQL から取得します。

SELECT TOP 10 P_BRAND,
       P_TYPE,
       P_SIZE,
       COUNT(DISTINCT PS_SUPPKEY) AS SUPPLIER_CNT
FROM PARTSUPP,
     PART
WHERE P_PARTKEY = PS_PARTKEY
AND   P_BRAND <> 'Brand#23'
AND   P_TYPE NOT LIKE 'MEDIUM ANODIZED%'
AND   P_SIZE IN (1,32,33,46,7,42,21,40)
AND   PS_SUPPKEY NOT IN (SELECT S_SUPPKEY
                         FROM pg.SUPPLIER
                         WHERE S_COMMENT LIKE '%Customer%Complaints%')
GROUP	BY P_BRAND,
         P_TYPE,
         P_SIZE
ORDER	BY SUPPLIER_CNT DESC,
         P_BRAND,
         P_TYPE,
         P_SIZE;

次のクエリは、Amazon Redshift と Aurora PostgreSQL の ORDERS テーブルデータを組み合わせて、優先順位を示しています。これは、データウェアハウスで履歴データと統合された OLTP ソースからのライブデータクエリのユースケースを示しています。

SELECT O_ORDERPRIORITY,
       COUNT(*) AS ORDER_COUNT
FROM (SELECT O_ORDERPRIORITY
      FROM ORDERS o
      WHERE O_ORDERDATE < '1997-07-01'       AND O_ORDERDATE >= CAST(DATE '1997-07-01' - INTERVAL '3 months' AS DATE)
      UNION ALL
      SELECT O_ORDERPRIORITY
      FROM pg.ORDERS o
      WHERE O_ORDERDATE >= '1997-07-01'
      AND   O_ORDERDATE < CAST(DATE '1997-07-01' +INTERVAL '1 day' AS DATE))
GROUP	BY O_ORDERPRIORITY
ORDER	BY O_ORDERPRIORITY;

データセットを引き続き実験し、「Redshift 横串検索を使用して、簡略化された ETL およびライブデータクエリソリューションを構築する」の記事の 3 つの主なユースケースを探索できます。

CloudFormation スタックを削除する

完了したら、CloudFormation スタックを削除します。このチュートリアルの AWS リソースの一部を引き続き使用すると、コストが発生します。次の手順を実行します。

  1. AWS CloudFormation コンソールで、[Stacks] を選択します。
  2. このチュートリアルで起動したスタックを選択します。スタックは、現在実行中である必要があります。
  3. スタックの詳細ペインで、[Delete] をクリックします。
  4. [Delete stack] を選択します。

まとめ

この記事では、TPC-H データセットがプリロードされた Aurora PostgreSQL および Amazon Redshift クラスターの作成を自動化する方法、AWS CloudFormation を使用した新しい Amazon Redshift 横串検索機能の前提条件、セットアップを完了するための 1 つの手動ステップを説明しました。この記事では、TPC-H データセットを使用した横串検索の例もいくつか示しました。これを使用して、新機能をすばやく学習し採用することができます。この記事の CloudFormation テンプレートを引き続き変更して、ビジネに役立てることができます。

ご不明な点がございましたら、コメントをお寄せください。

 


著者について

BP Yau は AWS のデータウェアハウススペシャリストソリューションアーキテクトです。 彼の役割は、お客様がビッグデータソリューションを構築して大規模にデータを処理するのをサポートすることです。AWS に加わる前は、Amazon.com の Supply Chain Optimization Technologies が Oracle Data Warehouse を Amazon Redshift に移行するのを支援し、AWS テクノロジーを使用して次世代のビッグデータ分析プラットフォームを構築しました。

 

 

 

Srikanth Sopirala はシニアスペシャリストソリューションアーキテクトで、AWS のアナリティクスに力を入れています。 彼は、お客様がクラウドでスケーラブルなデータと分析ソリューションを構築するのをサポートすることに情熱を傾けています。