

# 更新函数
<a name="update-function"></a>

您可以随时更新函数。仅对处于 `DEVELOPMENT` 阶段的函数版本进行更改。要将更新从 `DEVELOPMENT` 阶段复制到 `LIVE`，您必须[发布函数](publish-function.md)。

您可以在 CloudFront 控制台中或使用 AWS Command Line Interface（AWS CLI）更新函数的代码。

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

**更新函数代码**

1. 通过 [https://console.aws.amazon.com/cloudfront/v4/home#/functions](https://console.aws.amazon.com/cloudfront/v4/home#/functions) 登录到 CloudFront 控制台，然后选择**函数**页面。

   选择要更新的函数。

1. 选择**编辑**并进行所需的更改：
   + 根据需要在**详细信息**部分中更新任意字段。
   + 更改或移除关联的键值存储。有关键值存储的更多信息，请参阅[Amazon CloudFront KeyValueStore](kvs-with-functions.md)。
   + 更改函数代码。选择**构建**选项卡，进行更改，然后选择**保存更改**来保存对代码的更改。

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

**更新函数代码**

1. 打开一个命令行窗口。

1. 运行如下命令。

   此示例使用 `fileb://` 表示法来传入文件。它还包括换行符，以使命令更具可读性。

   ```
   aws cloudfront update-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 \
       --if-match ETVABCEXAMPLE
   ```
**备注**  
您可以通过函数的名称和 ETag（在 `if-match` 参数中）来标识该函数。确保您使用当前的 ETag。您可以从 [DescribeFunction](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_DescribeFunction.html) API 操作中获取此值。
即使您不想对 `function-code` 进行更改，也必须包含它。
务必注意 `function-config`。您应传递您想要在配置中保留的所有内容。具体而言，应按如下方式处理键值存储：  
要保留现有的键值存储关联（如果有），请指定*现有*存储的名称。
要更改关联，请指定*新*键值存储的名称。
要移除关联，请忽略 `KeyValueStoreAssociations` 参数。

   该命令成功执行后，您会看到类似以下内容的输出。

   ```
   ETag: ETVXYZEXAMPLE
   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-12-19T23:41:15.389000+00:00' \
       Stage: DEVELOPMENT \
     Name: MaxAge \
     Status: UNPUBLISHED
   ```

------

请求中的大部分信息都是重复的。其他信息由 CloudFront 添加。

**备注**  
`ETag` – 每次修改键值存储时，此值都会更改。
`FunctionARN` – 您的 CloudFront 函数的 ARN。
`Stage` – 函数的阶段（`LIVE` 或 `DEVELOPMENT`）。
`Status` – 函数的状态（`PUBLISHED` 或 `UNPUBLISHED`）。