Amazon CloudFront でコンテンツをキャッシュ配信する
記事の「実践」を 1 項目ずつ進めるためのページです。AWS マネジメントコンソールで操作したら、右の一覧にチェックを入れてください。チェックはこのブラウザに保存されます。
前提条件
- リージョン:
ap-northeast-1(東京) - IAM ユーザーまたはロールに CloudFront、S3 の操作権限があること
作成するリソース一覧
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| S3 バケット | cloudfront-basic-origin-<アカウントID> | コンテンツのオリジン |
| CloudFront ディストリビューション | cloudfront-basic | コンテンツのキャッシュ配信 |
| オリジンアクセスコントロール(OAC) | (ディストリビューション作成時に自動作成) | S3 への安全なアクセス制御 |
ステップ1: オリジン用 S3 バケットの作成
上部の検索バーに S3 と入力し、表示された「S3」を選択します。
「バケットを作成」をクリックします。
以下の内容を入力します。
- バケット名:
cloudfront-basic-origin-<アカウントID>(グローバルで一意になるよう、アカウント ID を付与) - AWS リージョン:
アジアパシフィック(東京)ap-northeast-1
「バケット名前空間」は既定の「グローバル名前空間」のままにします。その他の項目もデフォルトのままにし、「パブリックアクセスをすべてブロック」が有効であることを確認します。
「バケットを作成」をクリックします。
ステップ2: テスト用コンテンツのアップロード
作成したバケットを選択し、「アップロード」をクリックします。
以下の内容のテスト用 HTML ファイルをアップロードします。事前にローカルで index.html を作成してください。
<!DOCTYPE html>
<html>
<head><title>CloudFront Basic Test</title></head>
<body>
<h1>Hello from CloudFront!</h1>
<p>This content is served via Amazon CloudFront.</p>
</body>
</html>
「アップロード」をクリックしてファイルをアップロードします。「アップロードに成功しました」と表示されることを確認します。
ステップ3: CloudFront ディストリビューションの作成
上部の検索バーに CloudFront と入力し、表示された「CloudFront」を選択します。
「ディストリビューションを作成」をクリックします。作成画面は 5 つのステップに分かれており、表示の多くは英語です。
ステップ 1「Choose a plan」では、既定の「Pay as you go」(使った分だけの従量課金)が選ばれていることを確認し、「Next」をクリックします。
ステップ 2「Get started」では、「Distribution name」に cloudfront-basic と入力し、「Next」をクリックします。その他の項目はデフォルトのままにします。
ステップ 3「Specify origin」で以下を設定します。
- Origin type:
Amazon S3(既定のまま) - S3 origin: 「Browse S3」から先ほど作成したバケットを選択(
cloudfront-basic-origin-<アカウントID>.s3.ap-northeast-1.amazonaws.com) - Allow private S3 bucket access to CloudFront: チェックが入っていることを確認(既定でオン)
「Allow private S3 bucket access to CloudFront」にチェックが入っていると、オリジンアクセスコントロール(OAC)が自動で作成され、S3 バケットポリシーも CloudFront からのアクセスだけを許可する内容に自動で更新されます。「オリジン設定」と「Cache settings」は既定の推奨設定のままにし、「Next」をクリックします。
ステップ 4「Enable security」では、WAF によるセキュリティ保護が既定で有効になっており、月額の料金が表示されます。ハンズオンではコストを抑えるため、セキュリティ保護を有効にしないほうを選び直してから、「Next」をクリックします。
ステップ 5「Review and create」で内容を確認し、「Create distribution」をクリックします。
「新しいディストリビューションが正常に作成されました。」と表示され、ディストリビューションの詳細画面に切り替わります。「ディストリビューションドメイン名」(例: d1234567890abc.cloudfront.net)が発行されています。
ステップ4: デフォルトルートオブジェクトの設定
デフォルトルートオブジェクトは作成画面では設定できないため、作成後に設定します。
ディストリビューションの詳細画面の「一般」タブで、「設定」セクションの「編集」をクリックします。
- Default root object - optional:
index.html
その他の項目はデフォルトのままにして「変更を保存」をクリックします。「ディストリビューション設定が正常に更新されました。」と表示されます。
ステップ5: 自動で設定された S3 バケットポリシーの確認
S3 コンソールに移動し、オリジンバケットを選択します。「アクセス許可」タブを選択し、「バケットポリシー」セクションを確認します。
ディストリビューションの作成時に、以下のようなポリシーが自動で設定されています。CloudFront のサービスプリンシパルに対して、このディストリビューションからのリクエストに限って GetObject を許可する内容です。
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "AllowCloudFrontServicePrincipal",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::cloudfront-basic-origin-<アカウントID>/*",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:cloudfront::<アカウントID>:distribution/<ディストリビューションID>"
}
}
}
]
}
ステップ6: ディストリビューションのデプロイ確認
CloudFront コンソールに戻り、作成したディストリビューションの詳細画面を確認します。
デプロイ中は「最終変更日」に「デプロイ」と表示されます。数分待ってデプロイが完了すると、「最終変更日」に日時が表示されます。
ステップ7: コンテンツの配信確認
ディストリビューションの詳細画面から「ディストリビューションドメイン名」をコピーします。
Web ブラウザで https://<ディストリビューションドメイン名>/ にアクセスします。
先ほどアップロードした index.html の内容が表示されることを確認します。
ブラウザの開発者ツール(F12)のネットワークタブを確認すると、レスポンスヘッダーに以下の CloudFront 関連ヘッダーが含まれています。
X-Cache:Hit from cloudfrontまたはMiss from cloudfrontX-Amz-Cf-Pop: リクエストを処理したエッジロケーション
キャッシュに無い状態のアクセスは Miss from cloudfront になり、何度かアクセスするとキャッシュから返されて Hit from cloudfront に変わります。同じエッジロケーションでも、リクエストを受けたサーバーにキャッシュが無いうちは Miss になることがあります。
なお、S3 バケットのオブジェクト URL に直接アクセスすると 403 Forbidden になり、CloudFront 経由でしか読めないことも確認できます。
ステップ8: キャッシュの削除(無効化)
コンソールでは、キャッシュの無効化は「キャッシュ削除」と表示されます。
ディストリビューションの詳細画面で「キャッシュ削除」タブを選択し、「キャッシュ削除を作成」をクリックします。
- Object paths to invalidate:
/index.html(「Selection method」は既定の「By paths」のまま)
「キャッシュ削除を作成」をクリックします。
ステータスが「進行中」から「完了済み」に変わると、次回のアクセスではオリジンからコンテンツが再取得されます。