はじめに
ブログサイトのデプロイを 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 "/*"
おわりに
いままではブログを更新したら手動でキャッシュを消していたので、かなり楽になった。