Amazon Web服務(AWS)發(fā)布了Lambda@Edge,讓客戶可以在全球的AWS站點運行Node.js Lambda函數(shù),從而以非常低的延遲動態(tài)地響應最終用戶。
開發(fā)者可以用Lambda@Edge將Node.js代碼上傳到AWS Lambda——Amazon的“serverless”服務,Lambda會在靠近最終用戶的AWS站點上自動運行和伸縮代碼,從而改善延遲、減少原始負載,實現(xiàn)高可用性。
Lambda@Edge代碼由Amazon CloudFront事件觸發(fā),Amazon CloudFront是一種全球內容分發(fā)網絡(CDN) 服務,可以安全地以低延遲和高傳輸速度向瀏覽者分發(fā)數(shù)據(jù)、視頻、應用程序和API。
有時最終用戶會遍布全球,并且(理想情況)所有決策所需的所有信息都可以使用函數(shù)或請求從CloudFront獲得,Lambda@Edge正是專為這種對延遲敏感的用例所做的優(yōu)化。它可以讓開發(fā)者實現(xiàn)以下功能。
檢查cookies和顯式重寫URL從而執(zhí)行A/B測試。
返回生成的動態(tài)內容,例如將未經身份驗證的用戶重定向到一個按需創(chuàng)建的登錄頁面。
使用特定的對象作為響應,基于用戶代理頭文件定制用戶看到的網站。
添加、刪除或修改頭文件(受到以下限制)將用戶引導到不同的緩存對象。
修改或壓縮頭文件或URL來提高緩存利用率。
將HTTP請求發(fā)送到其他互聯(lián)網資源并使用結果定制響應(盡管開發(fā)人員應該小心地減少發(fā)出這些請求的額外延遲)。
Lambda@Edge函數(shù)的觸發(fā)可以用來響應四種不同的CloudFront事件。
查看器請求——該事件發(fā)生在互聯(lián)網上的最終用戶或設備向CloudFront發(fā)送一個HTTP(S)請求時,并且請求會抵達最接近該用戶的站點。這個事件包含傳入的HTTP請求。
查看器響應——該事件發(fā)生在CloudFront邊緣服務器準備對發(fā)出請求的最終用戶或設備做出響應時。這個事件包含HTTP響應。
原始請求——該事件發(fā)生在CloudFront邊緣服務器的緩存中沒有被請求的對象,并且查看器準備發(fā)送給原始后端(例如Amazon EC2、Application Load Balancer或Amazon S3)時。
原始響應——該事件發(fā)生在CloudFront邊緣服務器接收到一個來自原始后端的響應時。
下面來自AWS Lambda@Edge文檔的圖表可以幫助你在請求/響應周期中定位這些事件。
Lambda@Edge開發(fā)者應該熟悉標準AWS Lambda開發(fā)范例,而且必須在開發(fā)代碼時遵循以下約束。
運行環(huán)境——運行環(huán)境目前只支持Node.js中編寫的函數(shù),它為每個函數(shù)分配128MB的內存,沒有內置的庫,也沒有訪問/tmp的權限。
超時設定——處理原始請求和原始響應事件的函數(shù)必須在3秒內完成,處理查看器請求和查看器響應事件的函數(shù)必須在1秒內完成。
Web服務訪問——處理原始請求和原始響應事件的函數(shù)必須在3秒內完成,它可以訪問AWS API和通過HTTP獲取內容。這些請求總是與對原始請求或響應的請求同步。
版本控制——在Lambda控制臺更新代碼之后,必須設置一套新的觸發(fā)配置。開發(fā)人員需要等待復制完成。函數(shù)必須和版本號相關,$LATEST和別名都不適用。
頭文件——請查閱“頭文件限制”來確定哪些頭文件是可以訪問的、受限制的、只讀的和被列入黑名單的。
現(xiàn)在Lambda@Edge還沒有提供免費體驗,函數(shù)持續(xù)時間的計算是從代碼開始運行到返回或者以其他方式終止,每GB-second收費$0.00005001。Lambda@Edge函數(shù)每次運行都有固定的128MB內存,每128MB-second收費$0.00000625125。注意Lambda@Edge函數(shù)以50ms為間隔進行測量,而不是標準的AWS Lambda 100ms間隔。