

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

# 配置共享 Application Load Balancer
<a name="environments-cfg-alb-shared"></a>

[启用负载平衡](using-features-managing-env-types.md#using-features.managing.changetype)后，您的 Amazon Elastic Beanstalk 环境将配备 Elastic Load Balancing 负载均衡器，用于在环境中的实例之间分配流量。Elastic Load Balancing 支持多种负载均衡器类型。要了解更多信息，请参阅 [Elastic Load Balancing 用户指南](https://docs.amazonaws.cn/elasticloadbalancing/latest/userguide/)。Elastic Beanstalk 可以为您创建负载均衡器，或让您指定您已创建的共享负载均衡器。

本主题介绍您创建的并与环境关联的共享 [Application Load Balancer](https://docs.amazonaws.cn/elasticloadbalancing/latest/application/) 配置。另请参阅[配置 Application Load Balancer](environments-cfg-alb.md)。有关配置 Elastic Beanstalk 支持的所有负载均衡器类型的信息，请参阅[Elastic Beanstalk 环境的负载均衡器](using-features.managing.elb.md)。

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

## 简介
<a name="environments-cfg-alb-shared-intro"></a>

*共享负载均衡器*是您使用亚马逊弹性计算云 (Amazon EC2) 服务自行创建和管理的负载均衡器，然后在多个 Elastic Beanstalk 环境中使用。

在您创建负载均衡的自动扩展环境并选择使用 Application Load Balancer 时，Elastic Beanstalk 默认情况下都会相应创建一个专用于您的环境的负载均衡器。要了解什么是 Application Load Balancer 以及它如何用于 Elastic Beanstalk 环境，请参阅为 Elastic Beanstalk 配置 Application Load Balancer 的[简介](environments-cfg-alb.md#environments-cfg-alb-intro)。

在某些情况下，您可能想要节省拥有多个专用负载均衡器的成本。当您拥有多个环境时，这可能会很有帮助，例如，当您的应用程序是一组微服务，而不是一个整体服务时。在这种情况下，您可以选择使用共享的负载均衡器。

要使用共享负载均衡器，请先在 Amazon 中创建该负载均衡器， EC2 然后添加一个或多个侦听器。在创建 Elastic Beanstalk 环境期间，您随之提供负载均衡器并选择侦听器端口。Elastic Beanstalk 将侦听器与您环境中的默认进程相关联。您可以添加自定义侦听器规则，以将流量从特定主机标头和路径路由到其他环境进程。

Elastic Beanstalk 将标签添加到共享负载均衡器。标签名称为 `elasticbeanstalk:shared-elb-environment-count`，其值是共享此负载均衡器的环境数。

使用共享负载均衡器与使用专用负载均衡器在多个方面有所不同。


| 关于 | 专用 Application Load Balancer | 共享 Application Load Balancer | 
| --- | --- | --- | 
| 管理 | Elastic Beanstalk 创建和管理负载均衡器、侦听器、侦听器规则和进程（目标组）。Elastic Beanstalk 还会在您终止环境时删除它们。如果选择该选项，Elastic Beanstalk 可以设置负载均衡器访问日志捕获。 | 您可以在 Elastic Beanstalk 之外创建并管理负载均衡器和侦听器。Elastic Beanstalk 创建并管理默认规则和默认进程，您可以添加规则和进程。Elastic Beanstalk 将删除环境创建期间添加的侦听器规则和进程。 | 
| 侦听器规则 | Elastic Beanstalk 为每个侦听器创建一个默认规则，以将所有流量路由到侦听器的默认进程。 | Elastic Beanstalk 仅将默认规则与端口 80 侦听器关联（如果存在）。如果选择不同的默认侦听器端口，则必须将默认规则与其关联（Elastic Beanstalk 控制台和 EB CLI 为您执行此操作）。<br />为解决共享负载均衡器的各环境间的侦听器规则条件冲突，Elastic Beanstalk 将环境的 CNAME 作为主机标头条件添加到侦听器规则中。<br />在共享负载均衡器的环境间，Elastic Beanstalk 将规则优先级设置视为相对优先级，并在创建过程中将其映射到绝对优先级。 | 
| 安全组 | Elastic Beanstalk 创建默认安全组并将其附加到负载均衡器。 | 您可以配置一个或多个安全组以用于负载均衡器。如果您未配置，Elastic Beanstalk 将检查 Elastic Beanstalk 管理的某个现有安全组是否已连接到负载均衡器。如果没有，Elastic Beanstalk 将创建一个安全组并将其附加到负载均衡器。当最后一个共享负载均衡器的环境终止时，Elastic Beanstalk 将删除此安全组。 | 
| 更新 | 您可以在创建环境后更新您的 Application Load Balancer。您可以编辑侦听器、侦听器规则和进程。您可以配置负载均衡器访问日志捕获。 | 您不能使用 Elastic Beanstalk 在 Application Load Balancer 中配置访问日志捕获，也无法在创建环境后更新侦听器和侦听器规则。您只能更新进程（目标组）。要配置访问日志捕获以及更新侦听器和侦听器规则，请使用 Amazon EC2。 | 

## 使用 Elastic Beanstalk 控制台配置共享 Application Load Balancer
<a name="environments-cfg-alb-shared-console"></a>

环境创建期间，您可以使用 Elastic Beanstalk 控制台配置共享 Application Load Balancer。您可以选择账户的其中一个可共享的负载均衡器以供在环境中使用，选择默认侦听器端口，并配置其他进程和侦听器规则。

创建环境后，您无法在 Application Load Balancer 控制台中编辑共享 Application Load Balancer 配置。要配置侦听器、侦听器规则、进程（目标组）和访问日志捕获，请使用 Amazon EC2。

**环境创建期间，在 Elastic Beanstalk 控制台中配置 Application Load Balancer**

1. 打开 [Elastic Beanstalk](https://console.amazonaws.cn/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 Amazon Web Services 区域

1. 在导航窗格中，选择**环境**。

1. 选择 [Create a new environment (创建新环境)](environments-create-wizard.md) 以开始创建环境。

1. 在向导的主页上，在选择**创建环境**之前，选择**配置更多选项**。

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

   或者，在**容量**配置类别中配置**负载均衡**环境类型。有关更多信息，请参阅 [Capacity](environments-create-wizard.md#environments-create-wizard-capacity)。

1. 在 **Load balancer (负载均衡器)** 配置类别中，选择 **Edit (编辑)**。

1. 如果尚未选择该选项，请选择 **Application Load Balancer** 选项，然后选择 **Shared (已共享)** 选项。  
![Elastic Load Balancing 配置页面 - 选择负载均衡器类型](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-type-chooser.png)

1. 根据环境需要进行任何共享 Application Load Balancer 配置更改。

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

1. 选择**创建环境**。

**Topics**
+ [共享 Application Load Balancer](#environments-cfg-alb-shared-console-alb)
+ [进程](#environments-cfg-alb-shared-console-processes)
+ [Rules](#environments-cfg-alb-shared-console-rules)

### 共享 Application Load Balancer
<a name="environments-cfg-alb-shared-console-alb"></a>

使用此部分可以为您的环境选择共享的 Application Load Balancer 并配置默认流量路由。

在此处配置共享应用程序负载均衡器之前，请先使用 Amazon 在您的账户中定义至少一个 EC2 要与至少一个侦听器共享的应用程序负载均衡器。如果您尚未执行此操作，则可以选择 **Manage load balancers (管理负载均衡器)**。Elastic Beanstalk 在新的浏览器选项 EC2 卡中打开亚马逊控制台。

在 Elastic Beanstalk 外部配置完共享的负载均衡器后，请在此控制台部分配置以下设置：
+ **Load balancer ARN (负载均衡器 ARN)** – 要在此环境中使用的共享的负载均衡器。从负载均衡器列表中进行选择，或输入负载均衡器 Amazon Resource Name (ARN)。
+ **Default listener port (默认侦听器端口)** – 共享的负载均衡器所侦听的侦听器端口。从现有侦听器端口列表中进行选择。来自此侦听器的流量（在主机标头中具有环境的 CNAME）将路由到此环境中的默认进程。

![Application Load Balancer 配置 – 选择共享的负载均衡器](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-alb.png)


### 进程
<a name="environments-cfg-alb-shared-console-processes"></a>

使用该列表为共享的负载均衡器指定进程。进程是侦听器将流量路由到的目标。最初，列表显示默认进程，该进程从默认侦听器接收流量。

![Application Load Balancer 配置 – 进程列表](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-processes.png)


**配置现有进程**

1. 选中表条目旁边的复选框，然后选择**操作**和**编辑**。

1. 使用**环境进程**对话框编辑设置，然后选择**保存**。

**添加进程**

1. 选择**添加进程**。

1. 在**环境进程**对话框中，配置所需的设置，然后选择**添加**。

**Topics**
+ [定义](#environments-cfg-alb-console-process-definition)
+ [健康检查](#environments-cfg-alb-shared-console-process-healthchecks)
+ [会话](#environments-cfg-alb-shared-console-process-sessions)

#### 定义
<a name="environments-cfg-alb-console-process-definition"></a>

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

![Application Load Balancer 进程的名称、端口和协议设置](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-definition.png)


#### 健康检查
<a name="environments-cfg-alb-shared-console-process-healthchecks"></a>

可以使用以下设置配置进程运行状况检查：
+ **HTTP code (HTTP 代码)** – 指定正常运行的进程的 HTTP 状态代码。
+ **Path (路径)** – 进程的运行状况检查请求路径。
+ **Timeout (超时)** – 等待运行状况检查响应的时间（秒）。
+ **Interval (间隔)** – 单个实例的两次运行状况检查间隔的时间（秒）。间隔必须大于超时。
+ **Unhealthy threshold (不正常阈值)** 和 **Healthy threshold (正常阈值)** – 在 Elastic Load Balancing 更改实例的运行状况之前，实例必须通过或未通过的运行状况检查次数。
+ **Deregistration delay (取消注册延迟)** – 在取消注册实例之前等待活动请求完成的时间（秒）。

![Application Load Balancer 进程的运行状况检查设置](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-healthcheck.png)


**注意**  
Elastic Load Balancing 运行状况检查不会影响环境的 Auto Scaling 组的运行状况检查行为。Amazon A EC2 uto Scaling 不会自动替换未通过 Elastic Load Balancing 运行状况检查的实例，除非您手动将 Amazon A EC2 uto Scaling 配置为这样做。有关详细信息，请参阅 [Elastic Beanstalk 环境的 Auto Scaling 运行状况检查设置](environmentconfig-autoscaling-healthchecktype.md)。

有关运行状况检查以及其对环境的总体运行状况的影响的更多信息，请参阅[基本运行状况报告](using-features.healthstatus.md)。

#### 会话
<a name="environments-cfg-alb-shared-console-process-sessions"></a>

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

![Application Load Balancer 进程的会话粘性设置](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-sessions.png)


### Rules
<a name="environments-cfg-alb-shared-console-rules"></a>

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

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

![Application Load Balancer 配置 – 规则列表](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-rules.png)


您可以编辑现有规则的设置或添加新的规则。要在列表中开始编辑或添加规则，请使用为[进程列表](#environments-cfg-alb-shared-console-processes)列出的相同步骤。将打开**侦听器规则**对话框并包含以下设置：
+ **Name (名称)** – 规则的名称。
+ **Listener port (侦听器端口)** – 规则应用到的侦听器端口。
+ **Priority (优先级)** – 规则的优先级。优先级序号越小，优先顺序越靠前。侦听器的规则优先级必须是唯一的。Elastic Beanstalk 将规则优先级视为跨共享环境的相对优先级，并在创建过程中将其映射到绝对优先级。
+ **Match conditions (匹配条件)** – 规则应用到的请求 URL 条件的列表。有两种类型的条件：**HostHeader**（网址的网域部分）和 **PathPattern**（网址的路径部分）。为环境子域保留了一个条件，您最多可以添加四个条件。每个条件值的长度最多为 128 个字符，并且可以包含通配符。
+ **Process (进程)** – 负载均衡器将与规则匹配的请求路由到的进程。

![Application Load Balancer 配置 – 规则列表](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-rule-dialog.png)


## 示例：使用共享的 Application Load Balancer 来保护 micro-service-based应用程序安全
<a name="environments-cfg-alb-shared-console-example"></a>

在此示例中，您的应用程序由几个微服务组成，每个微服务都作为一个 Elastic Beanstalk 环境实现。此外，您还需要对 end-to-end流量进行加密。我们将演示其中一个微服务环境，该环境具有用于用户请求的主流程和用于处理管理请求的单独流程。

要满足这些要求，请使用 Amazon 创建 A EC2 pplication Load Balancer，供您在微服务之间共享该负载均衡器。在端口 443 和 HTTPS 协议上添加安全侦听器。然后，将多个 SSL 证书添加到侦听器，每个微服务域一个。有关创建应用程序负载均衡器和安全侦听器的详细信息，请参阅《*应用程序负载均衡器用户指南*》中的[创建应用程序负载均衡器](https://docs.amazonaws.cn/elasticloadbalancing/latest/application/create-application-load-balancer.html)和[为应用程序负载均衡器创建 HTTPS 侦听器](https://docs.amazonaws.cn/elasticloadbalancing/latest/application/create-https-listener.html)。

在 Elastic Beanstalk 中，将每个微服务环境配置为使用共享 Application Load Balancer，并将默认侦听器端口设置为 443。对于我们在此演示的特定环境，指示默认进程侦听端口 443 上的 HTTPS，并为不同路径上的管理员流量添加进程和侦听器规则。

**为该示例配置共享的负载均衡器**

1. 在 **Shared Application Load Balancer（共享 Application Load Balancer）**部分中，选择您的负载均衡器，对于 **Default listener port（默认侦听器端口）**，选择 **443**。如果侦听器端口是负载均衡器拥有的唯一侦听器，则应该已选择该端口。  
![Application Load Balancer 配置 – 添加安全侦听器](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-example-alb.png)

1. *将默认进程配置为 HTTPS。*选择默认进程，然后为**操作**选择**编辑**。对于**端口**，输入 **443**。对于**协议**，选择 **HTTPS**。  
![Application Load Balancer 配置示例 – 将默认进程配置为使用 HTTPS](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-definition-https.png)

1. *添加一个管理进程。*对于**名称**，请输入 **admin**。对于**端口**，输入 **443**。对于**协议**，选择 **HTTPS**。在**运行状况检查**下，为**路径**键入 **/admin**。  
![Application Load Balancer 配置示例 – 添加管理进程](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-definition-https-admin.png)

1. *为管理流量添加一个规则。*对于**名称**，请输入 **admin**。对于**侦听器端口**，输入 **443**。在 “**匹配条件**” 中，添加值为 a **PathPattern****/admin/\***。对于**进程**，选择 **admin**。  
![Application Load Balancer 配置示例 – 添加管理规则](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-config-alb-rule-https-admin.png)

## 使用 EB CLI 配置共享 Application Load Balancer
<a name="environments-cfg-alb-shared-ebcli"></a>

当您运行 [**eb create**](eb3-create.md) 时，EB CLI 会提示您选择负载均衡器类型。如果您选择 `application`（默认设置），并且您的账户至少有一个可共享的 Application Load Balancer，EB CLI 还会询问您是否要使用共享的 Application Load Balancer。如果回答 **y**，还会提示您选择负载均衡器和默认端口。

```
$ 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): 

Your account has one or more sharable load balancers. Would you like your new environment to use a shared load balancer?(y/N) y

Select a shared load balancer
1)MySharedALB1 - arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB1/6d69caa75b15d46e
2)MySharedALB2 - arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB2/e574ea4c37ad2ec8
(default is 1): 2

Select a listener port for your shared load balancer
1) 80
2) 100
3) 443
(default is 1): 3
```

还可以使用命令选项指定共享的负载均衡器。

```
$ eb create {{test-env}} --elb-type application --shared-lb {{MySharedALB2}} --shared-lb-port {{443}}
```

## 共享 Application Load Balancer 命名空间
<a name="environments-cfg-alb-shared-namespaces"></a>

您可以在以下命名空间中找到与共享 Application Load Balancer 相关的设置：
+ `aws:elasticbeanstalk:environment` – 选择环境的负载均衡器类型，并告知 Elastic Beanstalk 您将使用共享的负载均衡器。

  无法在配置文件 ([.Ebextensions](ebextensions.md)) 中设置这两个选项。
+ `aws:elbv2:loadbalancer` – 配置共享 Application Load Balancer ARN 和安全组。
+ `aws:elbv2:listener` – 通过列出侦听器规则将共享 Application Load Balancer 的侦听器与环境进程相关联。
+ `aws:elbv2:listenerrule` – 配置根据请求路径将流量路由到不同进程的侦听器规则。规则对于 Application Load Balancer 是唯一的，无论是专用还是共享。
+ `aws:elasticbeanstalk:environment:process` – 配置运行状况检查并为在您的环境的实例上运行的过程指定端口和协议。

**Example .ebextensions/ .config application-load-balancer-shared**  
要开始使用共享 Application Load Balancer，请使用 Elastic Beanstalk 控制台、EB CLI 或 API 将负载均衡器类型设置为 `application`，然后选择使用共享的负载均衡器。使用[配置文件](ebextensions.md)以配置共享的负载均衡器。  

```
option_settings:
  aws:elbv2:loadbalancer:
    SharedLoadBalancer: arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB2/e574ea4c37ad2ec8
```

**注意**  
您只能在创建环境时配置此选项。

**Example .ebextensions/ .config alb-shared-secure-listener**  
以下配置文件为共享的负载均衡器选择端口 443 上的默认安全侦听器，并将默认进程设置为侦听端口 443。  

```
option_settings:
  aws:elbv2:loadbalancer:
    SharedLoadBalancer: arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB2/e574ea4c37ad2ec8
  aws:elbv2:listener:443:
    rules: default
  aws:elasticbeanstalk:environment:process:default:
    Port: '443'
    Protocol: HTTPS
```

**Example .ebextensions/ .config alb-shared-admin-rule**  
以下配置文件在上一个示例的基础上构建，并添加了一条规则，该规则将请求路径为 `/admin` 的流量路由到一个名为 `admin` 的进程，该进程在端口 4443 上进行侦听。  

```
option_settings:
  aws:elbv2:loadbalancer:
    SharedLoadBalancer: arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/MySharedALB2/e574ea4c37ad2ec8
  aws:elbv2:listener:443:
    rules: default,admin
  aws:elasticbeanstalk:environment:process:default:
    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
```