Capistranoでデプロイ後にCloudFrontのInvalidationを作成する

デプロイ完了後にAWS CLIで以下のコマンドを実行してCFのInvalidationを作成するようにします。

aws cloudfront create-invalidation --distribution-id XXXXXXXXXXX --paths '/'

ポリシー

上記のコマンドを実行するサーバーには以下のポリシーをアタッチしたロールを設定しておきます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CFInvalidation",
            "Effect": "Allow",
            "Action": "cloudfront:CreateInvalidation",
            "Resource": [
                "arn:aws:cloudfront::<accountID>:distribution/XXXXXXXXXXXX"
            ]
        }
    ]
}

configファイル

# config/deploy.rb
namespace :cf do
  task :invalidation do
    execute :aws, :cloudfront, 'create-invalidation',  '--distribution-id', fetch(:cf_distribution_id), '--paths', "'/'"
  end
end

after 'deploy:finished', 'cf:invalidation'

config/deploy/production.rbconfig/deploy/staging.rbなどに以下のようにDISTRIBUTION IDの設定を追記しておきます。

set :cf_distribution_id, 'XXXXXXXXXXXX'