将函数与分配关联
要将 CloudFront Functions 中的函数与分配结合使用,请将该函数与分配中的一个或多个缓存行为关联。您可以将函数与多个分配中的多个缓存行为相关联。
将函数与缓存行为关联时,必须选择事件类型。事件类型决定 CloudFront Functions 何时运行函数。您可以从以下事件类型中选择:
-
查看器请求 – 当 CloudFront 收到来自查看器的请求时,该函数将运行。
-
查看器请求 – 该函数在 CloudFront 向查看器返回响应之前运行。
您不能将面向源的事件类型(源请求和源响应)与 CloudFront Functions 结合使用。此时应该使用 Lambda@Edge。有关更多信息,请参阅 可以触发 Lambda@Edge 函数的 CloudFront 事件。
注意
在关联函数之前,必须将其发布到 LIVE
阶段。
您可以在 CloudFront 控制台中或使用 AWS Command Line Interface(AWS CLI)将函数与分配相关联。
- Console
-
您可以使用 CloudFront 控制台将函数与现有 CloudFront 分配中的现有缓存行为相关联。有关创建分配的更多信息,请参阅创建分配。
将函数与现有缓存行为关联
-
通过 https://console.aws.amazon.com/cloudfront/v4/home#/functions
登录到 CloudFront 控制台,然后选择函数页面。 -
选择要关联的函数。
-
在函数页面上,选择发布选项卡。
-
选择发布函数。
-
选择添加关联。在出现的对话框中,选择分配、事件类型和/或缓存行为。
对于事件类型,请选择您希望此函数在何时运行:
-
查看器请求 – 在 CloudFront 每次收到请求时运行函数。
-
查看器响应 – 在 CloudFront 每次返回响应时运行函数。
-
-
要保存配置,请选择添加关联。
CloudFront 将分配与函数关联。等待几分钟,以便相关的分配完成部署。您可以在函数详细信息页面上选择查看分配来查看进度。
-
- CLI
-
您可以将函数与以下任意一项相关联:
-
现有缓存行为
-
现有分配中的新缓存行为
-
新分配中的新缓存行为
以下程序演示如何将函数与现有缓存行为关联。
将函数与现有缓存行为关联
-
打开一个命令行窗口。
-
输入以下命令,以针对您要将其缓存行为与函数相关联的分配,保存分配的配置。此命令将分配配置保存到名为
dist-config.yaml
的文件中。要使用此命令,请执行以下操作:-
将
替换为分配的 ID。DistributionID
-
在一行上运行该命令。在示例中,提供换行符以使示例更具可读性。
aws cloudfront get-distribution-config \ --id
DistributionID
\ --output yaml > dist-config.yaml命令成功后,AWS CLI 不返回任何输出。
-
-
打开您创建的名为
dist-config.yaml
的文件。编辑该文件以进行以下更改。-
将
ETag
字段重命名为IfMatch
,但不更改字段的值。 -
在缓存行为中,找到名为
FunctionAssociations
的对象。更新此对象以添加函数关联。函数关联的 YAML 语法如以下示例所示。-
下面的示例显示查看器请求事件类型(触发器)。要使用查看器响应事件类型,请将
viewer-request
替换为viewer-response
。 -
将
替换为您将其与此缓存行为关联的函数的 Amazon 资源名称 (ARN)。要获取函数 ARN,您可以使用 aws cloudfront list-functions 命令。arn:aws:cloudfront::111122223333:function/ExampleFunction
FunctionAssociations: Items: - EventType: viewer-request FunctionARN: arn:aws:cloudfront::111122223333:function/ExampleFunction Quantity: 1
-
-
进行这些更改后,保存文件。
-
-
使用以下命令更新分配,以添加函数关联。要使用此命令,请执行以下操作:
-
将
替换为分配的 ID。DistributionID
-
在一行上运行该命令。在示例中,提供换行符以使示例更具可读性。
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 边缘站点都已启用。这通常需要花费几分钟的时间。