awsコマンドでCloudFrontのキャッシュを一旦消す

· 1 min read
awsコマンドでCloudFrontのキャッシュを一旦消す

StaticPressで静的化&S3ホスティングしたWordpressですが
CloudFrontでCDNキャッシュしているので、更新毎にキャッシュクリアする必要があります。

やり方はとっても簡単。
管理画面からCloudFront -> Invalidationsタブを選択し、「Create Invalidation」のボタンを押す。
そこで「/*」と指定してInvalidateするだけ。
これでまとめて全キャッシュを削除できます。

めんどくさい…

そう、いちいち画面からポチポチするの面倒なんです。。
じゃあAWS CLI使ってコンソールからのほうが遥かに楽やん。

てことでそのやり方について。


AWS CLIをインストール

CentOSでのインストール方法になります。

# yum install python-setuptools -y
# easy_install pip
# pip install awscli

CloudFrontの権限を持ったユーザを作成する

awsのiamで使用するユーザに対してCloudFrontFullAccessを付与する。

CLIの設定と確認

aws configureコマンドで対話式でIAM情報を入力します。
以下は実行例です。

# aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json

awsコマンド使えてますね。

# aws --version
aws-cli/1.11.167 Python/2.7.5 Linux/3.10.0-693.2.2.el7.x86_64 botocore/1.7.25

awsコマンドでCloudFrontを操作できる様に設定変更します。

# aws configure set preview.cloudfront true

キャッシュを削除

distribution-idはCloudFrontの画面に記載してあるのでそれを指定します。

aws cloudfront create-invalidation --distribution-id *********** --paths '/*'

実行後、"Status": "InProgress"が含まれたJSONが表示されれば成功です。
↓こんな感じ

{
    "Invalidation": {
        "Status": "InProgress", 
        "InvalidationBatch": {
            "Paths": {
                "Items": [
                    "/*"
                ], 
                "Quantity": 1
            }, 
            "CallerReference": "cli-1507553417-113615"
        }, 
        "Id": "***********", 
        "CreateTime": "2017-10-09T12:50:18.801Z"
    }, 
    "Location": "https://cloudfront.amazonaws.com/2017-03-25/distribution/***********/***********/***********"
}

コマンド1行だけなので、シェルスクリプトにしちゃえばかなり楽ですかね。

※参考サイト
https://ishiis.net/2016/02/21/delete-cache-cloudfront/