これはAWS Certificate Manager (ACM)入門ハンズオン資料の一部です。
最初から続けて行っている場合「0.準備」の各項は作業不要です。第1項へ進んでください。
- 準備
=======
0.1. ドメイン名の変数への格納
変数へドメイン名を格納します。
ここでは example.tk とします。自分のドメイン名に読み替えてください。
DOMAINNAME="example.tk" && echo ${DOMAINNAME}
example.tk
0.2. ディストリビューションIDの変数への格納
CF_DIST_ID=`aws cloudfront list-distributions \
--query DistributionList.Items[].Id --output text` && echo ${CF_DIST_ID}
EQSY786QZ6BPJ
- CloudFrontの削除
=================
1.1. ディストリビューション無効化のためのJSONファイルの作成
稼働しているディストリビューションを削除することはできません。
このため、まずは無効に設定する必要があります。
無効に設定変更するためのJSONファイルを作成します。
cat << EOF > ./cfd.json
{
"Comment": "",
"CacheBehaviors": {
"Quantity": 0
},
"Logging": {
"Bucket": "",
"Prefix": "",
"Enabled": false,
"IncludeCookies": false
},
"WebACLId": "",
"Origins": {
"Items": [
{
"OriginPath": "",
"S3OriginConfig": {
"OriginAccessIdentity": ""
},
"Id": "www.${DOMAINNAME}",
"DomainName": "www.${DOMAINNAME}.s3.amazonaws.com",
"CustomHeaders": {
"Quantity": 0
}
}
],
"Quantity": 1
},
"DefaultRootObject": "",
"PriceClass": "PriceClass_All",
"Enabled": false,
"DefaultCacheBehavior": {
"TrustedSigners": {
"Enabled": false,
"Quantity": 0
},
"TargetOriginId": "www.${DOMAINNAME}",
"ViewerProtocolPolicy": "allow-all",
"ForwardedValues": {
"Headers": {
"Quantity": 0
},
"Cookies": {
"Forward": "none"
},
"QueryStringCacheKeys": {
"Quantity": 0
},
"QueryString": true
},
"MaxTTL": 31536000,
"SmoothStreaming": false,
"DefaultTTL": 86400,
"AllowedMethods": {
"Items": [
"HEAD",
"GET"
],
"CachedMethods": {
"Items": [
"HEAD",
"GET"
],
"Quantity": 2
},
"Quantity": 2
},
"Compress": false,
"MinTTL": 3600
},
"CallerReference": "www.${DOMAINNAME}",
"ViewerCertificate": {
"CloudFrontDefaultCertificate": true,
"MinimumProtocolVersion": "SSLv3"
},
"CustomErrorResponses": {
"Quantity": 0
},
"HttpVersion": "http2",
"Restrictions": {
"GeoRestriction": {
"RestrictionType": "none",
"Quantity": 0
}
},
"Aliases": {
"Quantity": 0
}
}
EOF
cat ./cfd.json
{
"Comment": "",
"CacheBehaviors": {
"Quantity": 0
},
"Logging": {
"Bucket": "",
"Prefix": "",
"Enabled": false,
"IncludeCookies": false
},
"WebACLId": "",
"Origins": {
"Items": [
{
"OriginPath": "",
"S3OriginConfig": {
"OriginAccessIdentity": ""
},
"Id": "www.example.tk",
"DomainName": "www.example.tk.s3.amazonaws.com",
"CustomHeaders": {
"Quantity": 0
}
}
],
"Quantity": 1
},
"DefaultRootObject": "",
"PriceClass": "PriceClass_All",
"Enabled": false,
"DefaultCacheBehavior": {
"TrustedSigners": {
"Enabled": false,
"Quantity": 0
},
"TargetOriginId": "www.example.tk",
"ViewerProtocolPolicy": "allow-all",
"ForwardedValues": {
"Headers": {
"Quantity": 0
},
"Cookies": {
"Forward": "none"
},
"QueryStringCacheKeys": {
"Quantity": 0
},
"QueryString": true
},
"MaxTTL": 31536000,
"SmoothStreaming": false,
"DefaultTTL": 86400,
"AllowedMethods": {
"Items": [
"HEAD",
"GET"
],
"CachedMethods": {
"Items": [
"HEAD",
"GET"
],
"Quantity": 2
},
"Quantity": 2
},
"Compress": false,
"MinTTL": 3600
},
"CallerReference": "www.example.tk",
"ViewerCertificate": {
"CloudFrontDefaultCertificate": true,
"MinimumProtocolVersion": "SSLv3"
},
"CustomErrorResponses": {
"Quantity": 0
},
"HttpVersion": "http2",
"Restrictions": {
"GeoRestriction": {
"RestrictionType": "none",
"Quantity": 0
}
},
"Aliases": {
"Quantity": 0
}
}
JSONファイルを作成したら、フォーマットが壊れてないか必ず確認します。
jsonlint -q cfd.json
返り値なし
1.2. ETAGの取得
CloudFrontはETAGと呼ばれる現時点を示す一意性のIDが変更あるごとに変化します。
このため、変更を行う際は現在のETAGを都度取得する必要があります。
ETAG=`aws cloudfront get-distribution \
--id ${CF_DIST_ID} --query ETag --output text` && echo ${ETAG}
E2RGD6G83K3B8Q
1.3. ディストリビューションの無効化
aws cloudfront update-distribution --id ${CF_DIST_ID} \
--if-match ${ETAG} --distribution-config file://cfd.json
{
"Distribution": {
"Status": "InProgress",
"DomainName": "d3plx1x2hvysv9.cloudfront.net",
"InProgressInvalidationBatches": 0,
"DistributionConfig": {
"Comment": "",
"CacheBehaviors": {
"Quantity": 0
},
"IsIPV6Enabled": true,
"Logging": {
"Bucket": "",
"Prefix": "",
"Enabled": false,
"IncludeCookies": false
},
"WebACLId": "",
"Origins": {
"Items": [
{
"S3OriginConfig": {
"OriginAccessIdentity": ""
},
"OriginPath": "",
"CustomHeaders": {
"Quantity": 0
},
"Id": "www.example.tk",
"DomainName": "www.example.tk.s3.amazonaws.com"
}
],
"Quantity": 1
},
"DefaultRootObject": "",
"PriceClass": "PriceClass_All",
"Enabled": false,
"DefaultCacheBehavior": {
"TrustedSigners": {
"Enabled": false,
"Quantity": 0
},
"TargetOriginId": "www.example.tk",
"ViewerProtocolPolicy": "allow-all",
"ForwardedValues": {
"Headers": {
"Quantity": 0
},
"Cookies": {
"Forward": "none"
},
"QueryStringCacheKeys": {
"Quantity": 0
},
"QueryString": true
},
"MaxTTL": 31536000,
"SmoothStreaming": false,
"DefaultTTL": 86400,
"AllowedMethods": {
"Items": [
"HEAD",
"GET"
],
"CachedMethods": {
"Items": [
"HEAD",
"GET"
],
"Quantity": 2
},
"Quantity": 2
},
"MinTTL": 3600,
"Compress": false
},
"CallerReference": "www.example.tk",
"ViewerCertificate": {
"CloudFrontDefaultCertificate": true,
"MinimumProtocolVersion": "SSLv3",
"CertificateSource": "cloudfront"
},
"CustomErrorResponses": {
"Quantity": 0
},
"HttpVersion": "http2",
"Restrictions": {
"GeoRestriction": {
"RestrictionType": "none",
"Quantity": 0
}
},
"Aliases": {
"Quantity": 0
}
},
"ActiveTrustedSigners": {
"Enabled": false,
"Quantity": 0
},
"LastModifiedTime": "2016-11-05T06:40:52.996Z",
"Id": "EXCSDJOUKJB7M",
"ARN": "arn:aws:cloudfront::777777777777:distribution/EXCSDJOUKJB7M"
},
"ETag": "EYOPEK5P7XOW4"
}
1.4. CloudFrontのデプロイ完了を待つ
aws cloudfront wait distribution-deployed --id ${CF_DIST_ID}
返り値なし
プロンプトが帰ってくるまでこれは20~30分ぐらいかかります。
みんなでビールでも飲みながら亀田さんを囲んで待ちましょう。
(世界各地のエッヂロケーションへ設定を行うため時間がかかるのです)
waitコマンドには待てる限界が存在し、万一タイムアウトして
Waiter DistributionDeployed failed: Max attempts exceeded
という出力が返って来たらコマンドを再実行してください。
1.5. ETAGの取得
ETAGが変更されているので再度取得します。
ETAG=`aws cloudfront get-distribution \
--id ${CF_DIST_ID} --query ETag --output text` && echo ${ETAG}
EYOPEK5P7XOW4
1.6. ディストリビューションの削除
ディストリビューション削除の準備が整いました。
aws cloudfront delete-distribution --id ${CF_DIST_ID} --if-match ${ETAG}
返り値なし
1.7. 削除されたか確認
aws cloudfront list-distributions
返り値なし