Skip to content
On this page

📆 2023-03-05

CloudFront のキャッシュ削除を自動化した

#CloudFront #AWS

はじめに

ブログサイトのデプロイを GitHub Actions で自動化したの続き。

CloudFront では、デフォルトでキャッシュを24時間保存する。

ブログの記事を更新したら即座にサイトに反映したいので、ブログサイトを CloudFront + S3 へデプロイした直後に CloudFront のキャッシュを自動的に削除するようにする。

やったこと

IAM ロールに権限追加

GitHub Actions が Assume Role する ロールに cloudfront:CreateInvalidation アクションを許可する。

具体的には、AWSコンソール > IAM > ロール > github-actions-role > ポリシー と進み、アタッチされているポリシーに、以下のアクション許可を追加する。

json
        {
            "Effect": "Allow",
            "Action": [
                "cloudfront:CreateInvalidation"
            ],
            "Resource": [
                "arn:aws:cloudfront::{AWS AccountID}:distribution/{CloudFront ディストリビューションのID}"
            ]
        }

GitHub Actions でキャッシュ削除

aws cloudfront create-invalidation コマンドで CloudFront のキャッシュ削除を依頼できる。

GitHub Actions のワークフローファイルに、aws cloudfront create-invalidation コマンドの実行を追加した。

yaml
name: deploy blog site

... (省略) ...

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:

      ... (省略) ...

      - name: Upload file to S3
        run: aws s3 sync --delete website/public s3://${{ env.AWS_TARGET_S3_BUCKET }}/website/public
     
      # ここを追加
      - name: Evict CloudFront cache
        run: aws cloudfront create-invalidation --distribution-id {CloudFront ディストリビューションのID} --paths "/*"

おわりに

いままではブログを更新したら手動でキャッシュを消していたので、かなり楽になった。

参考

Released under the MIT License.