7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS Athena】RDSスナップショットにSQLでクエリを実行する方法

Last updated at Posted at 2024-01-31

はじめに

今回は、Amazon RDSのスナップショットをAmazon S3にエクスポートし、AWS Athenaを使用してデータベースの内容を閲覧する方法を紹介します。このプロセスには、Amazon RDS、Amazon S3、AWS Glue、およびAWS Athenaが含まれます。
Glue、Athenaのサービス内容に関しては今回は詳しく説明しません。

必要なサービス

  • Amazon RDS: リレーショナルデータベースサービス。
  • Amazon S3: オブジェクトストレージサービス。
  • AWS Glue: ETLサービス。
  • AWS Athena: サーバーレスクエリサービス。

Athenaとは?

AWS公式を確認してみると以下のように記述されています。

Amazon Athena は、標準的な SQL を使用して Amazon Simple Storage Service (Amazon S3) 内のデータを直接分析することを容易にするインタラクティブなクエリサービスです。AWS Management Console でいくつかのアクションを実行するだけで、Athena にデータの保存先の Amazon S3 を設定し、標準 SQL を使用してアドホッククエリの実行を開始できます。結果は数秒で返されます。

簡単にいうと
Amazon Athenaは、Amazon S3に保存されたデータに対して、標準SQLを使って簡単かつ迅速にクエリを実行できるサービスです。

Glueとは?

AWS公式を確認してみると以下のように記述されています。

AWS Glue は、分析を行うユーザーが複数のソースからのデータを簡単に検出、準備、移動、統合できるようにするサーバーレスのデータ統合サービスです。

AWS Glueは、特に、データの抽出(Extract)、変換(Transform)、ロード(Load)のプロセス、通称ETLを自動化するのに役立ちます。Glueの主な特徴は以下の通りです。

  • ETLプロセスの自動化: Glueは、様々なデータソースからデータを抽出し、必要に応じてデータを変換(例えば、フォーマットを変更したり、データを統合したりする)し、それを別のデータストレージ(例えば、Amazon S3)に保存するプロセスを自動化します。

  • データカタログ: Glueには「データカタログ」という機能があります。これはデータの中心的なリポジトリで、データの場所、フォーマット、および利用可能なメタデータ(データに関するデータ)を管理します。データカタログを使用することで、データの探索、整理、およびアクセスが容易になります。

RDSスナップショットからAthenaでクエリを実行するまで

  1. S3バケットの準備

    • RDSインスタンスのスナップショットをエクスポートする用のS3を作成します。
  2. スナップショットのS3へのエクスポート

    • スナップショットを作成したS3バケットにエクスポートします。
  3. Glue クローラーの作成

    • parquet形式で出力されたS3上のデータ読み込むためのクローラーの作成を行います。
  4. Glueでデータカタログを作成

    • エクスポートされたデータをGlue クローラーを利用して自動で読み込み、Data Catalogとして保存します。
  5. Athenaでクエリを実行

    • Athenaを使用して、エクスポートされたデータに対してSQLクエリを実行します。

1. S3バケットの準備

まず、RDSスナップショットをエクスポートするためのS3バケットを準備します。AWS Key Management Service (KMS) キーを使用したサーバー側の暗号化を行います。

  • Key Management Service (KMS)のページに移動し、【キーの作成】を選択し、以下の設定でキーを作成します。
    • キーのタイプ→対称
    • キーの使用法→暗号化および複合化
    • エイリアス → 独自のキーの名前
    • キーの管理アクセス許可を定義→権限を渡したいユーザーにチェックを入れる。

スクリーンショット 2024-01-31 13.35.07.png

スクリーンショット 2024-01-31 13.35.32.png

  • KMSの作成を行った後、Amazon S3のページに移動し【バケット】 -> 【バケットを作成】を選択し、以下の設定でバケットを作成します。
    • バケット名 → 独自のドメインを入力
    • AWSリージョン → アジアパシフィック(東京)ap-northeast1を選択
    • ブロックパブリックアクセス設定→パブリックアクセスをすべてブロックを選択
    • 暗号化タイプ→AWS Key Management Service キーを使用したサーバー側の暗号化 (SSE-KMS)
    • AWS KMS キー→AWS KMS キーから選択する
    • 使用可能なAWS KMSキー → 先ほど作成したKMSキーを選択

スクリーンショット 2024-01-31 14.00.00.png

上記の設定を行った後、バケットの作成を選択します。

2. スナップショットのS3へのエクスポート

S3バケットの作成が完了したら、次はRDSのスナップショットのS3へのエクスポートを行います。
parquet形式でエクスポートされます。
Amazon RDSのスナップショットのページから該当のスナップショットを選択し、【アクション】 -> 【Amazon S3にエクスポート】を選択します。

  • エクスポート識別子 → 独自の名前
    • s3送信先 → 先ほど作成したS3のバケット
    • IAM ロール → 新しいロールの作成
    • AWS KMS キー → 先ほど作成したKMSキー

スクリーンショット 2024-01-31 15.00.18.png

上記の設定を行った後、【Amazon S3にエクスポート】を選択します。

3. Glue クローラーの作成

次にエクスポートした内容を読み取るためのクローラーを作成します。

  • AWS Glueのページから【Data Catalog】 -> 【Crawlers】を選択し、【Create crawler】を選択します。
    • Name → 独自の名前
    • Is your data already mapped to Glue tables? → Not yet
    • Add data source ボタンを選択

Add data sourceでは以下の設定を行います。

  • Data source → S3
  • BrowseS3 ボタンを選択し、先ほど作成したS3の中に、Database名のディレクトリがあるため選択し、chooseボタンを選択
  • IAM role → Create new IAM roleで任意の名前を入力します。

スクリーンショット 2024-01-31 15.57.05.png

  • Target database → データベースを選択
  • Create crawlerボタンを選択。

Crawlerが作成されます。

4. Glueでデータカタログを作成

次にエクスポートされたデータをAWSGlueを使用してClawlingします。
Clawlingする際にエクスポートされたデータは、KMSによって暗号化されているためCrawlerに設定したIAMにDecrypt権限を渡す必要があります。

  • AWS IAMのページから【ロール】 を選択し、Crawler作成時に作成したIAMロールを検索。
  • 許可を追加 → インラインポリシーを作成。
  • Jsonで生成し、Jsonの中身を以下に書き換えます。(ResorceのARNはKMSに変更する)
{  
   "Version":"2012-10-17",
   "Statement":[  
      {  
         "Effect":"Allow",
         "Action":[  
            "kms:Decrypt"
         ],
         "Resource":[  
            "arn:aws:kms:*:account-id-without-hyphens:key/key-id"
         ]
      }
   ]
}
  • AWS Glueのページから【Data Catalog】 -> 【Crawlers】を選択。
  • 作成したcrawlerを選択しRunボタンを選択しCrawlingを行います。

スクリーンショット 2024-01-31 16.08.43.png

clawlingが終了し、AWS Glueのページから【Databases】 → 【Tables】に遷移するとテーブルが作成されているのが確認できます。

5. Athenaでクエリを実行

最後にAthenaを使用して、エクスポートされたデータに対してSQLクエリを実行していきます。

AWS Athenaのページから【クエリエディタ】へ遷移
クエリの欄にクエリをSQLを記述することによってデータの抽出ができます。

スクリーンショット 2024-01-31 18.25.53.png

まとめ

この記事では、Amazon RDSのスナップショットをS3にエクスポートし、AWS Athenaを使用してデータベースの内容を閲覧する方法について説明しました。AWS Glueを使用してデータカタログを構築し、Athenaで柔軟なデータ分析を行うことができます。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?