LoginSignup
24
19

More than 5 years have passed since last update.

S3の差分更新とCloudFrontの自動invalidation

Last updated at Posted at 2015-05-21

はじめに

CloudFrontのOriginをS3にしているケースで、S3のファイルを更新し、対応するCloudFrontキャッシュをinvalidationしたいというケースがあると思います。

s3cmdを使うと、ローカルからS3へ差分アップロードを行い、かつ自動的に対象ファイルのキャッシュinvalidationを行うことが出来ます。ステキ!
s3cmdは、S3の操作を行うためのコマンドラインツールです。
http://s3tools.org/s3cmd
※今回、バージョンは1.5.2を使用しています。

IAMユーザ作成

まず、S3とCloudFrontを操作するためのIAMユーザを作成します。

CloudFrontのinvalidationを行うために、ポリシーにはS3の基本的な操作(Delete,Get,List,Put)に加え、
S3のGetBucketWebsiteとCloudFrontのListDistributions,CreateInvalidation,GetInvalidationの権限を付与します。
対象バケットの制限等は適宜行って下さい。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt123456789",
            "Effect": "Allow",
            "Action": [
                "cloudfront:ListDistributions",
                "cloudfront:CreateInvalidation",
                "cloudfront:GetInvalidation"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "Stmt123456789",
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetBucketWebsite"
            ],
            "Resource": [
                "arn:aws:s3:::test-bucket"
            ]
        }
    ]
}

s3cmdの設定

s3cmdのインストールはyum等で簡単に出来ます。
インストール後、以下コマンドを実行し、上で設定したIAMユーザのAccess Key,Secret Keyを設定します。
# s3cmd --configure

コマンドの実行

以下コマンドを実行すると、ローカルとS3の差分をアップロードし、対応するCloudFrontキャッシュのinvalidationを行うことが出来ます。
s3cmd sync --cf-invalidate <同期元のパス> s3://<同期先のパス>

$ s3cmd sync --cf-invalidate ./test-dir/ s3://test-bucket/test-dir/
./test-dir/1.html -> s3://test-bucket/test-dir/1.html  [1 of 3]
 10 of 10   100% in    0s    45.01 B/s  done
./test-dir/2.html -> s3://test-bucket/test-dir/2.html  [2 of 3]
 15 of 15   100% in    0s    63.01 B/s  done
./test-dir/3.html -> s3://test-bucket/test-dir/3.html  [3 of 3]
 20 of 20   100% in    0s    78.65 B/s  done
Done. Uploaded 45 bytes in 1.0 seconds, 45.00 B/s. Copied 0 files saving 0 bytes transfer.
Created invalidation request for 3 paths
Check progress with: s3cmd cfinvalinfo cf://AAABBBCCCDDD/EEEFFFGGGHHH

ちなみに、実行後に最後の行に出力されるコマンドを実行すると、invalidationの進行状況(InProgress/Completed)を確認できます。

# s3cmd cfinvalinfo cf://AAABBBCCCDDD/EEEFFFGGGHHH
URI:            cf://AAABBBCCCDDD/EEEFFFGGGHHH
Status:         InProgress
Created:        2015-05-21T08:50:57.214Z
Nr of paths:    3
Reference:      E22HEU1NSKFPQ9.20150521175056.4757
24
19
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
24
19