

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

# 教學課程：使用 CloudFront Functions 建立簡單的函數
<a name="functions-tutorial"></a>

本教學課程將協助您開始使用 CloudFront Functions。您可建立簡單函數將檢視器重新導向至不同的 URL，此外也會傳回自訂回應標頭。

**Contents**
+ [先決條件](#functions-tutorial-prerequisites)
+ [建立函數](#functions-tutorial-create)
+ [驗證函數](#functions-tutorial-verify)

## 先決條件
<a name="functions-tutorial-prerequisites"></a>

要使用 CloudFront Functions，您需要一個 CloudFront 分佈。如果您沒有帳戶，請參閱 [開始使用 CloudFront 標準分佈](GettingStarted.SimpleDistribution.md)。

## 建立函數
<a name="functions-tutorial-create"></a>

您可使用 CloudFront 主控台建立簡單函數，該函數將檢視器重新導向至不同的 URL，以及傳回自訂回應標頭。

**建立 CloudFront 函數**

1. 登入 AWS 管理主控台 ，並在 開啟 CloudFront 主控台[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 在導覽面板上選擇**函數**，然後選擇**建立函數**。

1. 在**建立函數**頁面對**名稱**輸入函數名稱，例如 *MyFunctionName*。

1. (選用) 對於**說明**，請輸入函數的說明內容，例如 **Simple test function**。

1. 對於**執行時期**，請保留預設選取的 JavaScript 版本。

1. 選擇**建立函數**。

1. 複製下列函數程式碼。此函數程式碼會將檢視者重新導向至不同的 URL，並傳回自訂回應標頭。

   ```
   function handler(event) {
       // NOTE: This example function is for a viewer request event trigger. 
       // Choose viewer request for event trigger when you associate this function with a distribution. 
       var response = {
           statusCode: 302,
           statusDescription: 'Found',
           headers: {
               'cloudfront-functions': { value: 'generated-by-CloudFront-Functions' },
               'location': { value: 'https://aws.amazon.com/cloudfront/' }
           }
       };
       return response;
   }
   ```

1. 對於**函數程式碼**，請將程式碼貼到程式碼編輯器中，以取代預設程式碼。

1. 選擇**儲存變更**。

1. (選用) 您可以在發佈之前測試函數。本教學課程不會介紹如何測試函數。如需詳細資訊，請參閱[測試函數](test-function.md)。

1. 選擇**發佈**索引標籤，然後選擇**發佈函數**。您*必須*先發佈該函數，才能將其與 CloudFront 分佈建立關聯。

1. 接下來您可以將函數與分佈或快取行為建立關聯。在 *MyFunctionName* 頁面選擇**發佈**索引標籤。
**警告**  
在下列步驟中，選擇用於測試的分佈或快取行為。請勿將此測試函數與正式作業環境中使用的分佈或快取行為建立關聯。

1. 選擇 **Add association (建立關聯)**。

1. 在**關聯**對話方塊中，選擇分佈和/或快取行為。對於**事件類型**，請保留預設值。

1. 選擇 **Add association (建立關聯)**。

   **關聯的分佈**資料表中會顯示關聯的分佈。

1. 等待幾分鐘，讓關聯的分佈完成部署。若要檢查分佈狀態，請在**關聯的分佈**資料表中選取分佈，然後選擇**檢視分佈**。

   當分佈的狀態為**已部署**時，您就可以確認該函數正常運作。

## 驗證函數
<a name="functions-tutorial-verify"></a>

您部署函數之後，可以驗證該函數是否為您的分佈發揮作用。

**驗證函數**

1. 在 Web 瀏覽器中，導覽至分佈的網域名稱 (例如 `https://d111111abcdef8.cloudfront.net`)。

   該函數傳回重定向到瀏覽器，因此瀏覽器會自動轉到 `https://aws.amazon.com/cloudfront/`。

1. 您可在命令列視窗中使用 **curl** 之類的工具，將請求傳送至分佈的網域名稱。

   ```
   curl -v https://d111111abcdef8.cloudfront.net/
   ```

   您在回應中會看到重新導向回應 (`302 Found`) 和函數新增的自訂回應標頭。以下範例為可能的回應形式。  
**Example**  

   ```
   curl -v https://d111111abcdef8.cloudfront.net/
   > GET / HTTP/1.1
   > Host: d111111abcdef8.cloudfront.net
   > User-Agent: curl/7.64.1
   > Accept: */*
   >
   < HTTP/1.1 302 Found
   < Server: CloudFront
   < Date: Tue, 16 Mar 2021 18:50:48 GMT
   < Content-Length: 0
   < Connection: keep-alive
   < Location: https://aws.amazon.com/cloudfront/
   < Cloudfront-Functions: generated-by-CloudFront-Functions
   < X-Cache: FunctionGeneratedResponse from cloudfront
   < Via: 1.1 3035b31bddaf14eded329f8d22cf188c.cloudfront.net (CloudFront)
   < X-Amz-Cf-Pop: PHX50-C2
   < X-Amz-Cf-Id: ULZdIz6j43uGBlXyob_JctF9x7CCbwpNniiMlmNbmwzH1YWP9FsEHg==
   ```