

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

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

您可以分兩個階段建立函數：

1. 建立函數程式碼做為 JavaScript。您可以從 CloudFront 主控台使用預設範例或自行撰寫。如需詳細資訊，請參閱下列主題：
   + [撰寫函數程式碼](writing-function-code.md)
   + [CloudFront Functions 事件結構](functions-event-structure.md)
   + [CloudFront 的 CloudFront Functions 範例](service_code_examples_cloudfront_functions_examples.md)

1. 然後，您可以使用 CloudFront 建立函數並包含程式碼。程式碼存在於函數內部 (而不是引用形式)。

------
#### [ Console ]

**建立 函數**

1. 在 [https://console.aws.amazon.com/cloudfront/v4/home#/functions](https://console.aws.amazon.com/cloudfront/v4/home#/functions) 登入 CloudFront 主控台，並選擇**函數**頁面。

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

1. 輸入在 AWS 帳戶 內唯一的函數名稱，然後選擇 JavaScript 版本，接著選擇**繼續**。新函數的詳細資訊頁面會隨即顯示。
**注意**  
如要在函數中使用[鍵值對](kvs-with-functions.md)，您必須選擇 JavaScript 執行時期 2.0。

1. 在**函數程式碼**區段中，選擇**建置**索引標籤，然後輸入您的函數程式碼。**建置**索引標籤中包含的範例程式碼會說明函數程式碼的基本語法。

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

1. 如果函數程式碼使用鍵值對，則必須關聯鍵值存放區。

   在首次建立函數時，您可以關聯鍵值存放區。或者，您可以稍後透過[更新函數](update-function.md)來關聯它。

   若要立即關聯鍵值存放區，請依照下列步驟執行：
   + 前往**關聯 KeyValueStore** 區段，然後選擇**關聯現有的 KeyValueStore**。
   + 選取函數中包含鍵值對的鍵值存放區，然後選擇**關聯 KeyValueStore**。

   CloudFront 會立即將存放區與該函數建立關聯。您無需儲存函數。

------
#### [ CLI ]

如果您使用 CLI，通常會先在檔案中建立函數程式碼，然後使用 AWS CLI 來建立函數。

**建立 函數**

1. 在檔案中建立函數程式碼，並將其儲存於電腦可以連線的目錄中。

1. 執行命令，如範例所示。此範例會使用 `fileb://` 標記法來傳入檔案。它還會包括換行符號，讓命令更易於讀取。

   ```
   aws cloudfront create-function \
       --name MaxAge \
       --function-config '{"Comment":"Max Age 2 years","Runtime":"cloudfront-js-2.0","KeyValueStoreAssociations":{"Quantity":1,"Items":[{"KeyValueStoreARN":"arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"}]}}' \
       --function-code fileb://function-max-age-v1.js
   ```
**備註**  
`Runtime` – JavaScript 版本。如要在函數中使用[鍵值對](kvs-with-functions.md)，您必須指定版本 2.0。
`KeyValueStoreAssociations` – 如果您的函數使用鍵值對，則可以在初次建立函數時關連鍵值存放區。或者，您可以稍後使用 `update-function` 來關聯它。`Quantity` 永遠等於 `1`，因為每個函數只能有一個與其關聯的鍵值存放區。

   如果命令成功執行，您會看到如下所示的輸出。

   ```
   ETag: ETVABCEXAMPLE
   FunctionSummary:
     FunctionConfig:
       Comment: Max Age 2 years
       Runtime: cloudfront-js-2.0
       KeyValueStoreAssociations= \
         {Quantity=1, \
         Items=[{KeyValueStoreARN='arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111'}]} \
     FunctionMetadata:
       CreatedTime: '2021-04-18T20:38:56.915000+00:00'
       FunctionARN: arn:aws:cloudfront::111122223333:function/MaxAge
       LastModifiedTime: '2023-11-19T20:38:56.915000+00:00'
       Stage: DEVELOPMENT
     Name: MaxAge
     Status: UNPUBLISHED
   Location: https://cloudfront.amazonaws.com/2020-05-31/function/arn:aws:cloudfront:::function/MaxAge
   ```

   大多數資訊都是從請求中複製的。其他資訊會由 CloudFront 新增。
**備註**  
`ETag` – 每次修改鍵值存放區時，這個值都會變更。您可以使用此值和函數名稱，以在未來參考函數。確保始終使用目前的 `ETag`。
`FunctionARN` – CloudFront 函數的 ARN。
111122223333 – AWS 帳戶。
`Stage` – 函數的階段 (`LIVE` 或 `DEVELOPMENT`)。
`Status` – 函數的狀態 (`PUBLISHED` 或 `UNPUBLISHED`)。

------

建立函數之後，該函數會新增至 `DEVELOPMENT` 階段。建議您[在發佈函數](publish-function.md)之前進行[測試](test-function.md)。發佈函數之後，函數會變更為 `LIVE` 階段。