設定 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 不同,應用程式負載平衡器不能具有傳輸層 (第 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. 開啟彈性魔豆控制台,然後在區域清單中選取您的. 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. 開啟彈性魔豆控制台,然後在區域清單中選取您的. AWS 區域

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

    注意

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

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

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

    注意

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

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

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

Application Load Balancer 設定

接聽程式

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

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 接聽程式對話方塊

在設定HTTPS監聽器之前,請確定您擁有有效的SSL憑證。執行以下任意一項:

有關在 Elastic Beanstalk 中配置HTTPS和使用證書的更多詳細信息,請參閱。針對 Elastic Beanstalk 環境HTTPS設定

Processes

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

Application Load Balancer 組態 - 程序清單

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

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

定義

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

Application Load Balancer 名稱、連接埠和通訊協定的程序設定

運作狀態檢查

使用以下設定以設定程序運作狀態檢查:

  • HTTPcode — 指定健康程序的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 (優先順序) - 規則的優先順序。較低的號碼有較高的優先順序。接聽程式規則的優先順序必須是唯一的。

  • 符合條件 — 規則適用的要求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

在此範例中,您的應用程式需要 end-to-end 流量加密和單獨的處理程序來處理系統管理要求。

若要設定環境的 Application Load Balancer 以符合這些需求,請移除預設接聽程式、新增接HTTPS聽程式、指示預設處理程序接聽連接埠 443 onHTTPS,然後在不同路徑上為管理員流量新增處理序和接聽程式規則。

要設定負載平衡器在這個範例
  1. 新增一個安全接聽程式。對於連接埠,請輸入 443。對於通訊協定,請選取 HTTPS。對於SSL憑證,請選取您ARN的SSL憑證。例如 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。對於接聽程式連接埠,請輸入 443。對於「符合條件」,請使PathPattern用值新增一個/admin/*。對於程序,請選取 admin

    Application Load Balancer 組態範例 - 新增管理規則

使用 EB 設定應用程式負載平衡器 CLI

EB CLI 會在您執eb create行時提示您選擇負載平衡器類型。

$ 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 命名空間內的設定。

範例 .ebextension/. alb-access-logs 配置

下列組態檔案可讓您使用 Application Load Balancer 上傳環境的存取日誌。

option_settings: aws:elbv2:loadbalancer: AccessLogsS3Bucket: amzn-s3-demo-bucket AccessLogsS3Enabled: 'true' AccessLogsS3Prefix: beanstalk-alb
範例
.ebextension/. alb-default-process 配置

下列的組態檔案會修改預設程序的運作狀態檢查與黏著度設定。

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'
範例 .ebextension/. alb-secure-listener 配置

下列的組態檔案在連接埠 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
範例 .ebextension/. alb-admin-rule 配置

下列的組態檔案新增了具備使用 /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