成本最佳化
概觀
除了提高 Web 應用程式的效能、安全性和可用性之外,CloudFront 還可以用來降低 Web 應用程式的成本。首先,CloudFront 的定價模式可以降低您的原始成本。其次,您可以設定 CloudFront 並架構應用程式,以降低其成本。如需有關使用 AWS 服務將成本最佳化的更多一般指引,請考慮 AWS Well-Architected Framework 的成本最佳化支柱。若要監控並了解您的成本,請使用 AWS Cost Explorer 和 AWS Bduget。
CloudFront 的定價
CloudFront 的定價模型包括多個維度,其中兩個最主要的是:
- 傳送至網際網路的區域資料傳出 (DTO),這表示 CloudFront 在網際網路上提供給使用者的 GB 數量。請注意,此定價取決於使用者所在區域,使用二進位 GB (即 1 GB = 1024 MB) 計量,而且僅包含 HTTP 承載 (例如,不包括 TLS 交握資料傳輸)。
- 請求費用,這表示 CloudFront 所提供的 HTTP (S) 請求數目。其也取決於使用者所在的區域。
預設情況下,CloudFront 會使用其所有網路來提供內容以獲得最佳效能。如果您希望在交付成本方面進行權衡,請考慮在 CloudFront 中設定價格分級選項。
CloudFront 有一個持續可用的免費方案,其中包含每個月 1 TB 的 DTO 和 1000 萬個 HTTP(S) 請求。如果您將 AWS WAF 與 CloudFront 搭配使用,請考慮使用 CloudFront 安全防護優惠組合的預付承諾,以節省高達 30% 的 CloudFront 費用。如果數量較大 (10TB 以上),請透過簽署私人定價協議獲得進一步折扣,以換取更高的財務承諾。請注意,當您的整體流量中傳遞 HTTP 物件的平均大小越高時,您可以獲得的折扣就越大。因此,建議您將 CloudFront 用於多個工作負載 (API 交付和靜態檔案傳遞),以增加您在私人定價協議中可以獲得的整體折扣。
需要注意的是,當與基於 AWS 的來源一起使用時,CloudFront 的 DTO 會取代來源的 DTO。因此,您無需支付來源的資料傳出 (DTO)。
最後,檢閱您對 CloudFront 選用功能的使用情況並將其最佳化,這可能會產生額外的成本,例如內容失效。
將 CloudFront 中的失效成本最佳化
根據 CloudFront 定價,您每個月可以使用 1,000 個失效路徑,而無需額外費用。之後,每個失效路徑需支付 0.005 USD。失效請求上所列的路徑,代表您希望從 CloudFront 快取中為之取消效力的物件 URL (如果路徑含有萬用字元,則會有多個 URL)。
請考慮使用以下秘訣,將使用 CloudFront 的失效成本最佳化:
- 預設使用 HTTP 快取控制機制 (例如,快取控制標頭、URL 版本控制、條件式請求),但在緊急情況下,建議使用基於 CDN 的失效。如需詳細資訊,請閱讀此部落格文章。
- 如果適用於使用單一失效請求讓多個檔案失效,請在失效請求中使用萬用字元。例如,使用 /stories/sports/worldcup* 可以讓所有與世界盃賽事相關的文章失效,而不是讓文章逐篇失效。
您可以監控您的失效請求用量,並使用 AWS Budgets 設定警示。
使用 CloudFront 降低 Web 應用程式成本
CloudFront 會透過卸載來源,以原生方式降低 Web 應用程式的成本。首先,CloudFront 會從自己的快取提供可快取的請求,從而降低來源的擴展成本。您可以透過提高快取命中率 (例如,啟用 Origin Shield) 將 CloudFront 組態最佳化,以進一步卸載來源。其次,CloudFront 會重複使用與來源的 TCP/TLS 連線進行動態請求 (例如 API 呼叫),從而減少來源需要處理的新連線數量,以及從來源輸出的 TLS 憑證數量。這可以降低 ALB 等來源的成本,因為 LCU 耗用量會隨著每秒新建立的連線數和處理的位元組數的減少而降低。
您可以設定 CloudFront 以不同的方式進一步降低成本。例如,使用 GZIP 或 Brotli 壓縮文字檔案以減少 DTO。另一個範例是,當您的應用程式需要邊緣函數時,最好在適用的情況下使用 CloudFront Functions,因為它比 Lambda@Edge 更實惠。閱讀有關將邊緣函數最佳化的最佳實務以降低成本。
最後,建議使用標準的 Cache-Control 標頭來控制快取的新舊程度,而不是使用失效作為正常操作的一部分。Cache-Control 機制更可靠,可以控制瀏覽器上的快取,而且無需任何成本 (與 CloudFront 失效相較,每個月超過 1000 個失效的配額)。緊急情況下使用失效。
AWS WAF 最佳化
AWS WAF 成本中的主要組成部分通常是請求費用。您可以透過不同的方式降低此成本:
- 根據您的威脅建模,僅在需要保護的 CloudFront 分發上啟用 AWS WAF。例如,如果您在 S3 上託管的靜態內容不需要 WAF 保護,請將其移至單獨 CloudFront 分發上的單獨網域 (例如 static.example.com),並僅在提供 HTML 檔案的主要分發 (例如 www.example.com) 上啟用 AWS WAF。
- 當您訂閱 Shield Advanced 時,AWS WAF 請求費用會包含在 Shield Advanced 定價中。Shield Advanced 收取每月訂閱費用,並對您的應用程式資料傳出收取額外費用。如果您的應用程式是請求密集型 (每秒請求量高,平均承載低,例如使用 API),啟用 Shield Advanced 可能有助於降低整體 WAF 成本。
- 最後,部分 AWS WAF 規則會產生額外費用,例如 CATPCHA、AWS 機器人控制功能或 AWS Marketplace 中供應商管理的規則。若要將這些成本最佳化,請將此類規則的範圍縮小到特定條件 (例如,僅 CAPTCHA 可疑 IP 或僅對 HTML 請求套用機器人控制功能),並在 WebACL 的結尾使用,讓先前的免費規則有機會阻止惡意請求而無需額外費用。請閱讀本部落格文章,更深入了解 WAF 規則成本最佳化。
請注意,當與 AWS WAF WebACL 關聯時,CloudFront 不會對 AWS WAF 封鎖的請求收費。
應用程式層級最佳化
您可以在應用程式層級實作一些技術來降低 CloudFront 交付成本。請考慮以下技術:
- 利用瀏覽器快取減少 CloudFront 交付的請求數量
- 在物件上實作 ETag 以啟用條件式請求。 相較於完整擷取,使用 304 Not Modified 回應進行物件重新整理的交付成本更低。
- 實作影像最佳化以使用 WebP 和 Avif 等現代化格式壓縮影像。此外,在網站上延遲載入影像可避免下載瀏覽器未轉譯的影像。
- 實作調整式位元率串流進行影片交付。考慮使用 QVBR 影片編碼。考慮根據裝置類型提供最佳化的轉譯階梯。本部落格文章解釋了這個概念,但它是在啟動 CloudFront Functions 之前使用 Lambda@Edge 撰寫的。
- 如果可能,請針對 API 呼叫使用同源政策,如此可以消除預檢 CORS OPTION 請求的成本。請閱讀本部落格文章以獲得進一步的詳細資訊。
- 考慮所有日誌記錄選項,並為您選擇最具成本效益的選項。CloudFront 的標準存取日誌是免費提供的,但它適用於您的所有流量。相反地,CloudFront 的即時日誌是透過 CloudFront 快取行為以及增量費用的必填欄位精細設定的。WAF 提供多個日誌記錄選項,最具成本效益的選項是基於 Kinesis Firehose 的選項。請注意,您可以根據規則動作或發出的標籤等維度,篩選記錄的請求。