web-dev-qa-db-ja.com

AWS S3でキャッシュ制御を追加する方法は?

S3cmdコマンドで20000ファイルをAWS S3に移動しました。すべての画像(.jpg)にキャッシュコントロールを追加したい

これらのファイルは(s3:// bucket-name/images /)にあります。 s3cmdですべての画像のキャッシュ制御を追加するにはどうすればよいですか、ヘッダーを追加する他の方法はありますか?

ありがとう

54
Rajaraman

現在のアップストリームマスターブランチ( https://github.com/s3tools/s3cmd )を試してください。現在、次のようにmodifyコマンドが使用されています。

./s3cmd --recursive modify --add-header="Cache-Control:max-age=86400" s3://yourbucket/
66
user3440362

また、AWS独自のクライアントの場合:

aws s3 sync /path s3://yourbucket/ --recursive --cache-control max-age=604800
46
user31208

S3のオブジェクトのキャッシュ制御などのメタデータを再アップロードすることなく、サードパーティのツールを使用することなく調整するには、AWS CLIで次の操作を実行できます。選択した設定でメタデータを上書きしながら、オブジェクトを自分自身にコピーします。

aws s3api copy-object --copy-source <bucket-name>/<file> --bucket <bucket-name> --key <file> --metadata-directive REPLACE --cache-control "max-age=3600"

あなたが言及したように、バケット内に既に存在するファイルの既存のセットでそれを行うには、findでこのコマンドを処理します:

find . -type f -exec aws s3api copy-object --copy-source <bucket-name>/{} --bucket <bucket-name> --key {} --metadata-directive REPLACE --cache-control "max-age=3600"

置換<bucket-name>バケットの名前

警告:これは、aclなどのファイル上の既存のメタデータをすべて上書きします。コマンドに追加のフラグを追加して、必要なものを設定します(例:--acl public-read完全なパブリックアクセスを許可します。 (@jacksonに感謝)

19
Joel Duckworth

バケットにはmp4、jpg、その他のファイルがあります。更新したいファイルは「サブバケット」に保存されます(例: https://s3.amazonaws.com/my.bucket/sub-directory/my-video.mp4 )。私の場合、mp4ファイルのキャッシュコントロールのみを更新したかったのです。

aws s3 cp \
   s3://my.bucket/sub-directory/ s3://my.bucket/sub-directory/ \
   --exclude '*.jpg' --exclude '*.png' \
   --cache-control 'max-age=31104000' \
   --recursive

これが何をするかをテストするには、--dryrun 国旗:

aws s3 cp --dryrun \
   s3://my.bucket/sub-directory/ s3://my.bucket/sub-directory/ \
   --exclude '*.jpg' --exclude '*.png' \
   --cache-control 'max-age=31104000' \
   --recursive
16
PUT / ObjectName HTTP/1.1 
Host: BucketName .s3.amazonaws.com 
Date: date 
x-amz-meta-Cache-Control : max-age= <value in seconds> 
Authorization: signatureValue 

すべてのメタデータ設定には、キーと値のペアが含まれています。キャッシュコントロールのメタデータキーは「Cache-Control」、値は“max-age=<time for which you want your object to be accessed from cache in seconds>”です

次の2つの方法で、適切なヘッダーを使用してHTTP PUTリクエストをAmazon S3サーバーに送信することにより、Amazon S3オブジェクトのキャッシュ制御カスタムヘッダーを設定できます。

Amazon S3 REST API PUTオブジェクトリクエストを使用してキャッシュコントロールメタデータを設定-プログラマーの場合、Amazon S3 RESTまたはSOAP APIを使用してカスタムヘッダーを設定する独自のソフトウェアプログラムを作成できます。 PUT Object Requestを使用します。このウェブサイトはAmazon S3 REST APIのみを参照しています。SOAP APIの使用方法の詳細については、AWSドキュメントのウェブサイトを参照してください。 Bucket Explorerユーザーインターフェイスを使用してキャッシュコントロールメタデータを設定する-ソフトウェアプログラムを作成する代わりにマウスクリックを使用してキャッシュコントロールのようなカスタムHTTPヘッダーを設定する場合は、そのためにBucket Explorerのユーザーインターフェイスを使用できます。このカスタムHTTPヘッダーを使用すると、要求/応答チェーンで従う必要のあるキャッシュ動作を指定し、キャッシュが要求または応答に干渉するのを防ぐことができます。

詳細については、 Amazon S3オブジェクトのキャッシュ制御ヘッダーを設定する方法 `を確認してください。

(OPは他の方法を要求したため)

aws-cli経由でもできます。 (v:aws-cli/1.8.8 Python/2.7.2 Darwin/12.5.0):

aws s3api put-object \
--bucket mybucket \
--key my/key \
--cache-control max-age=1 \
--body myfile.txt

ただし、既存のオブジェクトはすべて書き換えることに注意してください。

1
Jose Alban

サードパーティのツールを避けたい場合、これが1回限りのタスクである場合、AWSコンソールを使用できます。

  1. S3バケットを参照します
  2. 変更するすべてのオブジェクトを選択します
  3. [アクション]-> [メタデータの変更]をクリックします
  4. キーのCache-Controlを選択し、値として必要なコントロールを入力します
  5. セーブ
1
mattdedek

S3cmdをバージョン1.5.1にアップグレードするだけで、問題は解決します。

1