S3cmdコマンドで20000ファイルをAWS S3に移動しました。すべての画像(.jpg)にキャッシュコントロールを追加したい
これらのファイルは(s3:// bucket-name/images /)にあります。 s3cmdですべての画像のキャッシュ制御を追加するにはどうすればよいですか、ヘッダーを追加する他の方法はありますか?
ありがとう
現在のアップストリームマスターブランチ( https://github.com/s3tools/s3cmd )を試してください。現在、次のようにmodify
コマンドが使用されています。
./s3cmd --recursive modify --add-header="Cache-Control:max-age=86400" s3://yourbucket/
また、AWS独自のクライアントの場合:
aws s3 sync /path s3://yourbucket/ --recursive --cache-control max-age=604800
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に感謝)
バケットには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
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回限りのタスクである場合、AWSコンソールを使用できます。
S3cmdをバージョン1.5.1にアップグレードするだけで、問題は解決します。