在 Day7 我們已經完成了 GitHub → CodePipeline → CodeBuild → S3 的自動化部署,但遇到一個實際痛點:使用者端可能因為 CloudFront 快取而看不到最新版本的網頁,因為在前一天,我們是用「手動刷新快取」的方式處理網頁更新的問題,所以如果沒有刷新快取,且客戶本身就已經在網頁時,就有會讀不到最新的網頁畫面,這會導致明明程式碼已更新,但前端仍顯示舊內容,使用者體驗不佳。
因此,我們需要在 CI/CD 完成部署後,自動觸發 CloudFront Invalidation,確保新內容立即對外生效,本次章節會解決 「網站更新延遲」 的痛點,主要的價值為:
(1) 確保 CI/CD 部署完成後,CloudFront 的快取會即時更新。
(2) 將快取刷新流程模組化,與 Buildspec 整合,未來任何網站更新都能自動套用。
(3) 對應到 Serverless 架構中的「前端最佳化與用戶體驗」,確保全域 CDN 能即時反應最新版本。
"/*"
,可針對變動的檔案刷新,例如 /index.html
、/assets/*
。"*"
。無
進入「IAM」服務頁面。
進入「角色」頁面,點選codebuild的創建角色。
新增權限。
給予CloudFront的「快取失效 (Invalidation)」權限,授權資源為指定的CloudFront。
貼上CloudFront的ARN,並點選「新增」。
點選「下一步」。
創建規則名稱(自定義)。
創建/授權完成。
進入GitHub中,修改buildspec檔案。
修改buildspec.yaml檔案,增加清除CloudFront快取的動作。
version: 0.2
phases:
install:
runtime-versions:
nodejs: 18
build:
commands:
- echo "Building website..."
- npm install || echo "No dependencies"
artifacts:
files:
- '**/*'
post_build:
commands:
- echo "Invalidating CloudFront cache..."
- aws cloudfront create-invalidation --distribution-id <CloudFront_ID> --paths "/*"
輸入修改的內容,並更新。
更新index.html內容。
打上備註(選用),推送版本。
進入CodePipeline後,點選「Build」、進入詳細狀況。
確認Log上有部署的資訊。
在這個 Lab 中,我們把 CI/CD 部署 與 CloudFront 快取管理 整合起來,解決了「使用者看到舊版網頁」的問題。這樣做能確保網站內容在全球節點即時更新,提升使用者體驗。
同時也學會了 buildspec.yml 與 CloudFront API 的整合技巧,這將成為後續模組(會員系統、檔案分享)的基礎前端更新流程。