はじめに
今回は、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でクエリを実行するまで
-
S3バケットの準備
- RDSインスタンスのスナップショットをエクスポートする用のS3を作成します。
-
スナップショットのS3へのエクスポート
- スナップショットを作成したS3バケットにエクスポートします。
-
Glue クローラーの作成
- parquet形式で出力されたS3上のデータ読み込むためのクローラーの作成を行います。
-
Glueでデータカタログを作成
- エクスポートされたデータをGlue クローラーを利用して自動で読み込み、Data Catalogとして保存します。
-
Athenaでクエリを実行
- Athenaを使用して、エクスポートされたデータに対してSQLクエリを実行します。
1. S3バケットの準備
まず、RDSスナップショットをエクスポートするためのS3バケットを準備します。AWS Key Management Service (KMS) キーを使用したサーバー側の暗号化を行います。
- Key Management Service (KMS)のページに移動し、【キーの作成】を選択し、以下の設定でキーを作成します。
- キーのタイプ→対称
- キーの使用法→暗号化および複合化
- エイリアス → 独自のキーの名前
- キーの管理アクセス許可を定義→権限を渡したいユーザーにチェックを入れる。
- KMSの作成を行った後、Amazon S3のページに移動し【バケット】 -> 【バケットを作成】を選択し、以下の設定でバケットを作成します。
- バケット名 → 独自のドメインを入力
- AWSリージョン → アジアパシフィック(東京)ap-northeast1を選択
- ブロックパブリックアクセス設定→パブリックアクセスをすべてブロックを選択
- 暗号化タイプ→AWS Key Management Service キーを使用したサーバー側の暗号化 (SSE-KMS)
- AWS KMS キー→AWS KMS キーから選択する
- 使用可能なAWS KMSキー → 先ほど作成したKMSキーを選択
上記の設定を行った後、バケットの作成を選択します。
2. スナップショットのS3へのエクスポート
S3バケットの作成が完了したら、次はRDSのスナップショットのS3へのエクスポートを行います。
parquet形式でエクスポートされます。
Amazon RDSのスナップショットのページから該当のスナップショットを選択し、【アクション】 -> 【Amazon S3にエクスポート】を選択します。
- エクスポート識別子 → 独自の名前
- s3送信先 → 先ほど作成したS3のバケット
- IAM ロール → 新しいロールの作成
- AWS KMS キー → 先ほど作成したKMSキー
上記の設定を行った後、【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で任意の名前を入力します。
- 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を行います。
clawlingが終了し、AWS Glueのページから【Databases】 → 【Tables】に遷移するとテーブルが作成されているのが確認できます。
5. Athenaでクエリを実行
最後にAthenaを使用して、エクスポートされたデータに対してSQLクエリを実行していきます。
AWS Athenaのページから【クエリエディタ】へ遷移
クエリの欄にクエリをSQLを記述することによってデータの抽出ができます。
まとめ
この記事では、Amazon RDSのスナップショットをS3にエクスポートし、AWS Athenaを使用してデータベースの内容を閲覧する方法について説明しました。AWS Glueを使用してデータカタログを構築し、Athenaで柔軟なデータ分析を行うことができます。