Amazon Web Services ブログ

Amazon Aurora と Amazon Redshift のゼロ ETL 統合を使用したニアリアルタイム運用分析のためのスタートガイド

Amazon AuroraAmazon Redshift のゼロ ETL 統合が AWS re:Invent 2022 で発表され、Amazon Aurora MySQL-Compatible Edition 3(MySQL 8.0 対応)のパブリックプレビューが us-east-1us-east-2us-west-2ap-northeast-1eu-west-1 のリージョンで利用可能になりました。詳細は What’s New Post をご参照ください。

本投稿では、この機能を使ったニアリアルタイムの運用分析を始める方法について、ステップバイステップのガイダンスを提供します。

課題

今日、さまざまな業界のお客様が、パーソナライズされた戦略、不正検出、在庫監視などのニアリアルタイムの分析ユースケースを実装することで、収益や顧客エンゲージメントを高めようとしています。このようなユースケースのために運用データを分析するには、大きく分けて2つのアプローチがあります:

  • 運用データベースにおいてデータを分析する(リードレプリカ、連携クエリ、分析アクセラレータなど)
  • データウェアハウスなど、分析クエリの実行に最適化されたデータストアにデータを移動する

ゼロ ETL 統合は、後者のアプローチを単純化することに重点を置いています。

運用データベースから分析データウェアハウスにデータを移動させる一般的なパターンは、抽出、変換、ロード (ETL) であり、複数のソースからのデータを大規模な中央リポジトリ(データウェアハウス)に結合するプロセスです。ETL パイプラインの構築には高いコストがかかり、管理も複雑になります。複数のタッチポイントがあるため、ETL パイプラインで断続的なエラーが発生すると、長い遅延や、データが古くなったり欠落したままのデータウェアハウスで利用可能なデータに依存しているアプリケーションからの離脱につながる可能性があり、さらにはビジネスチャンスを逃すことにもつながります。

複数の運用データベースのデータを統合して分析を実行する必要がある顧客にとって、インプレースでデータを分析するソリューションは、単一のデータベース上のクエリを高速化するのに有効かもしれませんが、そのようなシステムには、複数の運用データベースのデータを集約できないという限界があります。

ゼロ ETL

AWS では、ゼロ ETL ビジョンの実現に向けて着実に前進しています。Aurora と Amazon Redshift のゼロ ETL 統合により、Aurora のトランザクションデータと Amazon Redshift の分析機能を統合することができます。Aurora と Amazon Redshift の間でカスタム ETL パイプラインを構築し管理する作業を最小限に抑えます。データエンジニアは、複数の Aurora データベースクラスターから同じまたは新しい Amazon Redshift インスタンスにデータを複製し、多くのアプリケーションやパーティションにまたがる総体的なインサイトを導き出すことができます。Aurora の更新は自動的かつ継続的に Amazon Redshift に伝えられるので、データエンジニアはほぼリアルタイムで最新の情報を得ることができます。さらに、システム全体をサーバーレスにすることができ、データ量に応じて動的にスケールアップ/ダウンできるため、インフラを管理する必要はありません。

Amazon Redshift との Aurora ゼロ ETL 統合を作成する場合、 Aurora ゼロ ETL 統合機能は、無料でご利用いただけます。Aurora 及び Amazon Redshift に対する追加費用は必要ありません。

Amazon Redshift との Aurora ゼロ ETL 統合を用いると、ソースデータベースからターゲットデータウェアハウスにデータを複製します。データは数秒で Amazon Redshift で利用可能になり、ユーザーは Amazon Redshift のアナリティクス機能や、データ共有、自動化されたワークロード最適化、同時実行スケーリング、機械学習などの機能を利用できるようになります。Aurora のデータに対してリアルタイムのトランザクション処理を実行すると同時に、レポートやダッシュボードのような分析ワークロードのために Amazon Redshift を使用することができます。

次の図は、このアーキテクチャを示しています。

ソリューションの概要

ユーザーがスポーツイベント、ショー、コンサートのチケットをオンラインで売買する架空のウェブサイト、TICKIT を考えてみましょう。このウェブサイトからのトランザクションデータは、Aurora MySQL 3.03.1 (またはそれ以上のバージョン) のデータベースにロードされます。この会社のビジネスアナリストは、時間の経過に伴うチケットの売れ行き、販売者の成約率、最も売れたイベント、会場、シーズンを特定するためのメトリクスを生成したいと考えています。ゼロ ETL 統合を使用して、これらのメトリクスをほぼリアルタイムで取得したいと考えています。

統合は Amazon Aurora MySQL-Compatible Edition 3.03.1 (ソース) と Amazon Redshift (デスティネーション) の間で設定されています。ソースからのトランザクションデータは、分析クエリを処理するデスティネーション上でほぼリアルタイムに更新されます。

Amazon Aurora MySQL-Compatible Edition と Amazon Redshift の両方で、プロビジョニング または サーバーレスオプションのいずれかを使用できます。この図では、プロビジョニングされた Aurora データベース と Amazon Redshift Serverless データウェアハウスを使用しています。パブリックプレビューに関する考慮事項の完全なリストについては、AWS ドキュメントを参照してください。

次の図は、ゼロ ETL 統合のハイレベルアーキテクチャを示しています。

以下はゼロ ETL 統合をセットアップするために必要なステップです。完全なスタートガイドについては、以下の AuroraAmazon Redshift のドキュメントリンクを参照してください。

  1. カスタマイズされた DB クラスターパラメータグループで Aurora MySQL ソースを設定します。
  2. Amazon Redshift Serverless デスティネーションを、その名前空間に必要なリソースポリシーで設定する。
  3. 大文字と小文字を区別する識別子を有効にするために Redshift Serverless ワークグループを更新する。
  4. 必要な権限を設定します。
  5. ゼロ ETL 統合を作成します。
  6. Amazon Redshift にある統合からデータベースを作成します。

カスタマイズされた DB クラスターパラメータグループで Aurora MySQL ソースを設定する

Aurora MySQLデータベースを作成するには、以下の手順を実行します:

  1. Amazon RDS コンソールで、zero-etl-custom-pg という DB クラスターパラメータグループを作成します。
  2. ゼロETL統合には、バイナリログ (binlog) を制御するAurora DB クラスターパラメータに特定の値が必要です。例えば、拡張 binlog モードをオンにする必要があります(aurora_enhanced_binlog=1)。

  3. 以下のbinlogクラスターパラメータを設定します:
    1. binlog_backup=0
    2. binlog_replication_globaldb=0
    3. binlog_format=ROW
    4. aurora_enhanced_binlog=1
    5. binlog_row_metadata=FULL
    6. binlog_row_image=FULL
  4. Save changes を選択します。
  5. ナビゲーションペインで Database を選択し、 Create database を選択します。
  6. Available versions にて、 Aurora MySQL 3.03.1 (または、より高いもの) を選択します。
  7. Templates にて Production を選択します。
  8. DB cluster identifier にて zero-etl-source-ams と入力します。
  9. Instance configuration で、Memory optimized classes を選択し、適切なインスタンスサイズを選択します (デフォルトは db.r6g.2xlarge)。
  10. Additional configurationDB cluster parameter group で、先ほど作成したパラメータグループ (zero-etl-custom-pg)を選択します。
  11. Create Database を選択します。

数分で、ゼロ ETL 統合のソースとして Aurora MySQL データベースが起動します。

Redshift Serverless デスティネーションを設定する

今回のユースケースでは、以下の手順によって Redshift Serverless データウェアハウスを作成します:

  1. Amazon Redshift コンソールで、ナビゲーションペインの Serverless dashboard を選択します。
  2. Create preview workgroup を選択します。
  3. Workgroup namezero-etl-target-rs-wg と入力します。
  4. NamespaceCreate new namespace を選択し、 zero-etl-target-rs-ns と入力します。
  5. 名前空間 zero-etl-target-rs-ns に移動し、Resource policy タブを選択します。
  6. Add authorized principals を選択します。
  7. AWS ユーザーまたはロールの Amazon Resource Name (ARN)、またはこの名前空間で統合の作成が許可されている AWS アカウント ID (IAM プリンシパル) のいずれかを入力します。
  8. アカウント ID は、root ユーザーの ARN として保存されます。

  9. 認証された統合ソースを名前空間に追加し、ゼロ ETL 統合のデータソースである Aurora MySQL DB クラスターの ARN を指定します。
  10. Save changes を選択します。

以下のスクリーンショットのように、Configuration タブで Aurora MySQL ソースの ARN を取得できます。

大文字と小文字を区別する識別子を有効にするために Redshift Serverless ワークグループを更新する

AWS コマンドラインインターフェイス (AWS CLI) を使用して、update-workgroup アクションを実行します:

aws redshift-serverless update-workgroup --workgroup-name zero-etl-target-rs-wg --config-parameters parameterKey=enable_case_sensitive_identifier,parameterValue=true --region us-east-1

AWS CloudShellAmazon Elastic Compute Cloud (Amazon EC2) のような、Redshift Serverless パラメータグループを更新できる AWS ユーザー設定を持つ別のインターフェースを使用することができます。以下のスクリーンショットは CloudShell 上での実行方法を示しています。

次のスクリーンショットは、Amazon EC2 で update-workgroup コマンドを実行する方法を示しています。

必要な権限を設定する

ゼロ ETL 統合を作成するには、ユーザーまたはロールに、適切な AWS Identity and Access Management (IAM) 権限を持つアイデンティティベースのポリシーがアタッチされている必要があります。以下のサンプルポリシーでは、関連するプリンシパルが以下のアクションを実行できます:

  • ソース Aurora DB クラスターに対してゼロ ETL 統合を作成する。
  • すべてのゼロ ETL 統合を表示および削除する。
  • ターゲットデータウェアハウスへのインバウンド統合を作成する。Amazon Redshift データウェアハウスを所有しているアカウントと、そのデータウェアハウスに対して認可されたプリンシパルのアカウントが、同一アカウントである場合、この権限は必要ありません。また、Amazon Redshift はプロビジョンドとサーバーレスで ARN 形式が異なることに注意してください:
    • プロビジョニングされたクラスター – arn:aws:redshift:{region}:{account-id}:namespace:namespace-uuid
    • サーバーレス – arn:aws:redshift-serverless:{region}:{account-id}:namespace/namespace-uuid

権限を設定するには、以下の手順を実行します:

  1. IAM コンソールで、ナビゲーションペインの Policies を選択します。
  2. Create policy を選択します。
  3. 以下の JSON を使用して、rds-integrations という新しいポリシーを作成します:
{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "rds:CreateIntegration"
        ],
        "Resource": [
            "arn:aws:rds:{region}:{account-id}:cluster:source-cluster",
            "arn:aws:rds:{region}:{account-id}:integration:*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "rds:DescribeIntegration"
        ],
        "Resource": ["*"]
    },
    {
        "Effect": "Allow",
        "Action": [
            "rds:DeleteIntegration"
        ],
        "Resource": [
            "arn:aws:rds:{region}:{account-id}:integration:*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "redshift:CreateInboundIntegration"
        ],
        "Resource": [
            "arn:aws:redshift:{region}:{account-id}:cluster:namespace-uuid"
        ]
    }]
}

ポリシーのプレビュー:

RDS ポリシーのアクションに対して IAM ポリシーの警告が表示された場合、これはゼロ ETL 統合がパブリックプレビューであるために予想されることです。これらのアクションは、ゼロ ETL 統合の機能が一般利用可能になったときに IAM ポリシーの一部になります。続行しても問題ありません。

  1. 作成したポリシーを IAM ユーザーまたはロールにアタッチします。

ゼロ ETL 統合を作成する

ゼロ ETL 統合を作成するには、以下の手順を実行します:

  1. Amazon RDS コンソールで、ナビゲーションペインの Zero-ETL integrations を選択します。
  2. Create zero-ETL integration を選択します。
  3. Integration name には、zero-etl-demo のように名前を入力します。
  4. Aurora MySQL source cluster には、ソースクラスター zero-etl-source-ams を参照して選択します。
  5. Destination において、Amazon Redshift data warehouse に対して、デスティネーションの Redshift Serverless 名前空間 (zero-etl-target-rs-ns)を選択します。
  6. Create zero-ETL Integration を選択します。

別の AWS アカウントにあるターゲット Amazon Redshift データウェアハウスを指定するには、現在のアカウントのユーザーがターゲットアカウントのリソースにアクセスできるようにするロールを作成する必要があります。詳細については、所有している別の AWS アカウント へのアクセス権を IAM ユーザーに提供を参照してください。

以下の権限を持つロールをターゲットアカウントに作成します:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "redshift:DescribeClusters",
            "redshift-serverless:ListNamespaces"
         ],
         "Resource":[
            "*"
         ]
      }
   ]
}

ロールは、ターゲットのアカウント ID を指定する以下の信頼ポリシーを持っている必要があります。別のアカウントで AWS アカウント ID として信頼されたエンティティを持つロールを作成することでこれを行うことができます。

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "AWS": "arn:aws:iam::{external-account-id}:root"
         },
         "Action":"sts:AssumeRole"
      }
   ]
}

以下のスクリーンショットは、IAM コンソールでこの設定を行う様子を示しています。

次に、ゼロ ETL 統合を作成しながら、別のアカウントを指定するオプションで、統合先のアカウント ID と作成したロールの名前を選択して次に進みます。

統合を選択して詳細を表示し、進捗状況を監視できます。ステータスが Creating から Active に変わるには数分かかります。この時間は、ソースで既に利用可能なデータセットのサイズによって異なります。

Amazon Redshift で統合からデータベースを作成する

データベースを作成するには、以下の手順を実行します:

  1. Redshift Serverless ダッシュボードで、zero-etl-target-rs-ns 名前空間に移動します。
  2. クエリエディタ v2 を開くために Query data を選択します。
  3. Create connection を選択してプレビュー Redshift Serverless データウェアハウスに接続します。
  4. integration_idsvv_integration システムテーブルから取得します:
  5. select integration_id from svv_integration; ---- copy this result, use in the next sql

  6. 前のステップで取得した integration_id<result from above> 部分に入力して、統合から新しいデータベースを作成します:
    CREATE DATABASE aurora_zeroetl FROM INTEGRATION '<result from above>';

    これで統合は完了し、ソースのスナップショット全体がそのままデスティネーションに反映されます。継続的な変更はニアリアルタイムで同期されます。

ニアリアルタイムのトランザクションデータの分析

今、TICKIT の運用データに対して分析を実行できるようになっています。

TICKITのソースデータを入力する

ソースデータを入力するには、以下の手順を実行します:

  1. Aurora MySQL クラスターに接続し、TICKIT データモデル用のデータベース/スキーマを作成し、そのスキーマ内のテーブルにプライマリキーがあることを確認し、ロード処理を開始します:
  2. mysql -h<amazon_aurora_mysql_writer_endpoint>-u admin -p
    SQL

    以下の HTML ファイルのスクリプトを使用して、Amazon Aurora MySQL 互換エディションでサンプルデータベース demodb (tickit.db モデルを使用) を作成することができます。

  3. スクリプトを実行して、demodb データベース/スキーマに tickit.db モデルテーブルを作成します:
  4. Amazon Simple Storage Service (Amazon S3) からデータをロードし、デスティネーションでの変更データキャプチャ(CDC) 検証の終了時間を記録し、統合がどの程度アクティブであったかを観察する。

以下は、Amazon S3 からのロードに関連するよくあるエラーです:

  • 現在のバージョンの Aurora MySQL クラスターでは、DB クラスターパラメータグループの aws_default_s3_role パラメータを、必要な Amazon S3 アクセス権限を持つロール ARN に設定する必要があります。
  • クレデンシャルが見つからないというエラーが発生した場合 (例として、Error 63985 (HY000): S3 API returned error: Missing Credentials: Cannot instantiate S3 Client) が表示された場合、IAM ロールがクラスターに関連付けられていない可能性があります。この場合、対象の IAM ロールをソースの Aurora MySQL クラスターに追加します。

デスティネーションでソース TICKIT データを分析する

Redshift Serverless ダッシュボードで、統合のセットアップの一環で作成したデータベースを使用してクエリエディタ v2 を開きます。以下のコードを使用して、シードまたは CDC アクティビティを検証します:

SELECT * FROM SYS_INTEGRATION_ACTIVITY;

ドロップダウンメニューでクラスターまたはワークグループと統合から作成されたデータベースを選択し、tickit.dbサンプル分析クエリを実行します。

モニタリング

Amazon Redshift の以下のシステムビューとテーブルを照会して、Amazon Redshift との Aurora ゼロ ETL 統合に関する情報を得ることができます:

Amazon CloudWatch に公開された統合関連のメトリクスを表示するには、Amazon Redshift コンソールに移動します。左のナビゲーションペインから Zero-ETL integrations を選択し、アクティビティメトリクスを表示する統合リンクをクリックします。

Redshift コンソールで利用可能なメトリクスはインテグレーションメトリクスとテーブル統計で、テーブル統計は Aurora MySQL から Amazon Redshift にレプリケートされた各テーブルの詳細を提供します。

統合メトリクスには、テーブル・レプリケーションの成功/失敗カウントとラグの詳細が含まれます:

クリーンアップ

ゼロ ETL 統合を削除すると、Aurora はそれを Aurora クラスターから削除します。トランザクションデータは Aurora や Amazon Redshift から削除されませんが、Aurora は Amazon Redshift に新しいデータを送信しません。

ゼロ ETL 統合を削除するには、以下の手順を実行します:

  1. Amazon RDS コンソールで、ナビゲーションペインの Zero-ETL integrations を選択します。
  2. 削除したいゼロ ETL 統合を選択し、Delete を選択します。
  3. 削除を確認するには、Delete を選択します。

まとめ

この投稿では、Amazon Aurora MySQL-Compatible Edition から Amazon Redshift への Aurora ゼロ ETL 統合をセットアップする方法を紹介しました。これにより、複雑なデータパイプラインを維持する必要性を最小化し、トランザクションデータおよび運用データのほぼリアルタイムの分析を可能にします。

Amazon Redshift との Aurora ゼロ ETL 統合の詳細については、AuroraAmazon Redshift のドキュメントをご覧ください。


著者について

Rohit Vashishtha はテキサス州ダラスを拠点とする AWS のシニアアナリティクススペシャリストソリューションアーキテクトです。ビッグデータプラットフォームのアーキテクト、構築、指導、保守に 17 年の経験を持ちます。Rohit は、AWS の幅広いサービスを使用して、顧客が分析ワークロードをモダナイズすることを支援し、顧客が最高のセキュリティとデータガバナンスで最高の価格/パフォーマンスを得ることを保証します。

Vijay Karumajji は Amazon Web Services のデータベースソリューションアーキテクトです。彼は AWS の顧客と協力して、データベースプロジェクトに関するガイダンスと技術支援を提供し、AWS を使用する際のソリューションの価値向上を支援しています。

BP Yau は AWS のシニアパートナーソリューションアーキテクトです。顧客が大規模なデータ処理を行うためのビッグデータソリューションの構築を支援することに情熱を注いでいます。AWS 以前は、Amazon.com Supply Chain Optimization Technologies の Oracle データウェアハウスを Amazon Redshift に移行し、AWS のテクノロジーを利用した次世代ビッグデータ分析プラットフォームの構築を支援していました。

Jyoti Aggarwal はシアトルを拠点とする Amazon Redshift チームのプロダクトマネージャーです。過去 10 年間、データウェアハウス業界で複数の製品に携わってきました。

Adam Levin はカリフォルニアを拠点とする Amazon Aurora チームのプロダクトマネージャーです。過去10年間、様々なクラウドデータベースサービスに携わってきました。

翻訳はソリューションアーキテクトの小役丸が担当しました。原文はこちらです。