AWSは、ビジネスデータを管理するための多くのソリューションを提供しています。クラウド上でデータベースをスケーリングするのに最適なAmazon Relational Database(Amazon RDS)があります。データをウェアハウスするためのAmazon Redshiftもあります。これまでビッグデータを収集するための最新のデータ統合プラットフォームをいくつか見てきましたが、Amazon CloudFrontはどちらかというとコンテンツ配信プラットフォームです。

では、なぜ今、ビッグデータの観点からCloudFrontの話をしているのでしょうか?それは、Amazon CloudFrontがデータ管理に役立つ様々なAWSサービスと使いやすく統合されているからです。それだけではなく、CloudFrontのログは、経験豊富な企業が収集したい独自のインサイトを提供してくれます。

CloudFrontでは、プラットフォームが受信したユーザーのリクエストをすべて記録したログファイルを作成することができます。これを標準ログやアクセスログと呼び、S3バケットに保存されます。S3/Cloudfrontのログは一般的に安価でスピーディーに導入できるため、ビッグデータの結果を迅速に必要とするユーザーにとって魅力的なものとなっています。S3/クラウドのロギングを設定して、お客様やビジネスにとって重要なデータを収集するために利用する方法を見ていきましょう。

Table of Contents

  1. CloudFrontアクセスログの設定手順
  2. AWS LambdaやAthenaなどアクセスログを分析する方法
  3. CloudFrontのログの最適化
  4. CloudFrontログの編集と設定
  5. Integrate.ioとETLがもつパワー

CloudFrontアクセスログの設定手順

CloudFrontのログを有効にするのは意外と簡単で、あまりトラブルシューティングをする必要はありません。標準的なログはWeb配信やRTMPで利用できます。LambdaのようなAmazonの他のツールを使えば、完全にサーバーレスでデータをログに記録して分析する方法を作ることができます。あるいは、ETLのベンダーと協力してデータ統合を最大限に活用することもできます。

1. ビッグデータ収集

まず最初に、収集したいデータの種類を考えることです。あなたの最新のブログエントリーを読んでいるウェブサイトの訪問者の数を知る必要がありますか?何人がソーシャルメディアのフィードであなたのコンテンツを共有しているのでしょうか?それとも、一定時間内に何人の人がクリックして離れていくのかを知ることの方が重要なのでしょうか?必要なインサイトの種類に応じて、Amazon CloudWatchを利用することができます。CloudwatchはCloudFrontと統合されており、6つのデフォルトのメトリクスを使用して監視しています。また、独自のCloudFront配信を設定することも可能ですが、これには若干の追加費用がかかります。

2. AWSアカウントの作成

AWSのサービスは、ベーシックレベルで最初の12ヶ月間は無料です。自分に合ったパッケージを選ぶ必要があります。例えば、Amazon EC2では、毎月750時間のLinuxまたはWindowsベースのクラウドコンピューティングの容量を提供しています。AWSのLambdaコンピュートソリューションも無料のオプションです。LambdaはRubyやPythonなどの一般的なプログラミング言語で動作するため、デベロッパーには最適な選択肢です。一方、Amazon S3パッケージはストレージの増加に焦点を当てており、大規模なバケットデータに最適です。利用可能なAWSパッケージを調べるにはここをクリックし、無料で登録するにはここをクリックしてください。

 

3. Amazon CloudFront用のS3 Bucketの作成

S3ダッシュボードを使用して、ログファイルの保存先となるAmazon S3バケットを作成することができます。バケットの名前は一意でなければならず、すでに別の目的でS3バケットを設定している場合は、別のバケットを使用する必要があります。以下のパーミッションを持っていることを確認してください。

FULL_CONTROL

s3: GetBucketAc1

s3: PutBucketAc1

あなたがAWSアカウントのOwnerではない場合は、これらの権限を付与してもらうために、Ownerにリクエストする必要があるかもしれません。

また、SSEやサーバーサイド暗号化を有効にしている場合は、カスタマーマスターキー(CMK)のキーポリシーを調整する必要があります。

S3バケットを選択し、"Bucket for Logs"に名前が表示されていることを確認してください(例: bucket-name.S3.amazonaws.com)。

ロギングをオンにして、クッキーをログに記録したいかどうかを選択していることを確認してください。

4. ログをダウンロードする

AWSのコマンドラインインターフェイス(CLI)を使ってログをダウンロードし、データからインサイトを得ることができます。

AWS LambdaやAthenaなどアクセスログを分析する方法

本番環境を更新すると、S3バケットは有用なインサイトできれいに満たされ始めるはずです。そのデータを最大限に活用するためには、インテリジェントな分析が必要となります。AmazonではAWS Lambda、AWS Athena、そしてKinesis Analyticsの使い方が紹介されており、ウェブサイトやコンテンツに何が起こっているかを理解するのに役に立ちます。一般的なインサイトとしては、トップビューアーは誰か、CloudFrontの配信ごとの帯域幅使用量、ボットの検出などが挙げられます。

注目すべき点として、自分が所有していないCloudFrontのディストリビューションとLambda関数を関連付けることはできないということです。また、特定のCloudFrontのトリガーは、特定のLambda関数が特定の原則によって関連付けられるIAMの実行ロールに依存しています。AWSのドキュメントを横断して、あらゆる異常な状況に関する有用な記事があるので、トラブルシューティングは通常はかなり簡単です。

特定の期間のすべてのログを1つのファイルにまとめることができます。これにより、数週間分のデータを探し回るのではなく、1時間や1日に集中して分析することができるので、分析がよりシンプルになります。

Amazon AthenaはCloudFrontと連携するように設定されており、インタラクティブなクエリサービスで、設定した特定のクエリに基づいてCloudFrontのログのテーブルを作成することができます。

以下のコードはAmazonから無償で提供されており、Athenaを使ってクエリデータを保存して表示するテーブルを作成することができます。ログファイルを保存するS3バケットに合わせて「LOCATION」部分のパスを調整するだけです。

CREATEEXTERNALTABLEIFNOTEXISTS default.cloudfront_logs (

 `date`DATE,

 timeSTRING,

 location STRING,

 bytesBIGINT,

 request_ip

STRING,

 method STRING,

 host STRING,

 uri

STRING,

 statusINT,

 referrer

STRING,

 user_agent

STRING,

 query_string

STRING,

 cookie STRING,

 result_type

STRING,

 request_id

STRING,

 host_header

STRING,

 request_protocol

STRING,

 request_bytes BIGINT,

 time_taken

FLOAT,

 xforwarded_for

STRING,

 ssl_protocol

STRING,

 ssl_cipher

STRING,

 response_result_type

STRING,

 http_version

STRING,

 fle_status

STRING,

 fle_encrypted_fields

INT,

 c_port

INT,

 time_to_first_byte

FLOAT,

 x_edge_detailed_result_type

STRING,

 sc_content_type

STRING,

 sc_content_len BIGINT,

 sc_range_start BIGINT,

 sc_range_end BIGINT

)

ROWFORMATDELIMITED

FIELDSTERMINATEDBY'\t'

LOCATION 's3://CloudFront_bucket_name/CloudFront/'

TBLPROPERTIES ( 'skip.header.line.count'='2' )

Rubyユーザーはrequest-log-analyzerを使ってデータを扱う作業を始めたいと思うかもしれませんが、必ずしもCloudFrontの標準ログフォーマットをサポートしているわけではないことに注意してください。GitHubにあるこの回避策は、Rubyユーザーにとって有用かもしれません。

 

CloudFrontのログの最適化

無料期間を過ぎると、Amazonは月ごとにS3_bucketストレージの料金をチャージします。なるべくデータを圧縮しておくのが理にかなっています。Athenaユーザーは、クエリを行う際にデータを圧縮すればするほど、1クエリあたりのコストが安くなるので、クエリのコストも節約できます。

CloudFrontのアクセスログを、特定の時間、日、週などの時間グループに分割することに触れましたが、ドメインごとにデータを分割することも可能です。また、ドメイン名やIPアドレスなどのフィルターでデータを分割することで、より深いインサイトと迅速な分析が可能になります。Athena を使用している場合でも、データの表示や分析に他のシステムを使用している場合でも、データのスキャン回数を減らすことで、より速く、より少ないレイテンシーでデータを処理することができます。クリエイティブなパーティショニングにより、クエリに重要なデータを処理することができます。このようにしてコストとリソースの使用量を削減することは、すべてのデータが関連性があり有用であることを認識した上で、レビューするデータ量をスケールアップすることができることを意味します。これは、素晴らしいビッグデータのインサイトにつながる可能性があります。

CloudFrontログの編集と設定

ビジネスでは、物事は常に変化しています。だからこそ、アクセスログの以下の機能をいつでも簡単に変更できるのはメリットになります。

  • ログ機能の有効化または無効化
  • データが保存されているS3のバケットを変更する
  • ログファイルのプレフィックスを変更する

CloudFront APIは、CloudFrontのディストリビューションを更新する際に最もよく使われるAPIですが、それを使って多少の変更を設定することができるでしょう。

もちろん、インサイトや分析のためのデータソースはCloudFrontだけではないかもしれません。AWSの様々なサービスを利用して、様々な目的でデータを収集したり参照したりすることはよくあることです。LambdaやLambda@Edgeのログから同様のアクセスログをストリーム配信することができます。また、Application Load Balancerのログ(ALB)にアクセスする場合もあるでしょう。AWSの管理コンソールをいじれば、このデータを一つにまとめることが可能で、パーティショニングされたテーブルを作成して、すべてのデータを一か所に表示することができます。これには、S3.Bucketに接続されている全てのソースにパーミッションを与えたIAMロールを作成する必要があります。

このようにしてデータをまとめることは、ETL(Extract, Transform, Load)の一形態です。クラウドベースのサーバーレスのデータ変換は、ビジネスデータを処理して統合する最も効率的な方法です。また、拡張性に優れているため、社内のリソースを増強することなく、ビッグデータの収集を開始することができます。

Integrate.ioとETLがもつパワー

 

CloudFrontのログ設定や分析方法については、これまで説明してきましたが、これは、Webサイトからデータを抽出し、実行可能な形式に変換し、ビジネスインテリジェンスツールに読み込ませるといったデータ統合の1つの形です。これにより、競合他社よりも優位に立つことができるだけでなく、より迅速な分析が可能になるため、自分が本当に情熱を注いでいるビジネスに集中できる時間が増えるのです。

Integrate.ioのようなETLが企業のデータの管理方法をどのように変革できるかについて詳細を知りたい方は、ぜひ個別デモにお申し込みいただき、自社のユースケースに有用かどうかを確認してみてはいかがでしょうか?。