CloudFrontで簡単なディストリビューションを作成しログで動作確認する

2021.02.20

こんにちは、八木です。

2/15よりClassmethod Europe(Berlin)所属となりました! ドイツへは昨年末に渡航し、ビザを取得したり生活基盤を整えたりしていました。 コロナ関連でヨーロッパは厳しい状況が続いてはいますが、こちらはとても自然が多く空気が綺麗で、食べ物も美味しくて良い環境です。

本日は「CloudFrontで簡単なディストリビューションを作成しログで動作確認する」ことについて記載してみたいと思います。 この記事は基本編ではありますが、CloudFrontはお問い合わせもたくさんいただくので、どなたかのご参考になれば幸いです!

CloudFront で簡単なディストリビューションを作成する

以下のAWS公式ドキュメントより、手順に沿って作成することが可能です。

簡単な CloudFront ディストリビューションの開始方法

こちらのトピックは前提条件と3つのステップから構成されています。

トピック

前提条件

ステップ 1: コンテンツを Amazon S3 にアップロードし、オブジェクトにアクセス許可を付与する

ステップ 2: CloudFront ディストリビューションを作成する

ステップ 3: リンクをテストする

設定して、その後ログを見ていきたいと思います!

設定してみました

ステップ 1: コンテンツを Amazon S3 にアップロードし、オブジェクトにアクセス許可を付与する

AWSコンソールでS3へ移動し、「バケットを作成」を押下します。バケット名を入力、リージョンを選択します。 私はドイツにいるのでフランクフルト(eu-central-1)を選択しています。 なおバケット名は任意のもので構いませんが、全てのAWSアカウントでユニークである必要があります。

この後アップロードするコンテンツを公開したいので、「パブリックアクセスをすべてブロック」チェックを外し、「現在の設定により、このバケットと中のオブジェクトがパブリックになる可能性があることを了承します。」にチェックを入れます。 「バケットの作成」をクリックして、バケットを作成します。

作成したバケットをクリックして、「アップロード」を押下します。「ファイルを追加」を押下してファイルを追加し、「アップロード」を押下してアップロードします。

アップロードしたjpgファイルをクリックして、「公開する」を押下します。

公開したらブラウザより以下にアクセスして公開されていることを確認します。 https://bucket name.s3-AWS Region.amazonaws.com/object name

ステップ 2: CloudFront ディストリビューションを作成する

コンソールから、今度はCloudFrontへ移動します。 「CloudFront Distribution」から、「Create Distribution」を押下します。 「GetStarted」を押下して設定画面へ入ります。

Origin Settings セクションでは、「Origin Domain Name」に先ほど作成したS3バケットを選択します。 するとOrigin IDも自動で入ります。それ以外の値はデフォルトでとりあえずOK。

Default Cache Behavior Settings セクションはデフォルトのままで進めます。

Distribution Settings セクションは以下のように入力しました。

「Price Class」→とりあえず自端末から稼働確認したいので、「Use Only U.S., Canada and Europe」を選択。 東京リージョンで使いたい場合はAsiaの入った2番目の行を、全てのエッジロケーションで使いたい場合は最下部の「All Edge Locations」を選択します。

「SSL Certificate」→ Default CloudFront Certificate (*.cloudfront.net) を選択。 カスタム証明書を使いたい場合は、バージニア北部リージョンでACMの登録をする必要があります。(今回はないので、非アクティブ表示になっています)

その下の項目もデフォルト値を受け入れていますが、 「Standard Logging」と「Cookie Logging」をオンにしています。これでログが確認できます。 このログはS3の指定したバケットに転送され、確認できます。「S3 Bucket for Logs」でバケットを選択します。

「Create Distribution」を押下して、ディストリビューションを作成します。

ステップ 3: リンクをテストする

作成したディストリビューションのStatus がDeployed に変わったら、テストが可能です。

今回はこの公式ドキュメントから公開されているhtmlを使ってテストしました。

1.次の HTML を新規ファイルにコピーします。

<html>
<head>My CloudFront Test</head>
<body>
<p>My text content goes here.</p>
<p><img src="https://<domain name>/<object name>" alt="my test image"/></p>
</body>
</html>

2.テキストを、.html ファイル名拡張子のついたファイルに保存します。

3.ブラウザでウェブページを開いて、コンテンツが見られるか確認します。 ブラウザに、イメージファイルが埋め込まれたページが表示されます。これは CloudFront がオブジェクトを供給するのに適切と判断したエッジロケーションから供給されたものです。

以下のように表示ができました!

ログの確認

ログは指定したS3フォルダに、リクエストのたびに以下のように配信されGzipされて格納されます。 (※以下のログのIPアドレスなどの個人情報をいくつか削除しています。)

#Version: 1.0
#Fields: date time x-edge-location sc-bytes c-ip cs-method cs(Host) cs-uri-stem sc-status cs(Referer) cs(User-Agent) cs-uri-query cs(Cookie) x-edge-result-type x-edge-request-id x-host-header cs-protocol cs-bytes time-taken x-forwarded-for ssl-protocol ssl-cipher x-edge-response-result-type cs-protocol-version fle-status fle-encrypted-fields c-port time-to-first-byte x-edge-detailed-result-type sc-content-type sc-content-len sc-range-start sc-range-end
2021-02-19	12:45:46	FRA50-C1	261	IPAddress	GET	XXXXXXXXXX.cloudfront.net	/XXXXXXXXXX.jpeg	304	-	Mozilla/5.0%20(Macintosh;%20Intel%20Mac%20OS%20X%2010_15_7)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/88.0.4324.182%20Safari/537.36	-	-	Hit	vc7nPMMBx1_5n6Xewkm5sIhJbXupNrhkUzc8UdBqNM1_Uq-04dqdtg==	XXXXXXXXXX.cloudfront.net	https	444	0.004	-	TLSv1.3	TLS_AES_128_GCM_SHA256	Hit	HTTP/2.0	-	-	51606	0.000	Hit	-	-	-	-

この中で、キャッシュヒットしているかは以下項目で確認できます。

x-edge-result-type → サーバーが、最後のバイトを渡した後のレスポンスの結果タイプ

x-edge-response-result-type → サーバーが、ビューワーにレスポンスを返す直前のレスポンス結果タイプ

x-edge-detailed-result-type x-edge-result-type フィールドが Errorの場合に詳細を返す

これらの項目がHitしていれば、無事キャッシュから返っていることが確認できます!

結論

CloudFront で簡単なディストリビューションを作成し、ログからキャッシュからコンテンツが返されていることを確認する内容をご紹介しました。

設定時はログをオンにすると、x-edge-result-typeなどの項目からキャッシュがヒットしているかを確認できるので便利かと思います。

ログについて、詳しくは以下の公式ドキュメントをご参照ください。

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