配置 Application Load Balancer - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

配置 Application Load Balancer

启用负载均衡时,将为您的 Amazon Elastic Beanstalk 环境配备 Elastic Load Balancing 负载均衡器,以便在您的环境中的实例之间分配流量。Elastic Load Balancing 支持多种负载均衡器类型。要了解更多信息,请参阅 Elastic Load Balancing 用户指南。Elastic Beanstalk 可以为您创建负载均衡器,或者让您指定已创建的共享负载均衡器。

本主题介绍 Elastic Beanstalk 创建并专用于您的环境的 Application Load Balancer 的配置。另请参阅 配置共享 Application Load Balancer。有关配置 Elastic Beanstalk 支持的所有负载均衡器类型的信息,请参阅Elastic Beanstalk 环境的负载均衡器

注意

您只能在创建环境期间选择您的环境使用的负载均衡器类型。您可以更改设置以管理运行的环境的负载均衡器行为,但不能更改其类型。您也无法从专用负载均衡器切换到共享负载均衡器,反之亦然。

介绍

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

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

注意

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

在 Elastic Beanstalk 环境中,您可以使用 Application Load Balancer 将特定路径的流量定向到 Web 服务器实例上的其他进程。使用经典负载均衡器,到一个侦听器的所有流量都将路由到后端实例上的一个端口。使用 Application Load Balancer,您可以在侦听器上配置多个规则,以将发往特定路径的请求路由到其他后端进程。您可以使用每个进程侦听的端口配置进程。

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

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

注意

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

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

要使用 Application Load Balancer,您的环境必须在默认或自定义 VPC 中,且必须有一个具有标准权限集的服务角色。如果您有较旧的服务角色,您可能需要对其更新权限以包含 elasticloadbalancing:DescribeTargetHealthelasticloadbalancing:DescribeLoadBalancers。有关 Application Load Balancer 的更多信息,请参阅什么是 Application Load Balancer?

注意

Application Load Balancer 运行状况检查不使用 Elastic Beanstalk 运行状况检查路径。相反,它使用为每个进程单独配置的特定路径。

使用 Elastic Beanstalk 控制台配置 Application Load Balancer

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

环境创建期间,在 Elastic Beanstalk 控制台中配置 Application Load Balancer
  1. 打开 Elastic Beanstalk 控制台,然后在 Regions(区域)列表中选择您的 Amazon Web Services 区域。

  2. 在导航窗格中,选择 Environments (环境)

  3. 选择 Create a new environment (创建新环境) 以开始创建环境。

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

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

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

  6. Load balancer (负载均衡器) 配置类别中,选择 Edit (编辑)

  7. 如果尚未选择 Application Load BalancerDedicated (专用) 选项,请选择它们。

    
            Elastic Load Balancing 配置页面 - 选择负载均衡器类型
  8. 根据环境需要进行任何 Application Load Balancer 配置更改。

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

  10. 选择 Create environment(创建环境)。

在 Elastic Beanstalk 控制台中配置正在运行环境的 Application Load Balancer
  1. 打开 Elastic Beanstalk 控制台,然后在 Regions(区域)列表中选择您的 Amazon Web Services 区域。

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择 Configuration(配置)。

  4. Load balancer (负载均衡器) 配置类别中,选择 Edit (编辑)

    注意

    如果 Load balancer (负载均衡器) 配置类别没有 Edit (编辑) 按钮,则表示您的环境没有负载均衡器。要了解如何设置负载均衡器,请参阅更改环境类型

  5. 根据环境需要进行 Application Load Balancer 配置更改。

  6. 要保存更改,请选择页面底部的 Apply(应用)。

Application Load Balancer 设置

侦听器

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


          Application Load Balancer 配置 – 侦听器列表
配置现有的侦听器
  1. 选中表条目旁边的复选框,然后选择操作编辑

  2. 使用 Application Load Balancer 侦听器对话框编辑设置,然后选择保存

添加侦听器
  1. 选择 Add listener (添加侦听器)

  2. Application Load Balancer 侦听器对话框中,配置所需的设置,然后选择添加

使用 Application Load Balancer 侦听器对话框中的设置选择侦听器用于侦听流量的端口和协议,以及要将流量路由到的进程。如果您选择 HTTPS 协议,请配置 SSL 设置。


          Application Load Balancer 侦听器对话框

确保您具有有效的 SSL 证书,然后才能配置 HTTPS 侦听器。请执行下列操作之一:

  • 如果 Amazon Certificate Manager (ACM) 在您的Amazon区域中可用,请使用 ACM 创建或导入证书。有关请求 ACM 证书的更多信息,请参阅 Amazon Certificate Manager 用户指南中的请求证书。有关将第三方证书导入 ACM 中的更多信息,请参阅 Amazon Certificate Manager 用户指南中的导入证书

  • 如果 ACM 在您的 Amazon 区域中不可用,请将现有证书和密钥上传到 IAM。有关创建证书并将证书上传到 IAM 的更多信息,请参阅《IAM 用户指南》中的使用服务器证书

有关在 Elastic Beanstalk 中配置 HTTPS 和使用证书的更多详细信息,请参阅为 Elastic Beanstalk 环境配置 HTTPS

进程

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


          Application Load Balancer 配置 – 进程列表

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

Application Load Balancer 的环境进程对话框设置

定义

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


            Application Load Balancer 进程的名称、端口和协议设置

运行状况检查

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

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

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

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

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

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

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


            Application Load Balancer 进程的运行状况检查设置
注意

Elastic Load Balancing 运行状况检查不会影响环境的 Auto Scaling 组的运行状况检查行为。除非您手动配置了 Amazon EC2 Auto Scaling 进行替换,否则 Amazon EC2 Auto Scaling 不会自动替换未通过 Elastic Load Balancing 运行状况检查的实例。有关详细信息,请参阅Auto Scaling 运行状况检查设置

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

会话

选中或清除粘性策略已启用框来启用或禁用粘性会话。使用 Cookie 持续时间配置粘性会话的持续时间,最多为 604800 秒。


            Application Load Balancer 进程的会话粘性设置

规则

可以使用该列表为负载均衡器指定自定义侦听器规则。规则将侦听器在特定路径模式上接收的请求映射到目标进程。每个侦听器可以具有多个规则,以将不同路径上的请求路由到实例上的不同进程。

规则具有数字优先级,它确定将规则应用于传入请求的优先顺序。对于您添加的每个新侦听器,Elastic Beanstalk 添加一个默认规则,它将侦听器的所有流量路由到默认进程。默认规则的优先顺序最低;如果同一侦听器没有与传入请求匹配的任何其他规则,则应用该规则。起初在您还未添加自定义规则时,该列表是空的。不会显示所有侦听器的默认规则。


          Application Load Balancer 配置 – 规则列表

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

  • Name (名称) – 规则的名称。

  • Listener port (侦听器端口) – 规则应用到的侦听器端口。

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

  • Match conditions (匹配条件) – 规则应用到的请求 URL 条件的列表。有两种类型的条件:HostHeader(URL 的域部分)和 PathPattern(URL 的路径部分)。您最多可以添加五个条件。每个条件值的长度最多为 128 个字符,并且可以包含通配符。

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

在编辑任何现有规则时,您无法更改其名称侦听器端口


          Application Load Balancer 配置 – 规则列表

访问日志捕获

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

注意

如果您为访问日志捕获配置的 Amazon S3 存储桶不是 Elastic Beanstalk 为您的账户创建的存储桶,请务必向您的 Amazon Identity and Access Management (IAM) 用户添加具有适当权限的用户策略。Elastic Beanstalk 提供的托管用户策略仅涵盖对 Elastic Beanstalk 托管资源的权限。

有关访问日志的详细信息,包括权限和其他要求,请参阅 Application Load Balancer 的访问日志


          Application Load Balancer 配置 – 访问日志

示例:具有安全侦听器和两个进程的 Application Load Balancer

在该示例中,您的应用程序需要端到端流量加密以及单独的进程以处理管理请求。

为了配置您的环境的 Application Load Balancer 以满足这些要求,您删除默认侦听器,添加一个 HTTPS 侦听器,指示默认进程侦听端口 443 的 HTTPS,并为不同路径上的管理流量添加一个进程和侦听器规则。

为该示例配置负载均衡器
  1. 添加安全侦听器。对于端口,输入 443。对于协议,选择 HTTPS。对于 SSL 证书,选择 SSL 证书的 ARN。例如,arn:aws:iam::123456789012:server-certificate/abc/certs/buildarn:aws:acm:us-east-2:123456789012:certificate/12345678-12ab-34cd-56ef-12345678

    对于默认进程,保持选中 default

    
            Application Load Balancer 配置 – 添加安全侦听器

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

    
            Application Load Balancer 配置示例 – 具有两个侦听器的侦听器列表
  2. 禁用默认端口 80 HTTP 侦听器。对于默认侦听器,关闭已启用选项。

    
            Application Load Balancer 配置示例 – 禁用默认侦听器
  3. 将默认进程配置为 HTTPS。选择默认进程,然后为操作选择编辑。对于端口,输入 443。对于协议,选择 HTTPS

    
            Application Load Balancer 配置示例 – 将默认进程配置为使用 HTTPS
  4. 添加一个管理进程。对于名称,键入 admin。对于端口,输入 443。对于协议,选择 HTTPS。在运行状况检查下,为路径输入 /admin

    
            Application Load Balancer 配置示例 – 添加管理进程
  5. 为管理流量添加一个规则。对于名称,键入 admin。对于 Listener port (侦听器端口),键入 443。对于匹配条件,添加带有 /admin/* 值的 PathPattern。对于进程,选择 admin

    
            Application Load Balancer 配置示例 – 添加管理规则

使用 EB CLI 配置 Application Load Balancer

当您运行 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 2):

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

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

Application Load Balancer 命名空间

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

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

    无法在配置文件 (.Ebextensions) 中设置此选项。

  • aws:elbv2:loadbalancer – 将访问日志和应用于 Application Load Balancer 的其他设置作为一个整体配置。

  • aws:elbv2:listener – 在 Application Load Balancer 上配置侦听器。这些设置将映射到经典负载均衡器的 aws:elb:listener 中的设置。

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

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

例 .ebextensions/alb-access-logs.config

以下配置文件为带有 Application Load Balancer 的环境启用访问日志上传:

option_settings: aws:elbv2:loadbalancer: AccessLogsS3Bucket: DOC-EXAMPLE-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:acm:us-east-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:acm:us-east-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