LoginSignup
20
16

More than 5 years have passed since last update.

AWS S3 のファイルにCLIを使ってキャッシュ設定した時にハマったこと

Last updated at Posted at 2015-10-30

背景(読み飛ばし可)

Wordpressにアップロードが画像を、絡新婦等を使ってAWSのS3に連携した時に、Google のPage Speed Insight で下記のようなメッセージが出ることがあります。

Kobito.JYHzhb.png

※「ブラウザのキャッシュを活用」せよと出てくるのですが、Wordpressのキャッシュ設定で .htaccess ファイルを修正すればよい!と一生懸命キャッシュの設定をしても解消されません。(画像の保存先はS3なので当たり前です。恥ずかしながら自分ハマってました。)

対応策

AWSのコンソール画面からS3の画像ファイルを開き、プロパティの中のメタデータで、「Cache-Contorol」キーに、”max-age=25200”などの値を追加

Kobito.uI3Ct5.png

課題

ただ、これを1000本以上の画像ファイルに対して行うのは現実的じゃない。そこで、CLIの登場。コマンドラインインターフェースを使って、一括でプロパティ設定を更新しようという魂胆です。

CLIとは
https://aws.amazon.com/jp/cli/
http://docs.aws.amazon.com/cli/latest/reference/s3/index.html
CLIのインストール方法
http://docs.aws.amazon.com/cli/latest/userguide/installing.html#install-bundle-other-os

本題

CLIを使った時にハマったことが2つ。

1. cp のオプション[--cache-control ]が効かない

2. CLIで更新した後に、webブラウザで画像が表示されなくなった

1.cp のオプション[--cache-control ]が効かない

入力コマンド

$ aws s3 cp (画像フルパス) (画像フルパス) --cache-control "max-age=25200"

エラーメッセージ

A client error (InvalidRequest) occurred when calling the CopyObject operation: This copy request is illegal because it is trying to copy an object to itself without changing the object's metadata, storage class, website redirect location or encryption attributes.

対応策

CLIコマンドに オプション --metadata-directive を追記 (リファレンスにちゃんと書いてありました。)

$ aws s3 cp (画像フルパス) (画像フルパス) --metadata-directive "REPLACE" --cache-control "max-age=25200"

具体的なvalueは下記参考

Options > --metadata-directive (string)
AWS S3 CLI Reference

結果

S3のコンソールでプロパティを確認すると、キャッシュ設定が反映されているはずです。
Kobito.XAcLqr.png

2.CLIで更新した後にwebアクセスしたら画像が表示されなくなった

上記で行ったキャッシュ設定ですが、ブラウザで確認してみると画像が表示されなくなってしまいました。

エラー画面

Kobito.MtfBFb.png

原因

S3のコンソールでプロパティを確認すると、アクセス許可の設定がありません(CLIによって上書き削除されてしまっている)

エラー時の画像リンクをブラウザで開くと、”AccessDenied”と表示されるはずです。

Kobito.ZKc7TI.png

対応策

CLIコマンドに オプション --acl を追記

$ aws s3 cp (画像フルパス) (画像フルパス) --metadata-directive "REPLACE" --cache-control "max-age=25200" --acl public-read

具体的なvalueは下記参考

Options > --acl (string)

AWS S3 CLI Reference

結果

S3のコンソールでプロパティ確認すると
Kobito.AnKom8.png

ブラウザで画像リンクを開くと、無事画像が表示されているはずです。

最後に

以上、S3のCLIを使用した時にハマったことのご共有でした。

なお、オプションで --recursive を追記して上げればディレクトリ単位で一括でプロパティの更新が可能なので、便利です。

$ aws s3 cp (画像ディレクトリ) (画像ディレクトリ) --metadata-directive "REPLACE" --cache-control "max-age=25200" --acl public-read --recursive

記載に誤りあればコメントください。

20
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
16