Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

これは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
結果
      返り値なし
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away