この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
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を参照して下さい。