

# 编写和创建 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 管理控制台，然后通过以下网址打开 AWS Lambda 控制台：[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)。

1. 如果您已有一个或多个 Lambda 函数，请选择**创建函数**。

   如果您没有任何函数，请选择**立即开始使用**。

1. 在页面顶部的“区域”列表中，选择**美国东部（弗吉尼亚州北部）**。

1. 使用您自己的代码创建函数，或者以 CloudFront 蓝图为基础创建函数。
   + 要使用您自己的代码创建函数，请选择**从头开始创作**。
   + 要显示 CloudFront 蓝图列表，请在筛选条件字段中输入 **cloudfront**，然后选择 **Enter** 键。

     如果您找到了自己要使用的蓝图，请选择该蓝图的名称。

1. 在**基本信息**部分，指定以下值：

   1. **名称** – 输入函数的名称。

   1. **角色** – 要快速入门，请选择**从模板创建新角色**。您也可以选择**选择现有角色**或**创建自定义角色**，然后按照提示填写本部分的信息。

   1. **角色名称** – 输入角色的名称。

   1. **策略模板** – 选择**基本 Edge Lambda 权限**。

1. 如果您在步骤 4 中选择了**从头开始创作**，请跳至步骤 7。

   如果您在步骤 4 中选择了蓝图，则可通过 **cloudfront** 部分创建一个触发器，它可将此函数与 CloudFront 分配和 CloudFront 事件中的缓存相关联。建议您现在选择**删除**，因此在创建函数时没有函数触发器。您可以在稍后添加触发器。
**提示**  
建议您先测试和调试该函数，然后再添加触发器。如果选择立即添加触发器，则在您创建该函数，该函数完成向全球 AWS 位置的复制，并且相应的分配部署完成后，该函数将立即开始运行。

1. 选择**创建函数**。

   Lambda 将创建两个版本的函数：\$1LATEST 和 Version 1。您只能编辑 \$1LATEST 版本，但控制台最初会显示 Version 1。

1. 要编辑函数，请选择页面顶部附近、函数 ARN 下方的 **Version 1**。然后，在 **Versions** 选项卡上，选择 **\$1LATEST**。（如果您离开再返回到该函数，则按钮标签将是 **Qualifiers**。）

1. 在 **Configuration** 选项卡上，选择适用的 **Code entry type**。然后，按照提示编辑或上传您的代码。

1. 对于**运行时**，请根据函数的代码选择值。

1. 在**标签**部分中，添加任何适用的标签。

1. 选择**操作**，然后选择**发布新版本**。

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 管理控制台，然后通过以下网址打开 AWS Lambda 控制台：[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)。

1. 在页面顶部的“区域”列表中，选择**美国东部（弗吉尼亚州北部）**。

1. 在函数列表中，选择函数的名称。

   默认情况下，控制台会显示 \$1LATEST 版本。您可以查看早期版本（选择 **Qualifiers**），但是只能编辑 \$1LATEST。

1. 在**代码**选项卡上，对于**代码输入种类**，选择在浏览器中编辑代码、上传 .zip 文件，或从 Amazon S3 上传文件。

1. 选择**保存**或**保存并测试**。

1. 选择**操作**，然后选择**发布新版本**。

1. 在 **Publish new version from \$1LATEST** 对话框中，输入新版本的描述。此描述会与自动生成的版本号一起显示在版本列表中。

1. 选择 **Publish**。

   新版本将自动成为最新版本。版本号会显示在页面左上角的**版本**中。
**注意**  
如果您尚未为函数添加触发器，请参阅 [为 Lambda@Edge 函数添加触发器](lambda-edge-add-triggers.md)。

1. 选择**触发器**选项卡。

1. 选择 **Add trigger**。

1. 在**添加触发器**对话框中，选择虚线框，然后再选择 **CloudFront**。
**注意**  
如果您已为函数创建一个或多个触发器，则 CloudFront 为默认服务。

1. 指定以下值，以指示您希望 Lambda 函数何时执行。

   1. **分配 ID** – 选择要向其中添加触发器的分配的 ID。

   1. **缓存行为** – 选择缓存行为，该行为将指定您要对其执行函数的对象。

   1. **CloudFront 事件** – 选择促使函数执行的 CloudFront 事件。

   1. **启用触发器并复制** – 选中此复选框，以便 Lambda 将函数复制到全球各地的 AWS 区域。

1. 选择 **Submit**。

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)。