LoginSignup
1
2

More than 5 years have passed since last update.

[JAWS-UG CLI] ACM入門 #11 CloudFrontの削除

Posted at

これはAWS Certificate Manager (ACM)入門ハンズオン資料の一部です。
最初から続けて行っている場合「0.準備」の各項は作業不要です。第1項へ進んでください

0. 準備

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

1. 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
結果
      返り値なし
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2