本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:建立基本 Lambda@Edge 函數
本教學課程說明如何透過建立和設定在 中執行的範例 Node.js 函數,開始使用 Lambda@Edge CloudFront。當 CloudFront 擷取檔案時,此範例會將HTTP安全標頭新增至回應。(這可以改善網站的安全性和隱私權。)
本教學課程不需要您自己的網站。不過,當您選擇建立自己的 Lambda@Edge 解決方案時,請遵循類似的步驟並從相同的選項中選取 。
主題
步驟 1:註冊 AWS 帳戶
如果您尚未這樣做,請註冊 AWS 帳戶。如需詳細資訊,請參閱註冊 AWS 帳戶。
步驟 2:建立CloudFront 分佈
在建立 Lambda@Edge 函數範例之前,您必須有一個 CloudFront環境來使用,其中包含從中服務內容的原始伺服器。
在此範例中,您可以建立使用 Amazon S3 儲存貯體作為 CloudFront 分發來源的分發。如果您已有環境可使用,可以略過此步驟。
使用 CloudFrontAmazon S3 原始伺服器建立分佈
-
使用一兩個檔案來建立 Amazon S3 儲存貯體,例如範例內容適用的映像檔案。如需說明,請遵循將您的內容上傳到 Amazon S3 中的步驟。請確定您有設定對應的許可,以授予儲存貯體中物件的公有讀取權限。
-
按照建立 CloudFront Web CloudFront 分佈 中的步驟建立分佈,並將 S3 儲存貯體新增為原始伺服器。如果您已有分佈,可以改為新增儲存貯體當做該分佈的來源。
提示
請記下您的分佈 ID。在本教學稍後的課程中,當您為函數新增 CloudFront 觸發條件時,您必須在下拉式清單中選擇分發的 ID,例如
E653W22221KDDL
。
步驟 3:建立函數
在此步驟中,您可以從 Lambda 主控台中的藍圖範本建立 Lambda 函數。函數會新增程式碼來更新分佈中的 CloudFront安全標頭。
建立 Lambda 函式
-
登入 AWS Management Console 並在 開啟 AWS Lambda 主控台https://console.aws.amazon.com/lambda/
。 重要
請確定您位於美國US-East-1(維吉尼亞北部) AWS 區域 (us-east-1)。您必須位在此區域,才能建立 Lambda@Edge 函數。
-
選擇 Create function (建立函數)。
-
在建立函數頁面上,選擇使用藍圖 ,然後在
cloudfront
搜尋欄位中輸入 CloudFront 藍圖進行篩選。注意
CloudFront 藍圖僅適用於 US-East-1 (維吉尼亞北部) 區域 (us-east-1)。
-
選擇修改HTTP回應標頭藍圖作為函數的範本。
-
輸入以下有關函數的資訊:
-
函數名稱 – 輸入函數的名稱。
-
執行角色 – 選擇如何設定函數的許可。若要使用建議的基本 Lambda@Edge 許可政策範本,請選擇從 AWS 政策範本 建立新角色。
-
角色名稱 – 輸入政策範本建立的角色名稱。
-
政策範本 – Lambda 會自動新增政策範本 Basic Lambda@Edge 許可,因為您選擇 CloudFront藍圖作為函數的基礎。此政策範本會新增執行角色許可, CloudFront 允許 在全球 CloudFront 位置為您執行 Lambda 函數。如需詳細資訊,請參閱設定 Lambda@Edge 的IAM許可和角色。
-
-
選擇頁面底部的建立函數。
-
在顯示的部署至 Lambda@Edge 窗格中,選擇取消 。(在本教學課程中,您必須先修改函數程式碼,才能將函數部署至 Lambda@Edge。)
-
向下捲動至頁面的程式碼來源區段。
-
使用修改原始伺服器傳回之安全性標頭的函數,來取代範本程式碼。例如,您可能會使用與下列類似的程式碼:
'use strict'; export const handler = (event, context, callback) => { //Get contents of response const response = event.Records[0].cf.response; const headers = response.headers; //Set new headers headers['strict-transport-security'] = [{key: 'Strict-Transport-Security', value: 'max-age= 63072000; includeSubdomains; preload'}]; headers['content-security-policy'] = [{key: 'Content-Security-Policy', value: "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'"}]; headers['x-content-type-options'] = [{key: 'X-Content-Type-Options', value: 'nosniff'}]; headers['x-frame-options'] = [{key: 'X-Frame-Options', value: 'DENY'}]; headers['x-xss-protection'] = [{key: 'X-XSS-Protection', value: '1; mode=block'}]; headers['referrer-policy'] = [{key: 'Referrer-Policy', value: 'same-origin'}]; //Return modified response callback(null, response); };
-
選擇檔案 ,儲存 以儲存更新後的程式碼。
選擇部署。
前往下一節以新增 CloudFront 觸發程序來執行函數。
步驟 4:新增CloudFront 觸發程序以執行函數
現在您已擁有 Lambda 函數來更新安全標頭,請設定CloudFront 觸發程序來執行函數,以新增從分發原始伺服器接收的任何回應 CloudFront中的標頭。
設定函數的 CloudFront 觸發程序
-
在 Lambda 主控台的函數概觀頁面上,選擇新增觸發程序 。
-
針對觸發組態 ,選擇 CloudFront。
-
選擇部署至 Lambda@Edge 。
-
在部署至 Lambda@Edge 窗格中,在設定 CloudFront 觸發程序 下,輸入下列資訊:
-
分佈 – CloudFront要與您的函數建立關聯的分佈 ID。在下拉式清單中,選擇分佈 ID。
-
快取行為 – 要與觸發程序搭配使用的快取行為。在此範例中,請將值的設定保留為 *,這代表分佈的預設快取行為。如需詳細資訊,請參閱 分佈設定參考 主題中的 快取行為設定。
-
CloudFront event – 指定函數執行時間的觸發條件。我們希望每當 CloudFront 傳回原始伺服器的回應時,安全標頭函數都會執行。在下拉式清單中,選擇 Origin 回應 。如需詳細資訊,請參閱新增 Lambda@Edge 函數的觸發條件。
-
-
選取確認部署至 Lambda@Edge 核取方塊。
-
選擇部署以新增觸發程序,並將函數複寫至全球 AWS 位置。
-
請等候函數完成複寫。這通常需要幾分鐘的時間。
您可以前往 CloudFront主控台
並檢視分佈,查看複寫是否已完成。等待分佈狀態從部署變更為日期和時間,這表示您的函數已複寫。若要驗證函數是否可正常運作,請依照下一節的步驟進行。
步驟 5:驗證函數正常執行
現在,您已經建立 Lambda 函數並設定觸發程序來執行該函數以進行 CloudFront 分佈,請檢查該函數是否達到預期。在此範例中,我們會檢查傳回的HTTP CloudFront標頭,以確保已新增安全標頭。
驗證您的 Lambda@Edge 函數有新增安全標頭
-
在瀏覽器中,輸入 S3 儲存貯體中檔案URL的 。例如,您可以使用URL類似 的
https://d111111abcdef8.cloudfront.net/image.jpg
。如需要在 檔案中使用的 CloudFront 網域名稱的詳細資訊URL,請參閱 自訂 中檔案的URL格式 CloudFront。
-
開啟瀏覽器的網頁開發人員工具列。例如,在 Chrome 瀏覽器視窗中,開啟內容 (按一下滑鼠右鍵) 選單,然後選擇 Inspect (檢查)。
-
選擇 Network (網路) 索引標籤。
-
重新載入頁面以檢視您的映像,然後在左側窗格中選擇一個HTTP請求。您會在個別窗格中看到顯示的HTTP標頭。
-
查看HTTP標頭清單,以確認預期的安全標頭包含在清單中。例如,您可能會看到類似於以下螢幕擷取畫面所示的標頭。
如果安全標頭包含在您的標頭清單中,那就太棒了!這表示您已成功建立第一個 Lambda@Edge 函數。如果 CloudFront 傳回錯誤或有其他問題,請繼續下一個步驟來疑難排解問題。
步驟 6:排除問題
如果 CloudFront 傳回錯誤或 未如預期新增安全標頭,您可以查看 CloudWatch Logs 來調查函數的執行。請務必使用存放在最 AWS 接近執行函數位置的日誌。
例如,如果您從倫敦檢視 檔案,請嘗試將CloudWatch 主控台中的區域變更為歐洲 (倫敦)。
檢查 Lambda@Edge 函數的CloudWatch 日誌
登入 AWS Management Console 並在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 -
將 Region (區域) 變更為您在瀏覽器中檢視檔案時所顯示的位置。這是函數執行所在的位置。
-
在左窗格中,選擇 Logs (日誌) 來檢視分佈的日誌。
如需詳細資訊,請參閱使用 Amazon CloudFront 監控指標 CloudWatch。
步驟 7:清除範例資源
如果您僅為本教學課程建立 Amazon S3 儲存貯體和 CloudFront 分佈,請刪除您配置 AWS 的資源,以便不再產生費用。刪除 AWS 資源後,您新增的任何內容將不再可用。
工作
刪除 S3 儲存貯體
刪除 Amazon S3 儲存貯體之前,請務必停用儲存貯體的記錄。否則,刪除日誌時, AWS 請繼續將日誌寫入儲存貯體。
停用儲存貯體的記錄
在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/
。 -
選取您的儲存貯體,然後選擇 Properties (屬性)。
-
從 Properties (屬性) 選擇 Logging (記錄日誌)。
-
清除 Enabled (已啟用) 核取方塊。
-
選擇 Save (儲存)。
現在即可刪除儲存貯體。如需詳細資訊,請參閱 Amazon Simple Storage Service 主控台使用者指南中的我該如何刪除 S3 儲存貯體?。
刪除 Lambda 函數
如需刪除 Lambda 函數關聯和可選函數本身的指示,請參閱 刪除 Lambda@Edge 函數和複本。
刪除 CloudFront 分佈
刪除 CloudFront 分發之前,您必須先停用分發。已停用的分佈如此即不再有用,也不會產生費用。您隨時都可以啟用之前停用的分佈。刪除停用的分佈之後,它即不再可供使用。
若要停用和刪除 CloudFront 分佈
在 開啟 CloudFront 主控台https://console.aws.amazon.com/cloudfront/v4/home
。 -
選取您要停用的分佈,然後選擇 Disable (停用)。
-
出現確認提示時,請選擇 Yes, Disable (是,停用)。
-
選取已停用的分佈,然後選擇 Delete (刪除)。
-
出現確認提示時,選擇 Yes, Delete (是,刪除)。
相關資訊
現在您對於 Lambda@Edge 函數的運作方式已有了基本了解,請閱讀以下內容來進一步了解: