

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 撰寫及建立 Lambda@Edge 函數
<a name="lambda-edge-create-function"></a>

若要使用 Lambda@Edge，請*撰寫* AWS Lambda 函數的程式碼。為了協助您撰寫 Lambda@Edge 函數，請參閱下列資源：
+  [Lambda@Edge 事件結構說明頁面](lambda-event-structure.md)：瞭解與 Lambda@Edge 搭配使用的事件結構。
+ [Lambda@Edge 範例函數](lambda-examples.md)：範例函數，例如 A/B 測試和產生 HTTP 重新導向。

將 Node.js 或 Python 用於 Lambda@Edge 的程式設計模型和在 AWS 區域中使用 Lambda 的程式設計模型相同。如需詳細資訊，請參閱《*AWS Lambda 開發人員指南*》中的[使用 Node.js 建構 Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html)或[使用 Python 建構 Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)。

在您的 Lambda@Edge 函數中，包含 `callback` 參數並傳回請求或回應事件的適用物件：
+ **請求事件** – 在回應中包含 `cf.request` 物件。

  如果您要產生回應，請在回應中包含 `cf.response` 物件。如需詳細資訊，請參閱[在請求觸發條件中產生 HTTP 回應](lambda-generating-http-responses.md#lambda-generating-http-responses-in-requests)。
+ **回應事件** – 在回應中包含 `cf.response` 物件。

在您撰寫自己的程式碼或使用其中一個範例後，接著在 Lambda 中建立函數。若要建立函數或編輯現有函數，請參閱下列主題：

**Topics**
+ [建立 Lambda@Edge 函數](lambda-edge-create-in-lambda-console.md)
+ [編輯 Lambda 函數](lambda-edge-edit-function.md)

 在 Lambda 中建立函數後，您可以設定 Lambda 根據稱為*觸發*的特定 CloudFront 事件執行函數。如需詳細資訊，請參閱[為 Lambda@Edge 函數新增觸發條件](lambda-edge-add-triggers.md)。

# 建立 Lambda@Edge 函數
<a name="lambda-edge-create-in-lambda-console"></a>

若要設定 AWS Lambda 以執行以 CloudFront 事件為基礎的 Lambda 函數，請遵循此程序。<a name="lambda-edge-create-function-procedure"></a>

**建立 Lambda@Edge 函數**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 開啟 AWS Lambda 主控台。

1. 如果您已擁有一個或多個 Lambda 函數，請選擇 **Create function (建立函數)**。

   如果您未擁有任何函數，請選擇 **Get Started Now (立即開始)**。

1. 在頁面頂端的「區域」清單中，選擇**美國東部 (維吉尼亞北部)**。

1. 使用您自己的程式碼建立函數，或以 CloudFront 藍圖為基礎建立函數。
   + 若要使用自己的程式碼來建立函數，請選擇 **Author from scratch (從頭開始編寫)**。
   + 若要顯示 CloudFront 藍圖清單，請在篩選條件欄位輸入 **cloudfront**，然後選擇 **Enter**。

     如果找到想要使用的藍圖，請選擇該藍圖名稱。

1. 在 **Basic information (基本資訊)** 區段中，指定下列的值：

   1. **名稱**：輸入函數名稱。

   1. **角色**：若要快速開始使用，請選擇**從範本建立新角色**。您也可以選擇**選擇現有角色**或**建立自訂角色**，然後依照提示完成本區段的資訊。

   1. **角色名稱**：輸入角色名稱。

   1. **政策範本**：選擇**基本邊緣 Lambda 許可權限**。

1. 如果您在步驟 4 中選擇 **Author from scratch (從頭開始編寫)**，請跳到步驟 7。

   如果您在步驟 4 選擇藍圖，則可於 **cloudfront** 區段建立一個觸發，其可以將此函數與 CloudFront 分佈和 CloudFront 事件中的快取相關聯。我們建議您在此處選擇 **Remove (移除)**，如此函數在建立時就不會有觸發條件。您可以在稍後新增觸發。
**提示**  
建議在新增觸發條件之前，先對函數進行測試及除錯。如果您現在新增觸發條件，函式會在您建立函式並完成複寫至世界各地的 AWS 位置，並部署對應的分佈時立即執行。

1. 選擇 **Create function (建立函數)**。

   Lambda 會建立兩個版本的函數：\$1LATEST 和 Version 1。您只能編輯 \$1LATEST 版本，但是主控台最初會顯示 Version 1。

1. 若要編輯函數，請選擇該函數 ARN 下方、靠近頁面頂端的 **Version 1 (版本 1)**。接著，在 **Versions (版本)** 索引標籤中，選擇 **\$1LATEST (\$1LATEST)**。(如果離開函數再返回，按鈕的標籤會是 **Qualifiers (修飾詞)**。)

1. 在 **Configuration (組態)** 索引標籤中，選擇適用的 **Code entry type (程式碼項目類型)**。然後遵循提示來編輯或上傳程式碼。

1. 針對 **Runtime (執行時間)**，根據函數的程式碼來選擇值。

1. 在 **Tags (標籤)** 區段中，新增任何適用的標籤。

1. 選擇 **Actions (動作)**，然後選擇 **Publish new version (發佈新版本)**。

1. 輸入函數新版本的說明。

1. 選擇 **Publish (發佈)**。

1. 對函數進行測試與偵錯。如需有關在 Lambda 主控台進行測試的詳細資訊，請參閱《*AWS Lambda 開發人員指南*》中的[使用主控台調用 Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#get-started-invoke-manually)。

1. 當您準備好將函數用於 CloudFront 事件執行時，請發佈另一個版本，並編輯該函數以新增觸發。如需詳細資訊，請參閱[為 Lambda@Edge 函數新增觸發條件](lambda-edge-add-triggers.md)。

# 編輯 Lambda 函數
<a name="lambda-edge-edit-function"></a>

建立 Lambda@Edge 函數之後，您可以使用 Lambda 主控台編輯該函數。

**備註**  
原始版本標記為 \$1LATEST。
您只能編輯 \$1LATEST 版本。
每次您編輯 \$1LATEST 版本時，必須發佈新的編號版本。
您無法為 \$1LATEST 建立觸發。
當您發佈新函數版本時，Lambda 不會自動將觸發條件由前一個版本複製到新版本。您必須為新版本重新產生觸發。
當您新增 CloudFront 事件觸發條件到函數時，如果針對相同分佈、快取行為及事件之較早版本的相同函數已具有觸發條件，則 Lambda 會刪除較早版本的觸發條件。
在您對 CloudFront 分佈進行例如新增觸發等更新後，必須等待變更傳播到節點，您由觸發條件所指定的函數才可運作。<a name="lambda-edge-edit-function-procedure"></a>

**若要編輯 Lambda 函數**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 開啟 AWS Lambda 主控台。

1. 在頁面頂端的「區域」清單中，選擇**美國東部 (維吉尼亞北部)**。

1. 在函數清單上選取函數名稱。

   根據預設，主控台會顯示 \$1LATEST 版本。您可以檢視較早的版本 (選擇 **Qualifiers (修飾詞)**)，但是只能編輯 \$1LATEST。

1. 在**程式碼**索引標籤上，針對**程式碼項目類型**，選擇在瀏覽器中編輯程式碼、上傳 .zip 檔案，或從 Amazon S3 上傳檔案。

1. 選擇 **Save (儲存)** 或 **Save and test (儲存並測試)**。

1. 選擇 **Actions (動作)**，然後選擇 **Publish new version (發佈新版本)**。

1. 在 **Publish new version from \$1LATEST (從 \$1LATEST 發佈新版本)** 對話方塊中，輸入新版本的說明。此說明會與自動產生的版本編號一起顯示在版本清單中。

1. 選擇 **Publish (發佈)**。

   新版本會自動成為最新版本。版本編號會顯示於頁面左上角的**版本**按鈕上。
**注意**  
如果您尚未為函數新增觸發條件，請參閱 [為 Lambda@Edge 函數新增觸發條件](lambda-edge-add-triggers.md)。

1. 選擇 **Triggers (觸發條件)** 索引標籤。

1. 選擇 **Add trigger (新增觸發條件)**。

1. 在**新增觸發**對話方塊，選擇虛線方塊，再選擇 **CloudFront**。
**注意**  
如果您已為函數建立一或多個觸發條件，則 CloudFront 為預設服務。

1. 指定下列值，以指示您希望 Lambda 函數在何時執行。

   1. **分佈 ID**：選擇您要為其新增觸發的分佈 ID。

   1. **快取行為**：選擇快取行為，透過該行為指定您要執行函數的物件。

   1. **CloudFront 事件**：選擇促使函數執行的 CloudFront 事件。

   1. **啟用觸發條件及複寫**：選取此核取方塊，讓 Lambda 將函數複寫到全球的 AWS 區域 。

1. 選擇**提交**。

1. 若要為此函數新增更多觸發，請重複操作步驟 10 到 13。

如需更多資訊瞭解在 Lambda 主控台中測試和偵錯函數，請參閱《*AWS Lambda 開發人員指南*》中的[使用主控台調用 Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#get-started-invoke-manually)。

當您準備好將函數用於 CloudFront 事件執行時，請發佈另一個版本，並編輯該函數以新增觸發。如需詳細資訊，請參閱[為 Lambda@Edge 函數新增觸發條件](lambda-edge-add-triggers.md)。