S3に上げたブログの記事の一部が更新されず、画面がおかしなことになるのでCloudFrontのキャッシュを削除して更新内容を即時反映させる方法を書く。

手順は画面からポチポチする方法とAWS CLIを使う方法を書く。

キャッシュ削除

CloudFront Distributionsの一覧でキャッシュを消したいIDを選択する。
Invalidationsタブを選択してCreate Invalidationを選択。
削除したいObjectのPathを入力する。全部削除したい場合は/*を入力すればよい。
削除指定するPathの数で課金されるようなのでワイルドカードを指定したほうがよい。
ちなみに1000リクエストまで無料でそれ以降は1リクエスト0.005USD。

AWS CLIからキャッシュを削除

AWS CLIをインストール

CentOSでインストールする。他の環境でもPythonがインストールされていればpipでインストールできるので読み替えてください。

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

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

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

CLIの設定と確認

aws_access_key_idの設定をしていなければ以下のように設定しておく。

$ vi ~/.aws/credentials
[default]
aws_access_key_id = **************
aws_secret_access_key = *************
region=ap-northeast-1

CLIが動作することを確認してCloudFrontが操作できるようにする。

$ aws --version
aws-cli/1.10.6 Python/2.6.6 Linux/2.6.32-573.12.1.el6.x86_64 botocore/1.3.28

$ aws configure set preview.cloudfront true

キャッシュが削除できるか確認する。
指定するdistribution-idはCloudFrontの画面に記載してあるのでそれを指定する。

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

実行後、"Status": "InProgress"が含まれたそれっぽいJSONが表示されればうまく実行できている。

参考

  1. https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html
  2. https://aws.amazon.com/jp/cloudfront/pricing/
  3. http://docs.aws.amazon.com/cli/latest/reference/cloudfront/create-invalidation.html