https://dev.classmethod.jp/articles/cloudfront-cache-key-policy/
カスタムのキャッシュポリシーとしてヘッダー「Hoge」を追加
ヘッダー「Hoge」の値を変更してリスエストし、キャッシュが使用されないことを確認
ヘッダー「Fuga」の値を変更してリスエストし、キャッシュが使用されることを確認
-- 1. コマンド等のインストール
-- 1.1 aws cli version 2 インストール
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
-- 1.2 jqインストール
sudo yum -y install jq
-- 2. S3 バケットを作成する
aws s3 ls
aws s3 mb s3://bucket123
-- 3. インデックスドキュメントの設定
vim index.html
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>My Website Home Page</title>
</head>
<body>
<h1>Welcome to my website</h1>
<p>Now hosted on Amazon S3!</p>
</body>
</html>
aws s3api put-object --bucket bucket123 --key index.html --body index.html --content-type text/html
-- 4. ディストリビューションの作成
aws cloudfront create-distribution \
--origin-domain-name bucket123.s3.ap-northeast-1.amazonaws.com \
--default-root-object index.html
aws cloudfront list-distributions
aws cloudfront get-distribution \
--id 11111111111111
aws cloudfront get-distribution-config \
--id 11111111111111
-- 5. OAIの作成
aws cloudfront create-cloud-front-origin-access-identity \
--cloud-front-origin-access-identity-config '{
"CallerReference": "caller01",
"Comment": "oai01"
}'
aws cloudfront list-cloud-front-origin-access-identities
aws cloudfront get-cloud-front-origin-access-identity \
--id 22222222222222
-- 6. OAIをディストリビューションに追加する
aws cloudfront get-distribution \
--id 11111111111111
aws cloudfront get-distribution-config \
--id 11111111111111
aws cloudfront get-distribution-config \
--id 11111111111111 | jq -r .DistributionConfig > distribution.json
Origins -> Items -> CustomHeaders の下の
CustomOriginConfigを削除して下記S3OriginConfigを追加
"S3OriginConfig": {
"OriginAccessIdentity": "origin-access-identity/cloudfront/22222222222222"
},
aws cloudfront update-distribution \
--id 11111111111111 \
--if-match $(aws cloudfront get-distribution-config --id 11111111111111 | jq -r .ETag) \
--distribution-config file://distribution.json
-- 7. OAI に Amazon S3 バケット内のファイルの読み込みアクセス許可を付与する
{
"Version": "2012-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity 22222222222222"
},
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::bucket123/*"
}
]
}
aws s3api put-bucket-policy \
--bucket bucket123 \
--policy file://b.json
aws s3api get-bucket-policy \
--bucket bucket123
-- 8. キャッシュポリシーの作成
aws cloudfront create-cache-policy \
--cache-policy-config '{
"Comment": "cp01",
"Name": "cp01",
"DefaultTTL": 86400,
"MaxTTL": 31536000,
"MinTTL": 1,
"ParametersInCacheKeyAndForwardedToOrigin": {
"EnableAcceptEncodingGzip": true,
"EnableAcceptEncodingBrotli": true,
"HeadersConfig": {
"HeaderBehavior": "whitelist",
"Headers": {
"Quantity": 1,
"Items": [
"Hoge"
]
}
},
"CookiesConfig": {
"CookieBehavior": "none"
},
"QueryStringsConfig": {
"QueryStringBehavior": "none"
}
}
}'
aws cloudfront list-cache-policies \
--type custom
aws cloudfront get-cache-policy \
--id 33333333-3333-3333-3333-333333333333
aws cloudfront get-cache-policy-config \
--id 33333333-3333-3333-3333-333333333333
-- 9. オリジンリクエストポリシーの作成
aws cloudfront create-origin-request-policy \
--origin-request-policy-config '{
"Comment": "orp01",
"Name": "orp01",
"HeadersConfig": {
"HeaderBehavior": "whitelist",
"Headers": {
"Quantity": 1,
"Items": [
"Hoge"
]
}
},
"CookiesConfig": {
"CookieBehavior": "none"
},
"QueryStringsConfig": {
"QueryStringBehavior": "none"
}
}'
aws cloudfront list-origin-request-policies \
--type custom
aws cloudfront get-origin-request-policy \
--id 44444444-4444-4444-4444-444444444444
aws cloudfront get-origin-request-policy-config \
--id 44444444-4444-4444-4444-444444444444
-- 10. ディストリビューションにキャッシュポリシーとオリジンリクエストポリシーをアタッチする
aws cloudfront get-distribution \
--id 11111111111111
aws cloudfront get-distribution-config \
--id 11111111111111
aws cloudfront get-distribution-config \
--id 11111111111111 | jq -r .DistributionConfig > distribution.json
"DefaultCacheBehavior"の末尾の下記を修正
"ForwardedValues": {
"QueryString": false,
"Cookies": {
"Forward": "none"
},
"Headers": {
"Quantity": 0
},
"QueryStringCacheKeys": {
"Quantity": 0
}
},
"MinTTL": 0,
"DefaultTTL": 86400,
"MaxTTL": 31536000
↓
"CachePolicyId": "33333333-3333-3333-3333-333333333333",
"OriginRequestPolicyId": "44444444-4444-4444-4444-444444444444"
aws cloudfront update-distribution \
--id 11111111111111 \
--if-match $(aws cloudfront get-distribution-config --id 11111111111111 | jq -r .ETag) \
--distribution-config file://distribution.json
-- 11. 動作確認
curl -v -H "Hoge:AAA" -X GET http://xxxxxxxxxxxxxx.cloudfront.net/index.html
curl -v -H "Hoge:BBB" -X GET http://xxxxxxxxxxxxxx.cloudfront.net/index.html
curl -v -H "Hoge:CCC" -X GET http://xxxxxxxxxxxxxx.cloudfront.net/index.html
curl -v -H "Fuga:AAA" -X GET http://xxxxxxxxxxxxxx.cloudfront.net/index.html
curl -v -H "Fuga:BBB" -X GET http://xxxxxxxxxxxxxx.cloudfront.net/index.html
curl -v -H "Fuga:CCC" -X GET http://xxxxxxxxxxxxxx.cloudfront.net/index.html
-- 12. クリーンアップ
-- ディストリビューションの無効化
aws cloudfront get-distribution \
--id 11111111111111
aws cloudfront get-distribution-config \
--id 11111111111111
※ distribution.jsonはget-distribution-configコマンドのDistributionConfigから取得し、Enabledをfalseに変更する
aws cloudfront get-distribution-config \
--id 11111111111111 | jq -r .DistributionConfig > distribution.json
sed -i 's/"Enabled": true/"Enabled": false/' distribution.json
aws cloudfront update-distribution \
--id 11111111111111 \
--if-match $(aws cloudfront get-distribution-config --id 11111111111111 | jq -r .ETag) \
--distribution-config file://distribution.json
※ if-matchにはETagの値をセット
無効化されるまで待つ
-- ディストリビューションの削除
aws cloudfront get-distribution \
--id 11111111111111
aws cloudfront get-distribution-config \
--id 11111111111111
aws cloudfront delete-distribution \
--id 11111111111111 \
--if-match $(aws cloudfront get-distribution-config --id 11111111111111 | jq -r .ETag)
aws cloudfront list-distributions
-- OAIの削除
aws cloudfront list-cloud-front-origin-access-identities
aws cloudfront delete-cloud-front-origin-access-identity \
--id 22222222222222 \
--if-match $(aws cloudfront get-cloud-front-origin-access-identity --id 22222222222222 | jq -r .ETag)
-- キャッシュポリシーの削除
aws cloudfront list-cache-policies \
--type custom
aws cloudfront delete-cache-policy \
--id 33333333-3333-3333-3333-333333333333 \
--if-match $(aws cloudfront get-cache-policy --id 33333333-3333-3333-3333-333333333333 | jq -r .ETag)
-- オリジンリクエストポリシーの削除
aws cloudfront list-origin-request-policies \
--type custom
aws cloudfront delete-origin-request-policy \
--id 44444444-4444-4444-4444-444444444444 \
--if-match $(aws cloudfront get-origin-request-policy --id 44444444-4444-4444-4444-444444444444 | jq -r .ETag)
aws s3 rb s3://bucket123 --force