S3やRDSで利用できるAWSのAthenaとは?各サービスの概要についても紹介

はじめに

ITシステムでは顧客情報や営業に関する情報、ショッピングサイトの商品情報等、様々なデータをデータベースに取り込んで一サービスを運用しています。さらに近年ではビッグデータと呼ばれる技術も登場して、ありとあらゆる膨大で細かなデータを取り込んで分析し、経営戦略や研究、WebサービスやAI、IoT関連のサービス等に生かされています。身近な例で言うと、例えば動画サイトにおいてユーザーの閲覧傾向を分析してレコメンドの動画を表示させる機能一つ採っても、ユーザーの閲覧履歴等の行動データが活用されている状況です。このようにデータの収集や分析という作業は近年のシステムにおいて欠かせないものとなっています。

ITシステムの構築・運用をするうえで主流となっているクラウドサービスにおいても、データの収集や格納、分析に適したサービスが各社からリリースされており、需要の高まりとともに低コストで良質・高機能なサービスが利用できるようになっています。この記事ではAmazonの提供するクラウドサービス「AWS」のデータベースサービス「AWS RDS」、ストレージサービス「Amazon S3」、データ分析のためのクエリサービス「Amazon Athena」という3つのサービスについて、それぞれの特徴について紹介し、さらにそれらを利用したデータ分析環境の構築方法について紹介します。

データ分析を行うに当たってクラウドサービスの選定を迷っている方、AWSでのデータ分析環境の構築方法を知りたいと思っている方、各サービスの特徴について知りたいと思っている方はぜひ読み進めてみてください。

AWS RDS(Amazon Relational Database Service)について

データベースには大きく階層型、ネットワーク型、リレーショナル型、NoSQL型という4つの種類がありますが、2023年時点で特に多く利用されているのがこの中のリレーショナル型で、該当するデータベースを「リレーショナルデータベース(RDB)」と呼びます。RDBの代表的な製品としてはMySQL、PostgreSQL、SQL Server、MariaDB、Oracle Database、Amazon Aurora等が挙げられますが、上記に挙げた6種類のデータベースエンジンから選択し、AWS上でデータベース環境を構築できるのがAWS RDSです。いずれのデータベースも複数のバージョンから選択可能となっています。

AWS RDSは読み取り専用のデータベース(リードレプリカ)と更新用のデータベースを使い分け流ことで、参照を必要とする大量なリクエストが来たとしても高速で安定した処理を可能としています。また、稼働中のデータベースとバックアップ用のデータベースを別環境に配置することで、万が一稼働中のデーターに不具合や障害が発生した場合も、自動的にバックアップ用の方に切り替えることでシステムの運用を継続可能とします。

他のクラウドサービス同様に、柔軟なスケーラビリティに対応しているという点も大きな特徴です。容量が不足したとしても物理的にディスクを増やす必要はなく、サービスの停止もすることなく拡張が可能です。料金も利用した分だけ請求が発生する従量課金制で、不要なデータベースは削除することで料金が発生しなくなり、リザーブドインスタンスという1年・3年単位での契約をすることで割引を受けられる等、コスト面でのメリットもあります。さらにAWS RDSでは、暗号化に利用するキーを容易に作成・管理できる「AWS KMS(AWS Key Management Service)」や「AWS CloudHSM」を利用できるため、高いセキュリティ性を保った運用が可能となっています。

通常オンプレミスでデータベース環境を構築するとなるとサーバー構築や設定、必要ソフトのインストール、データベースの設定等、多くの工程が発生しますが、AWS RDSでは以上に紹介した機能をAWSの画面上で選択していくだけで利用できることとなります。なおRDSを利用するためには「Elastic IP割り当て→VPC作成→サブネットグループの作成→RDS作成」という作業が発生しますが、これらは全て管理画面上から可能となっています。

Amazon S3(Amazon Simple Storage Service)について

ストレージサービスであるためデータのバックアップ先、容量の多いデータの保存先としての利用が可能ですが、それ以外にも様々な特徴があります。一つ目の特徴は「バージョニング」という機能が備わっている点です。バージョニングとは、同データの複数バージョンを同時に保持することが可能な機能です。Windowsのディレクトリ等では同じ階層に同名ファイルを存在させることができないため、例えば新旧両バージョンを残したい場合は「20230318_sample.html」「20230319_sample.html」というように少しファイル名を変更して保存することになります。しかしS3の場合は、同じファイル名のまま異なったバージョンのデータを保存しておけるという状況です。なお、この機能は初期状態では無効なため、自分で有効にする必要があります。

二つ目は「ライフサイクル」という機能がある点です。ライフサイクルを簡単に言うと無駄なコストを省くことができる管理機能です。S3には複数のプランが用意されており、利用状況によって使い分けることができます。使用頻度が少ないにもかかわらず高いプランを利用し続けていては無駄が発生するため、通常は人間の目で見極めて都度プラン変更等を検討することになりますが、このライフサイクル機能があることで、使用頻度の少ないデータを自動で削除したり、自動で低コストのストレージへ移動したりということが可能となります。

三つ目は静的コンテンツのホスティングが可能という点です。通常Webサイトを公開する場合はWebサーバーを構築し、公開するための設定を行い、そこへFTP等でデータをアップロードする必要があります。しかしS3はHTTP・HTTPSで保存されているデータにアクセスが可能となっているため、Webサーバーを用意しなくてもWebサイトの公開ができます

他にもS3は、1ファイル5TBまでのデータであればアップロードが可能、暗号化機能の利用やデータごとのアクセス権限を設定することでセキュリティを高められる、保存されたデータを自動で複数のデータセンターへ冗長化するという特徴も持ち合わせています。

Amazon Athenaについて

S3内に保存されたデータを、標準SQLを用いることで容易にデータ分析できるクエリサービスです。一度データ分析をしたことがある人であればご存知かと思いますが、データ分析を行うためには事前にデータを分析できる形にフォーマットする必要があります。その際に発生する処理を「Extract (抽出)」「Transform(変換)」「Load(書き出)」それぞれの頭文字を取って「ETL」と呼びますが、Athenaではこの工程が不要になるという大きなメリットがあります。なお対応しているデータのフォーマットとしてはCSV、TSV、カスタム区切り、JSON、ORC、Apache Avro、Parquet、Logstash、AWS CloudTrail、Apache WebServerの各種ログが挙げられます。さらにLZO形式、GZIP形式の圧縮データもサポートしています。

AthenaはETLが不要と言っても整形されていないデータを取り扱うことはできません。そのため整形するためのツールが必要となりますが、その際に推奨されるツールは「AWS Glue」です。AWS Glueは主にクローラー(データ構造を推測してデータカタログに表構造を登録するサービス)やデータカタログ(データベースにおけるテーブル構造のメタデータを定義するサービス)としての機能があり、 Athenaと併用することでより高機能になります。Athenaも従量課金制ですが、料金の発生タイミングはデータの出力時となります。

またAthenaでは「Presto」が利用できるため大量データの分析が可能となっています。Prestoとはオープンソースの高性能分散型SQLクエリエンジンで、当初はFacebookでの利用を目的に開発されました。Prestoではペタバイト単位の大量データの分析が可能ですが、これはクエリの実行前にジョブを分割して並列で計算な仕組みを採用していたり、メモリ上に中間データを持つことで素早いレスポンスが得られる仕様があったりするためです。さらにPrestoはWeb上にも多くの情報が掲載されているため、学習する際にも困りません。

通常データベースの操作をする場合はデータベースサーバーの構築が必要となりますが、Webサーバーを構築せずともS3でホームページの公開が可能なのと同様、 Athenaを利用すればデータベースサーバーの構築はせずに管理が可能となります。

以上のように高機能なAthenaですが、向かない処理もあることを覚えておくと良いでしょう。向かないものとしては、大量データに対する定期的なフルスキャン、何度も行うバッチ処理、複雑な集計処理、テンポラリテーブルを活用した多段のETL処理、頻度の高い大量の分析等が挙げられます。逆に概念実証(PoC)や様々なパターンの分析、障害発生時のアクセスログを使った原因分析、小規模データの低頻度のETL処理等での利用には向いています。

ここまでに何度も「クエリ」という言葉が出てきましたが、データベースを操作したことがない場合はクエリが何を指しているのかわからない方もいることでしょう。クエリとは保存されているデータへの問合せやリクエストをルールに沿った文字列で表したものを指します。リレーショナルデータベースでは、このクエリを送ることでデータの追加・更新・削除・検索等が行えますが、その際に利用される標準言語がSQL(Structured Query Language)です。作成されたクエリのことをSQL文と呼ぶこともあります。SQLはプログラム言語とは異なり複雑な記述は不要ですが、記述する単語や記述順等のルールがあるため、 Athenaを利用する場合もあらかじめ学習しておく必要があります。なお近年はSQLを利用しなくても管理できる「NoSQL」という種類のデータベースがあり、こちらもリレーショナルデータベースに次いで多くのシステムで利用されている傾向にあります。

RDSのデータをS3に保存してAthenaでデータ分析する方法

ここまでS3に保存されたデータをAthenaで分析できるということを紹介しましたが、RDSで作成したデータベースのデータを分析したいという場面もあることでしょう。例えば稼働中のシステムにおけるデータに対して分析を行いたい場合です。稼働中のシステムに対してクエリを実行をしてしまうと本来のサービスのパフォーマンスに影響が出てしまうのではという懸念が発生しますが、S3にデータをエクスポートしてそのデータに対して分析をかければリスクを回避することができます。

RDSのデータをAthenaで分析するには、まずRDSに保存されているデータをS3にエクスポートする必要があります。エクスポートする際はRDSのスナップショットを「Parquet」という形式にして、KMSで暗号化を行ったうえで実施することとなります。そのため事前にKMSの管理画面にてKMSで暗号化のキーを作成し、スナップショットの受け入れ先となるS3で「Bucket(オブジェクトの格納庫)」を作成しましょう。BucketはS3の管理画面に「バケットの作成」というボタンがあるので、そちらから作成を進めます。なお暗号化の状態を復元するために、Decryptの権限付与も必須となることを覚えておいてください。復元ができないとGlueのクローラーにて読み込みができなくなるのでご注意ください。

エクスポートはRDSの管理画面内にある「スナップショット」から作成済みのBucketを選択して実施しましょう。途中で「IAMロール」の作成も必要となりますが、作成済みの暗号化キーを選択するだけなので特に難しいことはありません。なおエクスポート開始から完了まではデータ量によって時間がかかる場合があります。エクスポートが完了するとステータスの部分が「完了」となるため、右隣に表示されているS3バケット名をクリックして実際のデータを確認してみましょう。

続いてGlueクローラーを使った表構造の解析を行うために、Glueの管理画面からクローラーを作成します。クローラー設定時に実施スケジュールを選択できるようになっていますが、試しに行う場合は「オンデマンドで実行」を選択してください。同時にIAMロールでS3へのアクセス許可を設定したり、クローラーで解析した結果であるテーブル定義情報の出力先となるデータベースを設定したりという作業も行います。クローラーの作成が完了したらすぐに実行したくなるところですが、このままではKMSで暗号化されたデータを読み込めません。そのためIAMの管理画面に移り、復元の権限を付けます。IAMの管理画面では、Glueクローラー側で作成したIAMロールを選択し、インラインポリシーとして、サービスは「KMS」、アクションは「Decrypt」を選択しましょう。

次にGlueの管理画面上から作成したクローラーを実行し、データカタログを作成することとなります。実行方法は、すでに作成されたクローラーを選択して「クローラーの実行」をクリックするだけです。完了するまでしばらく待ちましょう。データカタログの作成まで完了したら、AthenaでのSQLクエリの実行が可能な状態となります。

Athenaの管理画面に移ると左側メニューにデータベースやそのデータベースのデータカタログが表示され、右側にクエリ実行欄が表示されるので、任意のクエリを実行してみましょう。なお「クエリのフォーマット」ボタンをクリックすることで見辛いクエリを見やすく整形してくれます。またAthenaは、クエリ中のカラム名を大文字で入力しても英小文字に変換されることを覚えておきましょう。結果はクエリ実行欄の下に表示されます。

高パフォーマンスなクエリの実行について

最後に豆知識として、SQLクエリのパフォーマンスをアップするポイントを紹介します。ポイントとしてはデータ量を減らす、対象ファイルを一定のサイズ以上とする、対象ファイルを分割可能にするという3つが挙げられます。

データを減らすことで当然ながらスキャンする量が減り、高速な処理が可能となります。そのため、データ圧縮やファイル配置方法の最適化を適宜実施することをおすすめします。ファイルについてはその数が多いとそれだけシステムに負荷がかかってしまうため、極力128MB以上の1データとしてまとめておくことをおすすめします。また、Athenaの並列処理が可能というメリットを生かすため、CSV形式のように途中からの処理も可能なファイル形式としておくことをおすすめします。以上のことを頭に入れておくと、より効率的に分析が行えます。

まとめ

Athenaは基本的にストレージであるS3にデータを直接分析できるというメリットを持ったクエリサービスであるものの、RDSで用意したデータベースのデータもS3を介することで分析できることがわかっていただけたことでしょう。いずれもAWSのサービスであるため、クラウドサービスならではの低コストで柔軟性があり、開発に専念できるという面を十分に活かせます。これからビッグデータを活用したシステムを構築したいと思っている方、勉強のために気軽にデータ分析環境が欲しいと思っている方は、ぜひ今回の内容をきっかけに以上のサービスを利用してみてはいかがでしょうか。なお、各サービスの無料枠の基準はそれぞれ異なるため、詳細についてはAWS公式サイト内「AWS 無料利用枠」であらかじめ確認することをおすすめします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です