設定 Application Load Balancer - AWS Elastic Beanstalk

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

設定 Application Load Balancer

啟用負載平衡,您的 AWS 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 會預設將其設定為執行與 Classic Load Balancer 相同的功能。預設的接聽程式會接受 80 埠上的 HTTP 請求,並將這些請求分送到您環境中的執行個體。您可以在連接埠 443 上新增安全接聽程式 (此程式具有解密 HTTPS 傳輸資料的憑證)、設定運作狀態檢查的動作,以及將負載平衡器傳來的存取日誌推送到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。

注意

有別於 Classic Load Balancer 或 Network Load Balancer,Application Load Balancer 無法擁有傳輸層 (第 4 層) TCP 或 SSL/TLS 接聽程式。它僅支援 HTTP 和 HTTPS 接聽程式。此外,它無法使用後端身分驗證以驗證於負載平衡器之間與後端執行個體之間的 HTTPS 連線。

在 Elastic Beanstalk 環境中,您可以使用 Application Load Balancer,將送往某些路徑的流量導向 Web 伺服器執行個體上的不同程序。使用 Classic Load Balancer 時,傳送到接聽程式的所有流量,都會路由傳送至後端執行個體上的單一程序。使用 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 內,您環境中的所有執行個體都是相同的,因此差別在於監聽不同連接埠的程序。

Classic Load Balancer 針對整個環境使用單一運作狀態檢查路徑。使用 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 (區域) 清單中選取您的 AWS 區域。

  2. 在導覽窗格中,選擇 Environments (環境)

  3. 選擇 Create a new environment (建立新環境) 以開始建立您的環境。

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

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

    或者,在 Capacity (容量) 組態類別中,設定Load balanced (負載平衡器) 環境類型。如需詳細資訊,請參閱容量

  6. Load balancer (負載平衡器) 組態類別中,選擇 Edit (編輯)

  7. 選取 Application Load BalancerDedicated (專用) 選項 (如果尚未選取)。

    Elastic Load Balancing 組態頁面 - 選擇負載平衡器類型
  8. 根據環境所需,變更任何 Application Load Balancer 組態。

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

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

若要在 Elastic Beanstalk 主控台設定執行中環境的 Application Load Balancer
  1. 開啟 Elastic Beanstalk 主控台,然後在 Regions (區域) 清單中選取您的 AWS 區域。

  2. 在導覽窗格中,選擇 Environments (環境),然後在清單中選擇您環境的名稱。

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 在導覽窗格中,選擇 Configuration (組態)

  4. Load balancer (負載平衡器) 組態類別中,選擇 Edit (編輯)

    注意

    如果 Load balancer (負載平衡器) 組態類別沒有 Edit (編輯) 按鈕,您的環境便沒有負載平衡器。若要了解如何設定一個負載平衡器,請參閱 變更環境類型

  5. 根據環境所需,變更 Application Load Balancer 組態。

  6. 若要儲存變更,請選擇頁面底部的儲存變更

Application Load Balancer 設定

接聽程式

使用此名單為您的負載平衡器指定接聽程式。每個接聽程式會藉由特定的通訊協定至您執行個體上的一個或多個程序,將傳入用戶端流量路由至指定的連接埠上。一開始,清單會顯示將連接埠 80 上傳入的 HTTP 流量路由傳送至名為預設的接聽程式。

Application Load Balancer 組態 - 接聽程式清單
要設定現有的接聽程式
  1. 選取其表項目旁邊的核取方塊,然後選擇 Actions (動作)Edit (編輯)

  2. 使用 Application Load Balancer listener (應用程式負載平衡器接聽程式) 對話方塊編輯設定,然後選擇 Save (儲存)

加入接聽程式
  1. 選擇 Add listener (新增接聽程式)

  2. Application Load Balancer 接聽程式對話方塊中,設定所需的設定,然後選擇新增

使用 Application Load Balancer 接聽程式對話方塊設定來選擇接聽程式接聽流量的連接埠和協定。如果您選擇 HTTPS 通訊協定,請設定 SSL 設定。

Application Load Balancer 接聽程式對話方塊

在設定接聽程式之前,請確定您擁有有效的 SSL 憑證。執行下列任意一項:

  • 如果 AWS Certificate Manager (ACM) 可在您的 AWS 區域中使用,請使用 ACM 建立或匯入憑證。如需請求 ACM 憑證的詳細資訊,請參閱《AWS Certificate Manager 使用者指南》中的請求憑證。如需有關將第三方憑證匯入 ACM 的詳細資訊,請參閱《AWS Certificate Manager 使用者指南》中的匯入憑證

  • 如果 ACM 無法在您的 AWS 區域中使用,請上傳您現有的憑證和金鑰至 IAM。如需建立和上傳憑證至 IAM 的詳細資訊,請參閱《IAM 使用者指南》中的使用伺服器憑證

如需設定 HTTPS 和在 Elastic Beanstalk 中使用憑證的詳細資訊,請參閱為您的 Elastic Beanstalk 環境設定 HTTPS

Processes

使用此名單為您的負載平衡器指定程序。程序為接聽程式路由流量的目標。每個接聽程式會藉由特定的通訊協定至您執行個體上的一個或多個程序,將傳入用戶端流量路由至指定的連接埠上。一開始,清單顯示接聽於連接埠 80 上傳入的 HTTP 流量的預設程序。

Application Load Balancer 組態 - 程序清單

您可以編輯現有程序的設定,或增加新的程序。若要開始編輯清單中的一個程序或新增一個程序,使用列於接聽程式清單的相同步驟。Environment process (環境程序) 對話方塊開啟。

Application Load Balancer 的環境程序對話方塊設定

定義

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

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 不會自動取代未通過 Elastic Load Balancing 運作狀態檢查的執行個體,除非您手動設定 Amazon EC2 Auto Scaling 執行此項動作。如需詳細資訊,請參閱 Auto Scaling 運作狀態檢查設定

如需關於運作狀態檢查,以及這些檢查如何影響您環境整體健全狀態的詳細資訊,請參閱基礎型運作狀態報告

工作階段

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

Application Load Balancer 工作階段粘性的程序設定

規則

使用此名單為您的負載平衡器指定自訂接聽程式規則。規則映射在特定路徑模式接聽程式接收到的要求於目標程序中。每個接聽程式可以有多個規則,在您的執行個體上於不同的路徑路由請求到不同的程序。

規則有數字優先順序,判斷套用到傳入要求的優先順序。對於您新增的每個新接聽程式,Elastic Beanstalk 會新增一個將所有接聽程式的流量都路由傳送到預設程序的預設規則。預設規則的優先順序是最低的,如果相同的接聽程式沒有其它規則符合傳入的請求,則套用。一開始,如果您尚未新增自訂規則,清單會是空的。不會顯示所有接聽程式的預設規則。

Application Load Balancer 組態 - 規則清單

您可以編輯現有規則的設定,或增加新的規則。若要開始編輯清單中的一個規則或新增一個規則,使用列於接聽程式清單的相同步驟。Listener rule (接聽程式規則) 對話方塊開啟,依以下設定:

  • Name (名稱) - 規則的名稱。

  • Listener port (接聽程式連接埠) - 套用規則的接聽程式連接埠。

  • Priority (優先順序) - 規則的優先順序。較低的號碼有較高的優先順序。接聽程式規則的優先順序必須是唯一的。

  • Match conditions (比對條件) - 要套用規則的請求 URL 條件清單。條件有兩種類型: HostHeader (URL 的網域部分) 以及 PathPattern (URL 的路徑部分)。您最多可以新增五個條件。每個條件值最多可包含 128 個字元,且可包含萬用字元。

  • Process (程序) - 負載平衡器路由傳送符合規則之請求的目標程序。

當編輯任何現有的規則,您無法更改其 Name (名稱)Listener port (接聽程式連接埠)

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 為您的帳戶建立的儲存貯體,請務必將具有適當許可的使用者政策新增給 AWS Identity and Access Management (IAM) 使用者。Elastic Beanstalk 僅提供 Elastic Beanstalk 受管資源的許可的受管使用者政策

如需有關存取日誌的詳細資訊,包括許可和其他要求,請參閱 Application Load Balancer 的存取日誌

Application Load Balancer 組態 - 存取日誌

範例:具有安全接聽程式和兩個程序的 Application Load Balancer

在這個範例中,您的應用程式需要端對端流量加密和單獨的程序以處理管理請求。

若要設定您環境的 Application Load Balancer 以滿足這些請求,請移除預設接聽程式,新增 HTTPS 接聽程式,指出預設程序會監聽 HTTPS 上的連接埠 443,然後新增程序和接聽程式規則以用於不同路徑的管理流量。

要設定負載平衡器在這個範例
  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 接聽程式。針對預設的接聽程式,關閉 Enabled (已啟用) 選項。

    Application Load Balancer 組態範例 - 停用預設接聽程式
  3. 設定預設程序至 HTTPS。選取預設程序,然後在 Actions (動作) 中選擇 Edit (編輯)。對於連接埠,請輸入 443。對於通訊協定,請選取 HTTPS

    Application Load Balancer 組態範例 - 將預設程序設定為 HTTPS
  4. 新增管理程序。Name (名稱) 輸入 admin。對於連接埠,請輸入 443。對於通訊協定,請選取 HTTPS。對於運作狀態檢查下方的路徑,請輸入 /admin

    Application Load Balancer 組態範例 - 新增管理程序
  5. 為管理流量新增一個規則。Name (名稱) 輸入 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 上的接聽程式。這些設定對應至 Classic Load Balancer 之 aws:elb:listener 中的設定。

  • aws:elbv2:listenerrule - 設定規則,根據請求的路徑,將流量路由傳送至不同程序。規則對 Application Load Balancer 是唯一的。

  • aws:elasticbeanstalk:environment:process - 設定運作狀態檢查,並針對執行於環境執行個體的程序,指定連接埠和通訊協定。此連接埠和通訊協定設定,對應至 Classic Load Balancer 接聽程式之 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 請求路徑路由流量至在連接埠 4443 上接聽名為 admin 程序的規則。

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