S3バケットに含まれる全オブジェクトのCache-Controlを書き換える、一撃で!
はじめに
CloudFrontとS3オリジンを組み合わせたWebサイトを構築した場合、キャッシュ時間(TTL)を制御する際には、S3オリジンに配置されたオブジェクトのMetaDataにCache-ControlやExpiresを設定する必要があります。詳しくは都元の以下の記事を参照して下さい。
ただし、AWS管理コンソールでは、S3のオブジェクトを複数選択して一気にMetaDataを書き換えることは出来ません。ちまちまとGUIで操作するのは大変面倒臭い。
なので、これを一撃で書き換えるスクリプトをAWS SDK for Rubyを使って作りました。
やってみる
スクリプトの内容はこんな感じです。
# Must be carried out in advance: # export AWS_ACCESS_KEY_ID='YOUR_ACCESS_KEY' # export AWS_SECRET_ACCESS_KEY='SECRET_ACCESS_KEY' # export AWS_REGION='YOUR_REGION' require 'aws-sdk' s3 = AWS::S3.new bucket = s3.buckets[ARGV[0]] bucket.objects.each do |obj| obj.copy_from(obj, {:cache_control => "no-cache, no-store"}) end
以下のようにS3バケット名を引数にして渡します。
$ ruby ./s3chmod.rb YOUR_BUCKET_NAME
すると指定したS3バケットに含まれる全てのオブジェクトのMetaDataにCache-Controlが設定されます!
はい一撃!
まとめ
Cache-Control以外にも様々なオプションの書き換えが可能です。詳しくはClass: AWS::S3::S3Object — AWS SDK For Rubyを参照して下さい。