

# 创建用于双向 TLS（查看器）验证的 CloudFront 连接函数
<a name="create-connection-functions"></a>

通过两个阶段创建 CloudFront 连接函数：

1. 将函数代码编写为 JavaScript。您可以使用来自 CloudFront 控制台的默认示例，也可以自行编写。有关更多信息，请参阅以下主题：
   + 编写用于 mTLS 验证的 CloudFront 连接函数代码
   + CloudFront 连接函数事件结构和响应格式
   + 连接函数代码示例

1. 使用 CloudFront 创建连接函数并包括您的代码。代码位于函数内部（不是作为引用）。

**Topics**
+ [CloudFront 控制台](#create-connection-function-console)
+ [AWS CLI](#create-connection-function-cli)

## CloudFront 控制台
<a name="create-connection-function-console"></a>

**创建连接函数**

1. 登录 AWS 管理控制台，并通过以下网址打开 CloudFront 控制台：[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

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

1. 输入在 AWS 账户中唯一的函数名称，选择**连接函数**作为函数类型，然后选择**继续**。

1. 此时将显示新连接函数的详细信息页面。
**注意**  
连接函数仅支持 JavaScript 运行时 2.0。要在函数中使用 CloudFront 连接函数 KeyValueStore 集成，您必须使用此运行时版本。

1. 在**函数代码**部分，选择**构建**选项卡，然后输入您的连接函数代码。“构建”选项卡中包含的代码示例说明了连接函数代码的基本语法。

1. 选择**保存更改**。

1. 如果连接函数代码使用 KeyValueStore 进行证书吊销检查或设备验证，则您必须关联 KeyValueStore。

   您可以在首次创建函数时关联 KeyValueStore。或者，您可以稍后通过关联连接函数来关联它。

   要立即关联 KeyValueStore，请执行以下步骤：
   + 转至**关联 KeyValueStore** 部分，选择**关联现有 KeyValueStore**。
   + 选择包含连接函数的证书数据的 KeyValueStore，然后选择**关联 KeyValueStore**。

   CloudFront 会立即将存储与该函数关联。您无需保存此函数。

## AWS CLI
<a name="create-connection-function-cli"></a>

如果您使用 AWS CLI，则通常需要首先在文件中创建连接函数代码，然后使用 AWS CLI 创建函数。

**创建连接函数**

1. 在文件中创建连接函数代码，并将其存储在您的计算机可以连接到的目录中。

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

   ```
   aws cloudfront create-connection-function \
       --name CertificateValidator \
       --connection-function-config '{
           "Comment":"Device certificate validation",
           "Runtime":"cloudfront-js-2.0",
           "KeyValueStoreAssociations":{
               "Quantity":1,
               "Items":[{
                   "KeyValueStoreARN":"arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
               }]
           }
       }' \
       --connection-function-code fileb://certificate-validator.js
   ```
**注意**  
**运行时**：连接函数仅支持 JavaScript 运行时 2.0（cloudfront-js-2.0）。
**KeyValueStoreAssociations**：如果您的连接函数使用 KeyValueStore 进行证书验证，则可以在首次创建函数时关联 KeyValueStore。或者，您可以在以后使用 update-connection-function 关联它。“数量”始终为 1，因为每个连接函数只能关联一个 KeyValueStore。

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

   ```
   ETag: ETVABCEXAMPLE
   ConnectionFunctionSummary:
     ConnectionFunctionConfig:
       Comment: Device certificate validation
       Runtime: cloudfront-js-2.0
       KeyValueStoreAssociations:
         Quantity: 1
         Items:
           - KeyValueStoreARN: arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111
     ConnectionFunctionMetadata:
       CreatedTime: '2024-09-04T16:32:54.292000+00:00'
       ConnectionFunctionARN: arn:aws:cloudfront::111122223333:connection-function/CertificateValidator
       LastModifiedTime: '2024-09-04T16:32:54.292000+00:00'
       Stage: DEVELOPMENT
     Name: CertificateValidator
     Status: UNPUBLISHED
   Location: https://cloudfront.amazonaws.com/2020-05-31/connection-function/arn:aws:cloudfront:::connection-function/CertificateValidator
   ```

   请求中的大部分信息都是重复的。其他信息由 CloudFront 添加。
**注意**  
**ETag**：每次修改连接函数时，此值都会发生更改。您需要使用此值来更新或发布函数。
**阶段**：新的连接函数从 DEVELOPMENT 阶段开始。必须先发布该函数以将其移至 LIVE 阶段，然后再将其与分配关联。
**状态**：在您将函数发布到 LIVE 阶段之前，其状态为 UNPUBLISHED。