

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

當您[啟用負載平衡](using-features-managing-env-types.md#using-features.managing.changetype)時，您的 AWS Elastic Beanstalk 環境會配備 Elastic Load Balancing 負載平衡器，以在環境中的執行個體之間分配流量。Elastic Load Balancing 支援多種類型的負載平衡器。若要了解這些資訊，請參閱 [Elastic Load Balancing 使用者指南](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/)。Elastic Beanstalk 可以為您建立負載平衡器，或讓您能夠指定已建立的共享負載平衡器。

本主題說明您建立並與環境產生關聯的共享 [Application Load Balancer](https://docs.aws.amazon.com/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 Elastic Compute Cloud (Amazon EC2) 服務建立和自我管理的一種負載平衡器，之後可在多個 Elastic Beanstalk 環境中使用。

當您建立負載平衡、具擴展性的環境並選擇使用 Application Load Balancer 時，Elastic Beanstalk 預設會建立專用於您環境的負載平衡器。若要了解 Application Load Balancer 是什麼，以及它在 Elastic Beanstalk 環境中的運作方式，請參閱[簡介](environments-cfg-alb.md#environments-cfg-alb-intro)來為 Elastic Beanstalk 設定 Application Load Balancer。

在某些情況下，您可能想要節省擁有多個專用負載平衡器的成本。當您有多個環境時，例如，如果您的應用程式是微型服務套件，而不是整合式服務，這將會十分實用。在這種情況下，您可以選擇使用共享負載平衡器。

若要使用共享負載平衡器，請先在 Amazon EC2 中建立它，然後新增一個或多個接聽程式。接著在建立 Elastic Beanstalk 環境期間，您提供負載平衡器並選擇接聽程式連接埠。Elastic Beanstalk 會將接聽程式與您環境中的預設程序產生關聯。您可以新增自訂接聽程式規則，將流量從特定主機標頭和路徑路由傳送至其他環境處理程序。

Elastic Beanstalk 會將標籤新增至共享負載平衡器。標籤名稱為 `elasticbeanstalk:shared-elb-environment-count`，其值為共享此負載平衡器的環境數目。

使用共享負載平衡器與使用專用負載平衡器的方式不同。


| Regarding | 專用 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 將規則優先順序設定視為共享負載平衡器環境間的相對優先順序，並在建立期間將其對應至絕對優先順序。 | 
| Security groups (安全群組) | 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.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

1. 在導覽窗格中，選擇 **Environments (環境)**。

1. 選擇 [Create a new environment (建立新環境)](environments-create-wizard.md) 以開始建立您的環境。

1. 在精靈的主頁上，在選擇 **Create environment (建立環境)** 之前，選擇 **Configure more options (設定更多選項)**。

1. 選擇 **High availability (高可用性)** 組態預設。

   或者，在 **Capacity (容量)** 組態類別中，設定**Load balanced (負載平衡器)** 環境類型。如需詳細資訊，請參閱[Capacity](environments-create-wizard.md#environments-create-wizard-capacity)。

1. 在 **Load balancer (負載平衡器)** 組態類別中，選擇 **Edit (編輯)**。

1. 選取 **Application Load Balancer** 選項 (如果尚未選取)，然後選取 **Shared (共享)** 選項。  
![Elastic Load Balancing 組態頁面 - 選擇負載平衡器類型](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-type-chooser.png)

1. 根據環境所需，變更任何共享 Application Load Balancer 組態。

1. 選擇 **Save (儲存)**，然後針對您環境所需對其他組態做變更。

1. 選擇 **Create environment** (建立環境)。

**Topics**
+ [共享 Application Load Balancer](#environments-cfg-alb-shared-console-alb)
+ [Processes](#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，並設定預設流量路由。

在您可以在此設定共享 Application Load Balancer 之前，請先使用 Amazon EC2 在您的帳戶中至少定義一個用於共享的 Application Load Balancer，內含至少一個接聽程式。如果您尚未這麼做，可以選擇 **Manage load balancers (管理負載平衡器)**。Elastic Beanstalk 會在新的瀏覽器標籤中開啟 Amazon EC2 主控台。

當您在 Elastic Beanstalk 外完成設定共享負載平衡器時，請在此主控台區段中設定下列設定：
+ **Load balancer ARN (負載平衡器 ARN)** - 在此環境中使用的共享負載平衡器。從負載平衡器清單中選取，或輸入負載平衡器 Amazon Resource Name (ARN)。
+ **Default listener port (預設接聽程式連接埠)** - 共享負載平衡器監聽的接聽程式連接埠。從現有的接聽程式連接埠清單中選取。來自此接聽程式的流量 (含有主機標頭中環境的 CNAME)，會路由傳送至此環境中的預設程序。

![Application Load Balancer 組態 - 選擇共享負載平衡器](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-alb.png)


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

使用此名單為您的負載平衡器指定處理程序。程序為接聽程式路由流量的目標。一開始，此清單會顯示預設程序，該程序會從預設接聽程式接收流量。

![Application Load Balancer 組態 - 程序清單](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-processes.png)


**設定現有處理程序**

1. 選取其表項目旁邊的核取方塊，然後選擇 **Actions (動作)**，**Edit (編輯)**。

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>

使用這些設定來定義程序：它的 **Name (名稱)** 和其接聽請求的 **Port (連接埠)** 和 **Protocol (協定)**。

![Application Load Balancer 名稱、連接埠和通訊協定的程序設定](http://docs.aws.amazon.com/zh_tw/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.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-healthcheck.png)


**注意**  
Elastic Load Balancing 運作狀態檢查不會影響環境 Auto Scaling 群組的運作狀態檢查行為。Amazon EC2 Auto Scaling 不會自動取代未通過 Elastic Load Balancing 運作狀態檢查的執行個體，除非您手動設定 Amazon EC2 Auto Scaling 執行此項動作。如需詳細資訊，請參閱 [Elastic Beanstalk 環境的 Auto Scaling 運作狀態檢查設定](environmentconfig-autoscaling-healthchecktype.md)。

如需關於運作狀態檢查，以及這些檢查如何影響您環境整體健全狀態的詳細資訊，請參閱[基礎型運作狀態報告](using-features.healthstatus.md)。

#### 工作階段
<a name="environments-cfg-alb-shared-console-process-sessions"></a>

選取或清除 **Stickiness policy enabled (啟用黏性政策)** 方塊，以啟用或停用黏性工作階段。使用 **Cookie duration (Cookie 持續時間)** 設定黏性工作階段的持續時間，最長 **604800** 秒。

![Application Load Balancer 工作階段粘性的程序設定](http://docs.aws.amazon.com/zh_tw/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.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-rules.png)


您可以編輯現有規則的設定，或增加新的規則。若要開始編輯清單中的一個規則或新增一個規則，使用列於[處理程序清單](#environments-cfg-alb-shared-console-processes)的相同步驟。**Listener rule (接聽程式規則)** 對話方塊開啟，依以下設定：
+ **Name (名稱)** - 規則的名稱。
+ **Listener port (接聽程式連接埠)** - 套用規則的接聽程式連接埠。
+ **Priority (優先順序)** - 規則的優先順序。較低的號碼有較高的優先順序。接聽程式規則的優先順序必須是唯一的。Elastic Beanstalk 將規則優先順序視為共享環境間的相對優先順序，並在建立期間將其對應至絕對優先順序。
+ **Match conditions (比對條件)** - 要套用規則的請求 URL 條件清單。條件有兩種類型： **HostHeader** (URL 的網域部分) 以及 **PathPattern** (URL 的路徑部分)。一個條件會保留給環境子網域，而且您最多可以加入四個條件。每個條件值的長度最多為 128 個字元，且可以包含萬用字元。
+ **Process (程序)** - 負載平衡器路由傳送符合規則之請求的目標程序。

![Application Load Balancer 組態 - 規則清單](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/aeb-config-alb-rule-dialog.png)


## 範例：針對安全的微型服務應用程式使用共享 Application Load Balancer
<a name="environments-cfg-alb-shared-console-example"></a>

在此範例中，您的應用程式包含數個微型服務，每個服務都會以 Elastic Beanstalk 環境進行實作。此外，您還需要端對端流量加密。我們將示範其中一個微型服務環境，其中包含使用者請求的主要程序，以及處理系統管理請求的個別程序。

若要符合這些需求，請使用 Amazon EC2 建立您將在微型服務間共享的 Application Load Balancer。在連接埠 443 和 HTTPS 通訊協定上新增安全接聽程式。然後將多個 SSL 憑證新增到接聽程式中，每個微型服務網域各新增一個。如需建立 Application Load Balancer 和安全接聽程式的詳細資訊，請參閱《*Application Load Balancer 使用者指南*》中的[建立 Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)和[建立適用於您 Application Load Balancer 的 HTTPS 接聽程式](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html)。

在 Elastic Beanstalk 中，將每個微型服務環境設定為使用共享 Application Load Balancer，並將預設接聽程式連接埠設定為 443。在此示範的特定環境中，指出預設程序在 HTTPS 上會接聽連接埠 443，並為不同路徑上的管理流量新增處理程序和接聽程式規則。

**設定此範例的負載平衡器**

1. 在 **Shared Application Load Balancer (共享 Application Load Balancer)** 區段中，選取您的負載平衡器，然後在 **Default listener port (預設接聽程式連接埠)** 中選取 **443**。如果接聽程式連接埠是負載平衡器唯一擁有的接聽程式，則系統應該已經選取該接聽連接埠。  
![Application Load Balancer 組態 - 新增安全接聽程式](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/aeb-config-alb-shared-example-alb.png)

1. *設定預設程序至 HTTPS。*選取預設程序，然後在 **Actions (動作)** 中選擇 **Edit (編輯)**。針對**連接埠**，輸入 **443**。對於**通訊協定**，請選取 **HTTPS**。  
![Application Load Balancer 組態範例 - 將預設程序設定為 HTTPS](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-definition-https.png)

1. *新增管理程序。*對於**名稱**，輸入 **admin**。針對**連接埠**，輸入 **443**。對於**通訊協定**，請選取 **HTTPS**。對於**運作狀態檢查**下方的**路徑**，輸入 **/admin**。  
![Application Load Balancer 組態範例 - 新增管理程序](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/aeb-config-alb-process-definition-https-admin.png)

1. *為管理流量新增一個規則。*對於**名稱**，輸入 **admin**。對於**接聽程式連接埠**，輸入 **443**。對於**比對條件**，新增一個帶有**/admin/\***值的 **PathPattern**。對於**程序**，請選取 **admin**。  
![Application Load Balancer 組態範例 - 新增管理規則](http://docs.aws.amazon.com/zh_tw/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/application-load-balancer-shared.config**  
若要開始使用共享 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/alb-shared-secure-listener.config**  
下列組態檔案會為共享負載平衡器選取連接埠 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/alb-shared-admin-rule.config**  
下列組態檔案會以上一個範例為基礎並新增規則，該規則會將流量以 `/admin` 的請求路徑路由傳送至在連接埠 4443 上接聽名為 `admin` 的處理程序。  

```
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
```