AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

配置应用程序负载均衡器

启用负载均衡时,将为您的 AWS Elastic Beanstalk 环境配备 Elastic Load Balancing 负载均衡器,以便在您的环境中的实例之间分配流量。Elastic Load Balancing支持几种负载均衡器类型。要了解这些负载均衡器类型,请参阅 Elastic Load Balancing 用户指南

本主题介绍了如何配置应用程序负载均衡器。有关配置 Elastic Beanstalk 支持的所有负载均衡器类型的信息,请参阅适用于您的 AWS Elastic Beanstalk 环境的负载均衡器

注意

您只能在创建环境期间选择您的环境使用的负载均衡器类型。您可以更改设置以管理运行的环境的负载均衡器行为,但不能更改其类型。

介绍

应用程序负载均衡器检查应用程序网络协议层中的流量以确定请求的路径,以便将不同路径的请求传送到不同的目标。

默认情况下,应用程序负载均衡器与传统负载均衡器执行相同的功能。默认监听器接收端口 80 上的 HTTP 请求并将它们分配到环境中的实例。您可以使用证书在端口 443 上添加一个安全的监听器,以解密 HTTPS 流量、配置运行状况检查行为和将访问日志从负载均衡器推送到 Amazon Simple Storage Service (Amazon S3) 存储桶。

注意

与传统负载均衡器或网络负载均衡器不同,应用程序负载均衡器不能具有传输层 (第 4 层) TCP 或 SSL/TLS 侦听器。它仅支持 HTTP 和 HTTPS 侦听器。此外,它不能使用后端身份验证对负载均衡器和后端实例之间的 HTTPS 连接进行身份验证。

在 Elastic Beanstalk 环境中,您可以使用应用程序负载均衡器将特定路径的流量传送到您的 Web 服务器实例上的不同端口。使用传统负载均衡器,到一个侦听器的所有流量都将路由到后端实例上的一个端口。使用应用程序负载均衡器,您可以对侦听器配置多个规则,以将发往特定路径的请求路由到不同的后端端口。

例如,您可能运行与主应用程序分开的登录进程。您的环境的实例上的主应用程序接受大部分请求并侦听端口 80,而您的登录进程侦听端口 5000 并接受发送到 /login 路径的请求。来自客户端的所有传入请求都是在端口 80 上传送的。通过使用应用程序负载均衡器,您可以为端口 80 上的传入流量配置单个侦听器,并使用两个规则将流量路由到两个单独的进程,具体取决于请求中的路径。一个规则将到 /login 的流量路由到侦听端口 5000 的登录进程。默认规则将所有其他流量路由到侦听端口 80 的主应用程序进程。

应用程序负载均衡器规则将请求映射到目标组。在 Elastic Beanstalk 中,目标组是由进程 表示的。您可以为进程配置协议、端口和运行状况检查设置。过程代表在环境中的实例上运行的过程。默认过程是在您的应用程序前面运行的反向代理 (nginx 或 Apache) 的端口 80 上的一个监听器。

注意

在 Elastic Beanstalk 外部,一个目标组将映射到一组实例。一个侦听器可使用多个规则和多个目标组来基于路径将流量路由到不同的实例。在 Elastic Beanstalk 内部,您的环境中的所有实例均相同,因此会对在不同端口上监听的过程进行区分。

传统负载均衡器将单个运行状况检查路径用于整个环境。使用应用程序负载均衡器,每个进程都有一个由负载均衡器和 Elastic Beanstalk 增强型运行状况监控来监控的单独运行状况检查路径。

要使用应用程序负载均衡器,您的环境必须在默认或自定义 VPC 中,且必须有一个具有标准权限集的服务角色。如果您有较旧的服务角色,您可能需要对其更新权限以包括 elasticloadbalancing:DescribeTargetHealthelasticloadbalancing:DescribeLoadBalancers。有关Application Load Balancer的更多信息,请参阅 Application Load Balancer 用户指南

注意

应用程序负载均衡器运行状况检查不考虑 Elastic Beanstalk 运行状况检查路径。相反,它使用为每个进程单独配置的特定路径。

使用 Elastic Beanstalk 控制台配置应用程序负载均衡器

在创建环境期间或以后运行您的环境时,您可以使用 Elastic Beanstalk 控制台配置应用程序负载均衡器的侦听器、进程和规则。

在创建环境期间在 Elastic Beanstalk 控制台中配置应用程序负载均衡器

  1. 使用新建环境向导开始创建您的环境。

  2. 在向导的主页上,在选择创建环境之前,选择配置更多选项

  3. 选择高可用性配置预设。

    或者,在容量配置卡上配置负载均衡环境类型。有关详细信息,请参阅 容量

  4. 负载均衡器配置卡上,选择修改

  5. 选择应用程序负载均衡器选项 (如果尚未选择)。

     Elastic Load Balancing配置页面 - 选择负载均衡器类型
  6. 进行您的环境所需的任何应用程序负载均衡器配置更改。

  7. 选择保存,然后进行您的环境所需的任何其他配置更改。

  8. 选择 Create environment

在 Elastic Beanstalk 控制台中配置正在运行的环境的应用程序负载均衡器

  1. 打开 Elastic Beanstalk 控制台

  2. 导航到您的环境的管理页

  3. 选择 Configuration

  4. 负载均衡器配置卡上,选择修改

    注意

    如果负载均衡器配置卡没有修改按钮,则表示您的环境没有负载均衡器。要了解如何设置负载均衡器,请参阅更改环境类型

  5. 进行您的环境所需的应用程序负载均衡器配置更改。

  6. 选择 Apply

Listeners

可以使用该列表为您的负载均衡器指定侦听器。每个侦听器使用指定协议将在指定端口上传入的客户端流量路由到实例上的一个或多个进程。最初,该列表显示默认侦听器,它将端口 80 上的传入 HTTP 流量路由到名为 default 的进程,该进程侦听 HTTP 端口 80。

 应用程序负载均衡器配置 - 侦听器列表

配置现有的侦听器

  1. 选中表条目旁边的复选框,然后选择操作编辑

  2. 如果您选择编辑,请使用应用程序负载均衡器侦听器对话框编辑设置,然后选择保存

添加侦听器

  1. 选择添加侦听器

  2. 应用程序负载均衡器侦听器对话框中,配置所需的设置,然后选择添加

使用应用程序负载均衡器侦听器对话框设置选择侦听器在其中侦听流量的端口和协议。如果您选择 HTTPS 协议,请配置 SSL 设置。

在配置 HTTPS 侦听器之前,请确保您具有有效的 SSL 证书。使用 AWS Certificate Manager (ACM) 创建新的证书,或者将证书和密钥上传到 AWS Identity and Access Management (IAM)。有关请求 ACM 证书的更多信息,请参阅 AWS Certificate Manager 用户指南 中的请求证书。有关将第三方证书导入 ACM 中的更多信息,请参阅 AWS Certificate Manager 用户指南 中的导入证书。如果 ACM 在您的 AWS 区域中不可用,请将现有证书和密钥上传到 IAM。

有关创建证书并将证书上传到 IAM 的更多信息,请参阅 IAM 用户指南 中的使用服务器证书。有关在 Elastic Beanstalk 中配置 HTTPS 和使用证书的更多详细信息,请参阅为 Elastic Beanstalk 环境配置 HTTPS

进程

可以使用该列表为您的负载均衡器指定进程。进程是侦听器将流量路由到的目标。每个侦听器使用指定协议将在指定端口上传入的客户端流量路由到实例上的一个或多个进程。最初,该列表显示默认进程,它侦听端口 80 上的传入 HTTP 流量。

 应用程序负载均衡器配置 - 进程列表

您可以编辑现有进程的设置或添加新的进程。要在列表中开始编辑或添加进程,请使用为侦听器列表列出的相同步骤。将打开环境进程对话框。

应用程序负载均衡器的环境进程对话框设置

定义

可以使用以下设置定义进程:其名称以及它在其中侦听请求的端口协议

 应用程序负载均衡器进程的名称、端口和协议设置

运行状况检查

可以使用以下设置配置进程运行状况检查:

  • HTTP 代码 – 指定正常运行的进程的 HTTP 状态代码。

  • 路径 – 进程的运行状况检查请求路径。

  • 超时 – 等待运行状况检查响应的时间 (秒)。

  • 间隔 – 单个实例的两次运行状况检查间隔的时间 (秒)。间隔必须大于超时。

  • 不正常阈值正常阈值 – 在Elastic Load Balancing更改实例的运行状况之前,实例必须通过或未通过的运行状况检查次数。

  • 取消注册延迟 – 在取消注册实例之前等待活动请求完成的时间 (秒)。

 应用程序负载均衡器进程的运行状况检查设置

注意

Elastic Load Balancing运行状况检查不会影响环境的 Auto Scaling 组的运行状况检查行为。未通过 Elastic Load Balancing 运行状况检查的实例不会自动由 Amazon EC2 Auto Scaling 替换,除非您手动配置 Amazon EC2 Auto Scaling 执行此操作。有关更多信息,请参阅 Auto Scaling 运行状况检查设置

有关运行状况检查以及其对环境的总体运行状况的影响的更多信息,请参阅基本运行状况报告

会话

可以使用这些设置启用或禁用粘性会话 (粘性策略已启用),以及配置粘性会话的持续时间 (Cookie 持续时间),最多为 604800 秒。

 应用程序负载均衡器进程的会话粘性设置

规则

可以使用该列表为您的负载均衡器指定侦听器规则。规则将侦听器在特定路径模式上接收的请求映射到目标进程。每个侦听器可以具有多个规则,以将不同路径上的请求路由到实例上的不同进程。规则具有数字优先级,它确定将规则应用于传入请求的优先顺序。对于您添加的每个新侦听器,Elastic Beanstalk 添加一个默认规则,它将侦听器的所有流量路由到默认进程。默认规则的优先顺序最低;如果同一侦听器没有与传入请求匹配的任何其他规则,则应用该规则。最初,该列表显示默认 HTTP 端口 80 侦听器的默认规则。

 应用程序负载均衡器配置 - 规则列表

您可以编辑现有规则的设置或添加新的规则。要在列表中开始编辑或添加规则,请使用为侦听器列表列出的相同步骤。将打开侦听器规则对话框并包含以下设置:

  • 名称 – 规则的名称。

  • 侦听器端口 – 规则应用到的侦听器端口。

  • 优先级 – 规则的优先级。优先级序号越小,优先顺序越靠前。侦听器的规则优先级必须是唯一的。

  • 路径模式 – 该模式定义规则应用到的请求路径。

  • 进程 – 负载均衡器将与规则匹配的请求路由到的进程。

在编辑任何现有规则时,您无法更改其名称侦听器端口。在编辑默认规则时,进程是唯一可以更改的设置。

 应用程序负载均衡器配置 - 规则列表

访问日志捕获

使用这些设置可将 Elastic Load Balancing 配置为捕获包含有关发送到应用程序负载均衡器的请求的详细信息的日志。默认情况下,已禁用访问日志捕获。在启用时(Store logs (存储日志)),Elastic Load Balancing 将日志存储在您配置的 Amazon S3 存储桶(S3 bucket (S3 存储桶))中。Prefix (前缀) 设置为日志指定存储桶中的顶级文件夹。Elastic Load Balancing 将日志放置在名为 AWSLogs 的文件夹中的前缀下方。如果您不指定前缀,则 Elastic Load Balancing 会将其文件夹置于存储桶的根级。

 应用程序负载均衡器 配置 - 访问日志

示例:具有安全侦听器和两个进程的应用程序负载均衡器

在该示例中,您的应用程序需要端到端流量加密以及单独的进程以处理管理请求。为了配置您的环境的应用程序负载均衡器以满足这些要求,您删除默认侦听器,添加一个 HTTPS 侦听器,指示默认进程侦听 HTTPS 端口 443,并为不同路径上的管理流量添加一个进程和规则。

为该示例配置负载均衡器

  1. 删除默认端口 80 HTTP 侦听器。选择默认侦听器,然后为操作选择标记为“已删除”

     应用程序负载均衡器配置 - 删除默认侦听器
  2. 添加安全侦听器。对于 Port,键入 443。对于 Protocol,选择 HTTPS。对于 SSL 证书,请选择 SSL 证书的 ARN。例如,arn:aws-cn:iam::123456789012:server-certificate/abc/certs/buildarn:aws-cn:acm:us-west-2:123456789012:certificate/12345678-12ab-34cd-56ef-12345678

     应用程序负载均衡器配置 - 添加安全侦听器

    您现在可以查看列表上的其他侦听器。

     应用程序负载均衡器配置 - 具有两个侦听器的侦听器列表
  3. 将默认进程配置为 HTTPS。选择默认进程,然后为操作选择编辑。对于 Port,键入 443。对于 Protocol,选择 HTTPS

     应用程序负载均衡器配置 - 将默认进程配置为 HTTPS
  4. 添加一个管理进程。对于 Name,键入 admin。对于 Port,键入 443。对于 Protocol,选择 HTTPS。在运行状况检查下面,为路径键入 /admin

     应用程序负载均衡器配置 - 添加管理进程
  5. 为管理流量添加一个规则。对于 Name,键入 admin。对于侦听器端口,请键入 443。对于路径模式,请键入 /admin/*。对于进程,请选择 admin

     应用程序负载均衡器配置 - 添加管理规则

使用 EB CLI 配置应用程序负载均衡器

当您运行 eb create 时,EB CLI 会提示您选择负载均衡器类型。

$ eb create Enter Environment Name (default is my-app): test-env Enter DNS CNAME prefix (default is my-app): test-env-DLW24ED23SF Select a load balancer type 1) classic 2) application 3) network (default is 1): 2

您也可以使用 --elb-type 选项指定负载均衡器类型。

$ eb create test-env --elb-type application

应用程序负载均衡器命名空间

可以在以下命名空间中找到与Application Load Balancer相关的设置:

  • aws:elasticbeanstalk:environment – 选择用于环境的负载均衡器类型。应用程序负载均衡器的值为 application

  • aws:elbv2:loadbalancer – 将访问日志和应用于应用程序负载均衡器的其他设置作为一个整体配置。

  • aws:elbv2:listener – 在应用程序负载均衡器上配置侦听器。这些设置将映射到Classic Load Balancer的 aws:elb:listener 中的设置。

  • aws:elbv2:listenerrule – 配置根据请求路径将流量路由到不同过程的规则。规则对Application Load Balancer是唯一的。

  • aws:elasticbeanstalk:environment:process – 配置运行状况检查并为在您的环境的实例上运行的过程指定端口和协议。端口和协议设置将映射到传统负载均衡器上侦听器的 aws:elb:listener 中的实例端口和实例协议设置。运行状况检查设置将映射到 aws:elb:healthcheckaws:elasticbeanstalk:application 命名空间中的设置。

.ebextensions/application-load-balancer.config

要开始使用应用程序负载均衡器,请使用配置文件将负载均衡器类型设置为 application

option_settings: aws:elasticbeanstalk:environment: LoadBalancerType: application

注意

您只能在环境创建期间设置负载均衡器类型。

例 .ebextensions/alb-access-logs.config

以下配置文件为带有应用程序负载均衡器的环境启用访问日志上传。

option_settings: aws:elbv2:loadbalancer: AccessLogsS3Bucket: my-bucket AccessLogsS3Enabled: 'true' AccessLogsS3Prefix: beanstalk-alb

.ebextensions/alb-default-process.config

以下配置文件将修改默认进程的运行状况检查设置和粘性设置。

option_settings: aws:elasticbeanstalk:environment:process:default: DeregistrationDelay: '20' HealthCheckInterval: '15' HealthCheckPath: / HealthCheckTimeout: '5' HealthyThresholdCount: '3' UnhealthyThresholdCount: '5' Port: '80' Protocol: HTTP StickinessEnabled: 'true' StickinessLBCookieDuration: '43200'

例 .ebextensions/alb-secure-listener.config

以下配置文件将在端口 443 上添加一个安全侦听器和匹配进程。

option_settings: aws:elbv2:listener:443: DefaultProcess: https ListenerEnabled: 'true' Protocol: HTTPS SSLCertificateArns: arn:aws-cn:acm:us-west-2:123456789012:certificate/21324896-0fa4-412b-bf6f-f362d6eb6dd7 aws:elasticbeanstalk:environment:process:https: Port: '443' Protocol: HTTPS

例 .ebextensions/alb-admin-rule.config

以下配置文件将添加一个安全侦听器,该侦听器具有一个规则,它使用请求路径 /admin 将流量路由到名为 admin 的在端口 4443 上进行侦听的进程。

option_settings: aws:elbv2:listener:443: DefaultProcess: https ListenerEnabled: 'true' Protocol: HTTPS Rules: admin SSLCertificateArns: arn:aws-cn:acm:us-west-2:123456789012:certificate/21324896-0fa4-412b-bf6f-f362d6eb6dd7 aws:elasticbeanstalk:environment:process:https: Port: '443' Protocol: HTTPS aws:elasticbeanstalk:environment:process:admin: HealthCheckPath: /admin Port: '4443' Protocol: HTTPS aws:elbv2:listenerrule:admin: PathPatterns: /admin/* Priority: 1 Process: admin