我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
引入多功能打包器,允许在 Amazon CloudFront 上触发每个事件的多个函数
在这篇文章中,你将了解处理离散 Edge 函数的组装和执行的 “多功能打包器” 框架。
随着业务需求随着时间的推移而增长,您可能需要在请求/响应流中执行多项操作。例如,您想要标准化请求属性以提高缓存性能,执行 A/B 测试,重写或重定向 URL,或者智能地切换请求的来源。下图显示了一些常见用例及其最合适的事件触发器。
图 1 CloudFront 事件触发器和常见用例
每个用例本身都是一个不同的操作,您可以将它们作为 CloudFront 函数或 Lambda @Edge 函数来实现。但是,要在同一个事件触发器中应用这些操作,您需要将代码及其依赖关系复制到单个 monolith 函数中,然后将其与事件触发器相关联。对于 Lambda @Edge 函数,除了复制代码工件外,您还需要组合每个函数的
此外,这些操作之间在执行顺序方面可能存在依赖关系,因为下游组件可能期望由上游操作设置的某些属性。例如,你想在后续模块检查预定义的重定向列表中是否有匹配项之前对 URL 进行标准化。
以下是多个操作的示例:传入请求 → 标准化 → 检查重定向 → 重写 URI → CloudFront 缓存。
与这些离散用例相关的代码可以很好地组织成某种形式的库,但仍需要进行工程和重构工作才能对它们进行组合、测试和维护。
在这篇文章中,你将使用 “多功能打包器” 框架探索这样一种方法,该框架可以按原样处理离散的 Edge 函数逻辑的组装和执行,并返回所需的输出。
组装后的函数可以与所需的 CloudFront 事件触发器相关联,就像关联任何其他 Lambda @Edge 或 CloudFront 函数一样。这将使您可以混合和匹配现有的功能实现,重复使用代码,同时随着单个功能逻辑随着时间的推移而发展,实现更好的可维护性。
先决条件
这篇文章需要满足以下先决条件:
1。如今,该框架仅支持 Lambda @Edge 函数的 Node.js 运行时和用于 CloudFront 函数的 JavaScript。
2。你必须在 亚马逊云科技 账户中定义 Lambda @Edge 和 CloudFront 函数。
在本文的其余部分中,您将介绍该框架的部署和使用。
部署
1。在 亚马逊云科技 北弗吉尼亚区域(美国东部 1)克隆并部署 CDK 解决方案。来自终端
git clone https://github.com/aws-samples/amazon-cloudfront-multi-function-packager.git
cd amazon-cloudfront-multi-function-package
npm audit fix
cdk bootstrap
cdk deploy
2。该堆栈创建了一个
- {stackName}-LambdaFunctionPackager {uniqueID}:主要的 Lambda 多功能打包器
- {stackName}-lambdaFunctionAssembly {uniqueID} :组装 Lambda @Edge 函数 的辅助函数
- {stackName}-CloudfrontFunctionAssembly {uniqueID} :组装 CloudFront
图 2 多功能打包器辅助函数
链接 Lambda @Edge 函数的程序
1。
2. 我们将使用 亚马逊云科技 的 “ 测试 ” 功能 Lambda 服务来构建我们的组合函数工件。切换到 “ 测试 ” 选项卡到 “ 创建新事件 ”,然后为其命名。
图 3 链接 Lambda @Edge 函数的程序
对于 “Event JSON”,请使用以下 JSON 结构将 Lambda @Edge 函数与其 ARN 组合在一起。
{
"viewer-request":[
{
"function_arn":"Lambda Function ARN1:Version1"
},
{
"function_arn":"Lambda Function ARN2:Version2"
}
]
}
以下是组合 Lambda @Edge 函数并将其附加到多个事件触发器的示例。
{
"origin-request":[
{
"function_arn":"arn:aws:lambda:us-east-1:123456789012:function:RedirectionFunction:1"
},
{
"function_arn":"arn:aws:lambda:us-east-1:123456789012:function:ABTestingCookieFunction:1"
},
{
"function_arn":"arn:aws:lambda:us-east-1:123456789012:function:DeviceDetectionFunction:1"
}
],
"origin-response":[
{
"function_arn":"arn:aws:lambda:us-east-1:123456789012:function:CacheControlFunction:$LATEST"
},
{
"function_arn":"arn:aws:lambda:us-east-1:123456789012:function:HSTSInsertionFunction:2"
}
]
}
请注意,您应该更改 Lambda 函数 ARN 以匹配您的环境。
3。JSON 结构定义了三个 Lambda @Edge 函数 ARN,它们将(按指定顺序)合并为一个新的 Lambda 函数并关联到 “原始请求” 触发器。新的组合函数还将有两个 Lambda @Edge 函数,它们将在 “Origin Response” 事件触发器上调用。当同一个函数必须对多个事件触发器进行操作时,将多个事件触发器组合起来可能很有用。此外,它还有助于减少冷启动和跨事件类型的 Lambda 容器的重复使用。
Lambda 函数 ARN 可能指向特定的 Lambda 版本或 $LATEST,并且每个函数可能有不同的入口点处理程序。该框架将从相关的函数元数据中推断出所有这些信息。
4。
保存 对事件的更改
,然后 在 Lambda 控制台中选择
测试
以生成组合函数和 IAM 角色。有关详细说明
您可以为每个事件触发器生成组合封装函数,也可以组合多个触发器。多功能打包器框架与事件触发器无关,仅调用与当前触发的事件类型相关的函数。
5。发布版本并关联到您的 CloudFront 发行版的行为。
6。然后测试它是否有效。
链接 CloudFront 函数的程序
1。
要组合 CloudFront 函数,请导航到位于美国东部 1 亚马逊云科技 区域的 亚马逊云科技 Lambda 控制台 上的
{stackN
2。切换到 “测试” 选项卡以创建测试事件。
图 4 链接 CloudFront 函数的过程
使用以下 JSON 结构定义 “新事件”,使用函数名称及其部署阶段将 CloudFront 函数组合在一起。
{
"viewer-request": [
{
"function_name": "Function Name",
"stage": "DEVELOPMENT || LIVE"
},
{
"function_name": "CanaryFunction",
"stage": "DEVELOPMENT || LIVE"
},
{
"function_name":"AddIndexHtml",
"stage":"DEVELOPMENT || LIVE"
}
]
}
以下是组合 CloudFront 函数并将其附加到单个事件触发器的示例。
{
"viewer-request": [
{
"function_name": "TrueClientIP",
"stage": "DEVELOPMENT"
},
{
"function_name": "CanaryFunction",
"stage": "LIVE"
},
{
"function_name":"AddIndexHtml",
"stage":"DEVELOPMENT"
}
]
}
请注意,您应该更改 function_name 和阶段以匹配您的环境。
保存 对事件的更改 。
3。在 CloudFront 函数控制台 中选择 “ 测试 ” 以生成新的组合式 CloudFront 函数。
4。在
5。测试它是否有效。
尽管此框架经过调整,可将边缘功能与 CloudFront 作为事件源相结合,但可以通过相应地修改事件结构的处理方式将其扩展为支持其他 亚马逊云科技 服务。
结论
总而言之,您学习了如何使用 “多功能打包器” 框架来组合多个
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。