在 AWS 上从 F5 迁移到应用程序负载均衡器时修改 HTTP 标头 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 AWS 上从 F5 迁移到应用程序负载均衡器时修改 HTTP 标头

由 Sachin Trivedi (AWS)创建

环境:PoC 或试点

来源:本地

目标:Amazon Web Services Cloud

R 类型:更换平台

工作负载:所有其他工作负载

技术:网络;混合云;迁移

AWS 服务:亚马逊 CloudFront;Elastic Load Balancing (ELB);AWS Lambda

总结

当您将使用 F5 负载均衡器的应用程序迁移到 Amazon Web Services (AWS)并希望在 AWS 上使用应用程序负载均衡器时,迁移用于标头修改的 F5 规则是一个常见问题。Application Load Balancer 不支持修改标头,但你可以使用亚马逊 CloudFront 作为内容分发网络 (CDN),使用 Lambda @Edge 来修改标头。

此模式描述了所需的集成,并提供了使用 AWS CloudFront 和 Lambda @Edge 修改标头的示例代码。

先决条件和限制

先决条件

  • 使用 F5 负载均衡器的本地应用程序,其配置使用 if, else替换 HTTP 标头值。有关此配置的详细信息,请参阅 F5 产品文档中的 HTTP::header。 

限制

  • 此模式适用于 F5 负载均衡器标头自定义。对于其他第三方负载均衡器,请查看负载均衡器文档以获取支持信息。

  • 用于 Lambda@Edge 的 Lambda 函数必须位于美国东部(弗吉尼亚州北部)区域。

架构

下图显示了 AWS 上的架构,包括 CDN 与其他 AWS 组件之间的集成流程。

使用亚马逊 CloudFront 和 Lambda 修改标题的架构 @Edge

工具

Amazon Web Services

  • 应用程序负载均衡器 - 应用程序负载均衡器是一项 AWS 完全托管的负载均衡服务,在开放系统互连(OSI)模型的第七层运行。它可以在多个目标之间平衡流量,并支持基于 HTTP 标头和方法、查询字符串以及基于主机或基于路径的路由的高级路由请求。

  • 亚马逊 CloudFront — Amazon CloudFront 是一项网络服务,可加快向用户分发静态和动态网页内容(例如.html、.css、.js 和图像文件)的速度。 CloudFront 通过名为边缘位置的全球数据中心网络提供内容,以降低延迟并提高性能。

  • Lambda @Edge ─ Lambda @Edge 是 AWS Lambda 的扩展,它允许你运行函数来自定义所交付的内容。 CloudFront 您可以在美国东部(弗吉尼亚北部)区域创作函数,然后将该函数与 CloudFront 发行版相关联,以便在不预配置或管理服务器的情况下自动在全球范围内复制您的代码。如此便可减少延迟并改善用户体验。

代码

以下示例代码提供了修改 CloudFront 响应标头的蓝图。按照操作说明部分中的说明部署代码。

exports.handler = async (event, context) => {     const response = event.Records[0].cf.response;     const headers = response.headers;     const headerNameSrc = 'content-security-policy';     const headerNameValue = '*.xyz.com';     if (headers[headerNameSrc.toLowerCase()]) {         headers[headerNameSrc.toLowerCase()] = [{             key: headerNameSrc,             value: headerNameValue,         }];         console.log(`Response header "${headerNameSrc}" was set to ` +                     `"${headers[headerNameSrc.toLowerCase()][0].value}"`);     }     else {             headers[headerNameSrc.toLowerCase()] = [{             key: headerNameSrc,             value: headerNameValue,             }];     }     return response; };

操作说明

任务描述所需技能
创建 CloudFront Web 分发。

在此步骤中,您将创建一个 CloudFront 分发,以告知您要从 CloudFront 哪里交付内容,以及有关如何跟踪和管理内容交付的详细信息。

要使用控制台创建分配,请登录 AWS 管理控制台,打开CloudFront 控制台,然后按照CloudFront 文档中的步骤操作。

云管理员
任务描述所需技能
创建并部署 Lambda@Edge 函数。

您可以使用修改 CloudFront 响应标头的蓝图来创建 Lambda @Edge 函数。(其他蓝图可用于不同的用例;有关更多信息,请参阅文档中的 CloudFront Lambda @Edge 示例函数。) 

若要创建 Lambda@Edge 函数:

  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 AWS Lambda 控制台:https://console.aws.amazon.com/lambda/

  2. 请确保您位于美国东部(弗吉尼亚北部)地区。 CloudFront 蓝图仅在该地区可用。

  3. 选择创建函数

  4. 选择使用蓝图,然后在蓝图搜索字段中输入 cloudfront。 

  5. 选择cloudfront-modify-response-header蓝图,然后选择配置

  6. 基本信息页面上,输入以下信息:

    1. 输入函数名称。

    2. 对于执行角色,请选择从 AWS 策略模板创建新角色

    3. 将一个 AWS 身份验证与访问管理(IAM)角色与该选项相关联。

  7. 选择创建函数

  8. 在页面的设计器部分中,选择您的函数名称。

  9. 函数代码部分中,将模板代码替换为之前在代码部分中此模式中提供的示例代码。

  10. 在示例代码中,将 xyz.com替换为您的域名。 

  11. 选择保存

AWS 管理员
部署 Lambda@Edge 函数。

按照亚马逊 CloudFront 文档中教程:创建简单的 Lambda @Edge 函数第 4 步中的说明配置 CloudFront 触发器并部署该函数。

AWS 管理员

相关资源

CloudFront 文档