背景
為滿足資料分析、審計及監控業務需求,我們將 Amazon S3 儲存的檔案資料同步至 SLS(Simple Log Service)系統進行統一處理與檢索。然而,隨著資料輸送量的持續增長,AWS S3 直接出站流量費用已成為營運成本的主要壓力點。尤其在跨雲或大檔案傳輸情境下,S3 直連不僅單價較高,而且在高並發拉取時易受網路波動影響,導致傳輸效率不穩定。
本文介紹通過 Amazon CloudFront 來最佳化資料轉送鏈路。通過將 S3 配置為 CloudFront 來源站點,並將 SLS 資料拉取端點切換至 CloudFront 網域名稱,利用其邊緣分發能力替代直連。基於 CloudFront 更優的流量階梯定價及全球網路特性,在降低頻寬成本的同時,提升檔案下載的成功率與吞吐效能,實現成本與穩定性的雙重最佳化。這裡我們僅使用 CloudFront 來擷取檔案資料,仍使用原模式(通過 SQS 或直連 S3)來擷取檔案中繼資料。若有安全需求,可以使用 CloudFront 提供的函數功能來對請求進行鑒權。接下來將依次介紹:1. 鑒權函數配置;2. CloudFront 詳細配置;3. Distribution 關聯函數;4. S3 匯入任務的建立。
本文檔為阿里雲原創,智慧財產權歸阿里雲所有。由於本文檔旨在介紹阿里雲與第三方產品互動的服務能力,因此可能會提及第三方公司或其產品名稱。
鑒權函數配置
步驟一:建立函數
在CloudFront中函數頁建立函數,Runtime使用cloudfront-js-2.0。

步驟二:編輯鑒權函數並發布
使用以下代碼,修改Token後構建函數並儲存。測試後發布。
function handler(event) {
var request = event.request;
var headers = request.headers;
// 定義你的 Token(請替換為一個隨機產生的強密碼字串)
var expectedToken = 'xxxxxx';
// 校正 X-CF-Token Header
if (!headers['x-cf-token'] || headers['x-cf-token'].value !== expectedToken) {
return {
statusCode: 403,
statusDescription: 'Forbidden',
body: {
encoding: 'text',
data: 'Access Denied'
}
};
}
// 校正通過,繼續轉寄請求
return request;
}

CloudFront詳細配置
步驟一:建立Distribution
在CloudFront中分配頁建立分配,並選擇合適的plan。

步驟二:命名Distribution
在Distribution Options 中設定Distribution name,設定Distribution type為Single website or app後進入下一步。

步驟三:源配置為S3
Origin type選擇 Amazon S3類型,然後點擊Browse S3按鈕,瀏覽選擇目標Bucket。

Origin settings保持預設。Cache settings選擇自訂然後緩衝策略選擇CachingDisabled。

步驟四:安全防護按需開啟
按照自己的安全需求選擇是否開啟安全防護。
步驟五:檢查配置並建立
檢查配置並建立,最後等待部署完成。部署狀態變為時間戳記,即表示部署完成。
建立匯入任務時,需要擷取這裡的Domain name。
Distribution關聯函數
步驟一:點擊Distribution進行配置
在分配列表中選擇CloudFront詳細配置建立的Distribution,在行為頁中建立行為。

步驟二:關聯函數
下拉至頁面底部,函數類型選擇CloudFront Functions,選擇鑒權函數配置定義的函數,最後點擊建立。
建立S3匯入任務
步驟一:進入任務管理並開始建立匯入任務
登入Log Service控制台。單擊Project名稱,進入目標Project。
單擊左側導覽列的任務管理,在任務管理頁單擊數據匯入,單擊建立數據匯入任務。
步驟二:開始接入
在彈出框單擊 S3-數據匯入的立即接入,然後選擇需要接入的目標LogStore。
步驟三:配置任務資訊
填寫表單資訊,開啟是否使用CloudFront 按鈕,並填入上述步驟擷取的cloudFront domain name以及Token,預覽查看是否符合預期,最後點擊下一步即可。
此處主要介紹CloudFront相關配置,詳細配置參考匯入Amazon S3檔案。