将函数与分配关联 - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

将函数与分配关联

要将 CloudFront Functions 中的函数与 CloudFront 分配结合使用,请将该函数与分配中的一个或多个缓存行为关联。您可以将函数与多个分配中的多个缓存行为相关联。在关联函数之前,必须将其发布LIVE 阶段。

将函数与缓存行为关联时,必须选择事件类型。事件类型决定 CloudFront Functions 何时运行函数。有两种事件类型可供选择:

有关事件类型的更多信息,请参阅可以触发 Lambda 函数的 CloudFront 事件。您不能将面向源的事件类型(源请求源响应)与 CloudFront Functions 结合使用。

  • 查看器请求 – 当 CloudFront 收到来自查看器的请求时,该函数将运行。

  • 查看器请求 – 该函数在 CloudFront 向查看器返回响应之前运行。

您可以在 CloudFront 控制台中或使用 Amazon CLI 将函数与分配相关联。

您可以使用 CloudFront 控制台将函数与现有 CloudFront 分配中的现有缓存行为相关联。有关创建分配的更多信息,请参阅创建分配

要将函数与现有缓存行为关联(控制台)

  1. 要将函数与分配关联,请通过以下网址在 CloudFront 控制台中打开 Functions (函数) 页面:https://console.amazonaws.cn/cloudfront/v2/home#/functions,然后选择您想要关联的函数。

  2. 在函数页面上,选择 Associate(关联)选项卡。然后执行以下操作:

    1. 对于分配,选择与函数关联的分配。

    2. 对于事件类型,选择您希望此函数在何时运行:

      • 要在 CloudFront 每次收到请求时运行该函数,请选择 Viewer Request(查看器请求)。

      • 要在 CloudFront 每次返回响应时运行该函数,请选择 Viewer Response(查看器响应)。

    3. 对于 Cache behavior(缓存行为),请选择与此函数关联的缓存行为(为默认缓存行为选择 *)。该函数在请求(或者在查看器响应函数的情况下,响应的相应请求)与此缓存行为匹配时运行。

    4. 选择 Add association。然后,在 Associate function to cache behavior(将函数与缓存行为关联)弹出窗口中,选择 Associate(关联)。

    
                                CloudFront 控制台中函数页面的 Associate (关联) 选项卡。

成功后,您会在页面顶部看到一个横幅,表明函数名称已成功关联。您还可以在关联的 CloudFront 分配表中查看相关分配。等待几分钟,以便相关的分配完成部署。要检查分配的状态,请选择关联的分配,然后选择 View distribution(查看分配)。

分配的 Status 会在分配重新部署时更改为 InProgress。一旦新的分配配置到达 CloudFront 边缘站点,该边缘站点就会开始使用关联的函数。当分配完全部署后,Status 会更改回到 Deployed,这表明关联的 CloudFront 函数在全球所有的 CloudFront 边缘站点都已启用。这通常需要花费几分钟的时间。

您可以将函数与现有缓存行为、现有分配中的新缓存行为或新分配中的新缓存行为相关联。以下程序显示如何将函数与现有缓存行为关联。您可以使用类似于此处描述的过程将函数与新缓存行为(在现有或新分配中)关联起来。

要将函数与现有缓存行为关联 (Amazon CLI)

注意

以下示例命令使用格式化为 YAML 字符串的输入文件和输出。此功能只能用于 Amazon CLI 版本 2。有关更多信息,请参阅 Amazon Command Line Interface 用户指南中的设置 Amazon CLI 输出格式

如果您使用的是 Amazon CLI 的版本 1,则可以使用 JSON 对输入文件和输出执行类似的过程。

  1. 使用以下命令保存要将其缓存行为与函数关联的分配的分配配置。此命令将分配配置保存到名为 dist-config.yaml 的文件中。要使用此命令,请执行以下操作:

    • DistributionID 替换为分配的 ID。

    • 在一行上运行该命令。在示例中,提供换行符以使示例更具可读性。

    aws cloudfront get-distribution-config \ --id DistributionID \ --output yaml > dist-config.yaml

    命令成功后,Amazon CLI 不返回任何输出。

  2. 打开刚创建的名为 dist-config.yaml 的文件。编辑文件,进行以下更改:

    1. ETag 字段重命名为 IfMatch,但不更改字段的值。

    2. 在缓存行为中,找到名为 FunctionAssociations 的对象。更新此对象以添加函数关联。函数关联的 YAML 语法如以下示例所示。

      • 下面的示例显示查看器请求事件类型(触发器)。要使用查看器响应事件类型,请将 viewer-request 替换为 viewer-response

      • arn:aws:cloudfront::111122223333:function/ExampleFunction 替换为您将其与此缓存行为关联的函数的 Amazon Resource Name (ARN)。要获取函数 ARN,您可以使用 aws cloudfront list-functions 命令。

      FunctionAssociations: Items: - EventType: viewer-request FunctionARN: arn:aws:cloudfront::111122223333:function/ExampleFunction Quantity: 1

    进行这些更改后,保存文件。

  3. 使用以下命令更新分配,以添加函数关联。要使用此命令,请执行以下操作:

    • DistributionID 替换为分配的 ID。

    • 在一行上运行该命令。在示例中,提供换行符以使示例更具可读性。

    aws cloudfront update-distribution \ --id DistributionID \ --cli-input-yaml file://dist-config.yaml

    命令成功后,您会看到类似以下内容的输出,该输出描述了刚通过函数关联更新的分配。为了便于阅读,下面的示例输出被截断了。

    Distribution: ARN: arn:aws:cloudfront::111122223333:distribution/EBEDLT3BGRBBW ... truncated ... DistributionConfig: ... truncated ... DefaultCacheBehavior: ... truncated ... FunctionAssociations: Items: - EventType: viewer-request FunctionARN: arn:aws:cloudfront::111122223333:function/ExampleFunction Quantity: 1 ... truncated ... DomainName: d111111abcdef8.cloudfront.net Id: EDFDVBD6EXAMPLE LastModifiedTime: '2021-04-19T22:39:09.158000+00:00' Status: InProgress ETag: E2VJGGQEG1JT8S

    当您更新分配时,分配的 Status 在重新部署分配时更改为 InProgress。一旦新的分配配置到达 CloudFront 边缘站点,该边缘站点就会开始使用关联的函数。当分配完全部署后,Status 会更改回到 Deployed,这表明关联的 CloudFront 函数在全球所有的 CloudFront 边缘站点都已启用。这通常需要花费几分钟的时间。