はじめに
CloudFront
で手動でキャッシュをパージしたいケースがあった。
今回は、コンソール上からCloudFront
の任意のパスのキャッシュをパージしてみる。
構成について
以前、EC2+Cloudfront+WAFの構成を構築するで構築した。
今回は、上記からWAF
を除いた構成で構築を行う。
環境
AWS
- EC2
- Cloudfront
- ACM
準備
以下の準備が完了していること
- AWSのアカウントが作成されていること
- EC2が構築されていること
- CloudFrontが構築されていること
- ACMで任意のドメインの証明書を作成済みであること
全体の構成
EC2の構成
項目 | 設定値 |
---|---|
名前 | server |
OS | AmazonLinux2023 AMI |
アーキテクチャ | 64ビット(Arm) |
インスタンスタイプ | t4g.nano |
キーペア | server(新規で作成) |
セキュリティグループ | ssh, cloudfrontからのみ |
ストレージ | 8GB (gp3) |
CloudFront
で動作確認をする都合上、SSH
等で接続をし、Apache
, PHP
をインストールしておく。
dnf install -y httpd php
CloudFrontの構成
設定は以下とする。
項目 | 設定値 |
---|---|
Origin domain | [作成したEC2ユーザのパブリック IPv4 DNS] (※1) |
プロトコル | HTTPのみ (※2) |
名前 | [作成したEC2ユーザのパブリック IPv4 DNS] |
Enable Origin Shield | いいえ |
オブジェクトを自動的に圧縮 | Yes |
ビューワープロトコルポリシー | Redirect HTTP to HTTPS (※3) |
許可された HTTP メソッド | GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE (※4) |
ビューワーのアクセスを制限する | No |
キャッシュキーとオリジンリクエスト | Cache policy and origin request policy (recommended) |
Alternative domain name (CNAMEs) - optional | [設定するドメイン名] |
Custom SSL certificate - optional | ACMで発行した証明書を選択 |
※1Origin domain
について、オリジンとするEC2サーバのドメイン名となる。Distribution settings reference
を見ると、EC2
サーバの設定については、パブリック IPv4 DNS
を指定しているようだが、独自のWebサーバ(通常の設定したドメイン名)でもよさそう。
- Distribution settings reference
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesDomainName
※2Cloudfront
-オリジン
間のプロトコルとなる。https
で接続させたい場合は、EC2
内の証明書とCloudfront
で利用する証明書を一致させないといけないので、また別の手順が必要となる。
- CloudFrontのオリジンをEC2にしてHTTPS通信を強制する構成について
https://dev.classmethod.jp/articles/how-to-create-cloudfront-ec2-e2e-https-connection/
※3
ビューワー・・・接続するクライアントのこと。http
and https
とするとどちらでも接続ができるが、https
としたいので、Redirect HTTP to HTTPS
にしておく。HTTPS only
でもよいと思うのだが。
※4GET
,HEAD
以外に、POST
やPUT
なども利用できるようにしないと、オリジンへの接続時にアプリケーションの登録更新で正しく動作しないため。
静的コンテンツの場合は、GET
, HEAD
で事足りるが、今回は分離していない構成ということでこれを選択。
テスト用のTOPページを作成
ディレクトリ構成
├── index.html
├── style.css
├── script.js
└── images/
└── hero.jpg
静的ファイル
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Welcome to Nature</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<header class="hero">
<div class="overlay">
<h1 class="title">自然とともに生きる</h1>
<p class="subtitle">Find peace in the great outdoors</p>
<a href="#explore" class="btn">探検する</a>
</div>
</header>
<section id="explore" class="content fade-in">
<h2>ようこそ</h2>
<p>このページはアウトドアの魅力を紹介するデモサイトです。</p>
</section>
<script src="script.js"></script>
</body>
</html>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body, html {
font-family: 'Helvetica Neue', sans-serif;
height: 100%;
color: #fff;
}
.hero {
background: url('images/hero.jpg') center/cover no-repeat;
height: 100vh;
position: relative;
}
.overlay {
background-color: rgba(0, 0, 0, 0.5);
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
padding: 0 20px;
}
.title {
font-size: 3rem;
margin-bottom: 1rem;
}
.subtitle {
font-size: 1.5rem;
margin-bottom: 2rem;
}
.btn {
background-color: #28a745;
color: white;
padding: 12px 24px;
text-decoration: none;
border-radius: 5px;
font-weight: bold;
transition: background-color 0.3s ease;
}
.btn:hover {
background-color: #218838;
}
.content {
background-color: #222;
padding: 60px 20px;
text-align: center;
}
.fade-in {
opacity: 0;
transform: translateY(20px);
transition: all 1s ease;
}
.fade-in.visible {
opacity: 1;
transform: translateY(0);
}
// フェードイン処理
window.addEventListener('scroll', () => {
const elements = document.querySelectorAll('.fade-in');
elements.forEach(el => {
const position = el.getBoundingClientRect().top;
const windowHeight = window.innerHeight;
if (position < windowHeight - 100) {
el.classList.add('visible');
}
});
});
画像素材について
以下を利用させていただいた。
https://www.pexels.com/ja-jp/photo/2325447/
CloudFrontのキャッシュのパージ
ここまでで、EC2
をオリジンとしたCloudFront
の構築ができたので、実際にキャッシュをパージしてみる。
1. 「Cloudfront」サービスで「ディストリビューション」を選択する
「ディストリビューション」→ 先ほど作成したディストリビューションのID部分を選択する。

2. キャッシュ削除のタブを選択し、「キャッシュ削除を作成」を選択する

3. オブジェクトパスに削除対象のパスを入力する
プレースホルダにある通り、CloudFront
からアクセスするパスを入力する。
例えば、/*
であれば、全てのキャッシュを削除することができる。
今回は、全てのキャッシュを削除するように設定をしてみる。

/*
を入力した。

4. 「キャッシュ削除を作成」を選択する

5. キャッシュ削除のステータスが「完了済み」となればOK

動作確認
CloudFront
のキャッシュが本当にパージされているかを確認する。
キャッシュパージ前
既にキャッシュされている場合は、レスポンスヘッダのX-cache
にHit from cloudfront
が返ってくる。
※ブラウザを開き、F12
で開発者ツールを開いてNetwork
タブを選択する。

キャッシュパージ後
キャッシュのパージ後は、レスポンスヘッダのX-cache
にMiss from cloudfront
が返ってくる。

実際にパージできていることを確認できた。
参考
Amazon CloudFrontとキャッシュについて
https://heartbeats.jp/hbblog/2023/04/cache-with-cloudfront.htmlレスポンスヘッダーポリシーを理解する
https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/understanding-response-headers-policies.html
おわりに
最近、CloudFront
をよく利用しているので、理解を深めるためにキャッシュの削除を実践してみた。
次回もCloudFront
に関連する記事を書いていく。