

# 教程：使用 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. 选择**添加关联**。

1. 在**关联**对话框中，选择分配和/或缓存行为。对于**事件类型**，请保留默认值。

1. 选择**添加关联**。

   **关联的分配**表显示了关联的分配。

1. 等待几分钟，以便相关的分配完成部署。要检查分配的状态，请在**关联的分配**表中选择分配，然后选择**查看分配**。

   当分配的状态为 **Deployed**（已部署）时，您即可验证函数是否正常工作。

## 验证函数
<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==
   ```