CloudFront のオリジンに EC2 を置いてアクセスログを Athena で分析してみた ①

CloudFront のオリジンに EC2 を置いてアクセスログを Athena で分析するまでをやってみました。今回は CloudFront 〜 アクセスログ取得までとなります。
2022.01.13

いつもはそんなに寒くならないのに、今冬はなぜか-16度とかになっているバンクーバーにいる者です。

先日 CloudFront のオリジンに EC2 を置いてアクセスログを取得して Athena で分析するまでを検証する機会がありました。今回はそのうちの CloudFront 〜 アクセスログ取得までを記事にしたいと思います。

EC2

インスタンスの起動

オレゴンリージョンのパブリックサブネット上に t2.micro の EC2 インスタンスを起動させました。

インスタンス作成

※ VPC 作成 〜 EC2 インスタンスの起動までの手順は以下の弊社ブログに説明がありますので、必要に応じてご確認ください。

SSH 接続

インスタンス名の左横にあるチェックボックスにチェックを入れたら、「接続」ボタンをクリックします。そして「SSH クライアント」のタブを選択します。
表示された手順に沿ってコマンドを実行すると SSH 接続が可能です。私はターミナルを使用して接続を行いました。

EC2 のロゴが確認できたら、接続成功です。

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/

Apache を起動させる

sudo yum update でパッケージ更新を行います。

$ sudo yum update

sudo yum install httpd で Apache をインストールします。

$ sudo yum install httpd

cd /var/www/html でドキュメントルートに移動します。

$ cd /var/www/html

ls -la でファイルおよびディレクトリを確認します。

$ ls -la
total 0
drwxr-xr-x 2 root root  6 Oct  8 22:04 .
drwxr-xr-x 4 root root 33 Jan  2 08:13 ..

sudo vim index.html で Web ページとなるファイルを作成します。

$ sudo vim index.html

iと入力して insert モードに変更し、以下の内容をペーストします。
そして「esc」を押した後に:wqと入力して脱出します。

<p>test</p>

cat index.html を実行して<p>test</p>が返却されることを確認してください。

$ cat index.html
<p>test</p>

念の為 ls -la で index.html が生成されていることを確認します。

$ ls -la
total 4
drwxr-xr-x 2 root root 24 Jan  2 08:17 .
drwxr-xr-x 4 root root 33 Jan  2 08:13 ..
-rw-r--r-- 1 root root 12 Jan  2 08:17 index.html

sudo systemctl start httpdで Apache の起動を行い、sudo systemctl enable httpd.serviceで Apache の自動起動もオンにしておきます。

$ sudo systemctl start httpd

$ sudo systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

ブラウザで EC2 インスタンスのパブリック IP を叩いて、「test」と表示されることが確認できたら OK です。

Apacheテスト

S3

CloudFront のログを保存するための S3 バケットを作成します。
バケット名を指定し、先ほど EC2 を作成したのと同じリージョンを選択します。

バケット名

また、「オブジェクト所有者」の項目で「ACL を有効」を選択してください。
※ ここを無効にすると CloudFront の設定時にエラーが出るので注意です。

ACL

その他の設定はそのままで「バケットを作成」を選択します。

CloudFront

CloudFront コンソールを開き、「ディストリビューションを作成」を選択します。オリジンドメインに先ほど起動させた EC2 インスタンスのパブリック DNS を入力します。
※ 検索バーの候補には表示されないので、EC2 コンソールからパブリック DNS をコピーしてここにペーストしてください。

オリジン

「標準ログ記録」をオンにして S3 バケットの項目で先ほど作成した S3 バケットを指定します。
その他の設定はそのままで「ディストリビューションを作成」を選択します。

標準ログ

ステータスがデプロイから有効になるのを待ちます。

CloudFrontが有効になるのを待つ

ブラウザで CloudFront のドメインを叩いて、「test」と表示されることを確認します。

CloudFrontからのテスト

アクセスログが生成されているか確認

少し時間を置いて作成した S3 バケットにアクセスして、バケット内に「.gz」で終わるオブジェクトが作成されていれば成功です。

アクセスログの確認

終わりに

S3 の権限周りで少々戸惑うところがありましたが、ここまで無事に終えられてよかったです。
Lambda で S3 オブジェクトの配置を整えて Athena での分析を行うまでは、次回の記事にします。

追記:続編を投稿しました。

参照

標準ログ (アクセスログ) の設定および使用