AWSは、ビジネスデータを管理するための多くのソリューションを提供しています。クラウド上でデータベースをスケーリングするのに最適なAmazon Relational Database(Amazon RDS)があります。データをウェアハウスするためのAmazon Redshiftもあります。これまでビッグデータを収集するための最新のデータ統合プラットフォームをいくつか見てきましたが、Amazon CloudFrontはどちらかというとコンテンツ配信プラットフォームです。
では、なぜ今、ビッグデータの観点からCloudFrontの話をしているのでしょうか?それは、Amazon CloudFrontがデータ管理に役立つ様々なAWSサービスと使いやすく統合されているからです。それだけではなく、CloudFrontのログは、経験豊富な企業が収集したい独自のインサイトを提供してくれます。
CloudFrontでは、プラットフォームが受信したユーザーのリクエストをすべて記録したログファイルを作成することができます。これを標準ログやアクセスログと呼び、S3バケットに保存されます。S3/Cloudfrontのログは一般的に安価でスピーディーに導入できるため、ビッグデータの結果を迅速に必要とするユーザーにとって魅力的なものとなっています。S3/クラウドのロギングを設定して、お客様やビジネスにとって重要なデータを収集するために利用する方法を見ていきましょう。
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が企業のデータの管理方法をどのように変革できるかについて詳細を知りたい方は、ぜひ個別デモにお申し込みいただき、自社のユースケースに有用かどうかを確認してみてはいかがでしょうか?。