View a markdown version of this page

擴展 Beanstalk 叢集環境 - AWS Elastic Beanstalk

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

擴展 Beanstalk 叢集環境

Beanstalk 叢集環境會透過變更其執行的應用程式複本數量來擴展。複本是容器映像的執行中複本。Amazon EKS 會提供這些複本所需的節點容量,並新增或移除節點以符合它們,因此您可以調整應用程式的大小,而不是執行個體機群的大小。

這是 Beanstalk Standard 的主要差異,它會擴展 Amazon EC2 執行個體的 Auto Scaling 群組。aws:autoscaling:* 命名空間不適用於 Beanstalk 叢集環境。擴展是透過 aws:elasticbeanstalk:eks:environment:autoscaling 命名空間及其子命名空間來設定。如需每個選項及其接受的值,請參閱 Beanstalk 叢集環境的組態選項。

設定複本邊界

兩個選項將複本計數繫結: min-replica和 max-replica,兩者都在aws:elasticbeanstalk:eks:environment:autoscaling命名空間中。Elastic Beanstalk 會保留它們之間的複本計數。

將兩個選項設定為相同的值,以執行固定數量的複本。設定max-replica高於 min-replica ,讓環境在兩者之間擴展。環境一律執行至少一個複本,因為 min-replica接受 1作為其最低值。

$ aws elasticbeanstalk update-environment \ --environment-name my-cluster-env \ --option-settings \ Namespace=aws:elasticbeanstalk:eks:environment:autoscaling,OptionName=min-replica,Value=2 \ Namespace=aws:elasticbeanstalk:eks:environment:autoscaling,OptionName=max-replica,Value=20

Elastic Beanstalk 如何決定何時擴展

在這些邊界中,一或多個觸發會決定複本計數。Elastic Beanstalk 會根據polling-interval設定的間隔來評估觸發條件。當觸發停止報告活動時,Elastic Beanstalk 會等待cooldown-period設定的期間,再將環境縮減,讓短暫的 lull 不會再次移除即將需要的複本。

如果您完全沒有設定觸發,環境會根據其複本的 CPU 使用率進行擴展。其餘章節說明您可以改為設定的觸發條件。

在 CPU 或記憶體上擴展

若要擴展複本使用的資源,請在aws:elasticbeanstalk:eks:environment:autoscaling:trigger命名空間中設定指標類型和目標值。Elastic Beanstalk 新增或移除複本,讓環境靠近您設定的目標。

  • 針對 CPU,設定 cpu-metric-type和 cpu-value。

  • 對於記憶體,請設定 memory-metric-type和 memory-value。

的指標類型Utilization會將值視為複本透過 cpu和 memory選項保留的百分比,因此 cpu-value75的目標為預留 CPU 的 75%。指標類型會將值AverageValue視為每個複本的絕對數量。

您可以在一個環境中同時設定 CPU 和記憶體觸發條件。

$ aws elasticbeanstalk update-environment \ --environment-name my-cluster-env \ --option-settings \ Namespace=aws:elasticbeanstalk:eks:environment:autoscaling:trigger,OptionName=cpu-metric-type,Value=Utilization \ Namespace=aws:elasticbeanstalk:eks:environment:autoscaling:trigger,OptionName=cpu-value,Value=75

依排程擴展

若要在週期性時段執行所選數量的複本,請將 scaler-type 設定為 ,cron並在 中描述該時段scaler-metadata,該時段需要具有四個欄位的 JSON 物件。

欄位 說明
timezone 視窗以 IANA 時區名稱表示的時區,例如 UTC、 America/New_York或 Asia/Tokyo。
start 當視窗開啟時,以五個欄位 Cron 表達式表示 (分鐘、小時、月日、月日、週日)。
end 當視窗關閉時,使用相同的格式。
desiredReplicas 視窗開啟時要執行的複本數量。在 min-replica和 max-replica 邊界內選擇一個值。

在視窗外,環境會返回 min-replica。下列範例會在 UTC 的工作日工作時間內執行五個複本:

$ cat schedule.json [ { "Namespace": "aws:elasticbeanstalk:eks:environment:autoscaling:trigger", "OptionName": "scaler-type", "Value": "cron" }, { "Namespace": "aws:elasticbeanstalk:eks:environment:autoscaling:trigger", "OptionName": "scaler-metadata", "Value": "{\"timezone\":\"UTC\",\"start\":\"0 8 * * 1-5\",\"end\":\"0 18 * * 1-5\",\"desiredReplicas\":\"5\"}" } ] $ aws elasticbeanstalk update-environment \ --environment-name my-cluster-env \ --option-settings file://schedule.json

環境需要一個排程。若要變更多個時段的複本計數,例如不同的週末排程,請將排程與另一個觸發程序結合,如中所述結合觸發條件。

注意

這些設定會放入檔案中,因為scaler-metadata值本身就是 JSON 文件。如需 AWS CLI 接受的表單--option-settings,請參閱《》中的使用速記語法 AWS CLI。

從您自己的端點擴展指標

若要擴展您自己的服務報告的值,例如佇列深度或傳輸中任務計數,請將 scaler-type設定為 metrics-api。Elastic Beanstalk 會讀取您提供的 HTTP 端點,並根據其找到的數量進行擴展。描述 中的端點scaler-metadata。

欄位 說明
url Elastic Beanstalk 讀取的端點。
valueLocation 數字位於 JSON 回應中的位置,做為虛線路徑。對於 的回應內文{"data":{"result":[{"value":"500"}]}},位置為 data.result.0.value。
targetValue 預期一個複本要處理的數量。

Elastic Beanstalk 會將報告的值除以 targetValue,然後四捨五入以取得複本計數,然後將該計數保留在您的複本邊界內。使用 targetValue的 100,報告的 值500會要求五個複本。

您可以在自己的環境中指向觸發條件。由於環境的 URL 只有在啟動後才為已知,因此請在更新url中設定 ,而不是在建立時間設定 。

下列範例會根據應用程式報告的深度進行擴展,每 100 個報告的工作單位有一個複本:

$ cat trigger.json [ { "Namespace": "aws:elasticbeanstalk:eks:environment:autoscaling:trigger", "OptionName": "scaler-type", "Value": "metrics-api" }, { "Namespace": "aws:elasticbeanstalk:eks:environment:autoscaling:trigger", "OptionName": "scaler-metadata", "Value": "{\"url\":\"https://my-service.example.com/queue-depth\",\"valueLocation\":\"data.result.0.value\",\"targetValue\":\"100\"}" } ] $ aws elasticbeanstalk update-environment \ --environment-name my-cluster-env \ --option-settings file://trigger.json

驗證端點

如果您的端點需要登入資料,請將它們存放在 AWS Secrets Manager 秘密中,並scaler-auth-secret設定為秘密的 ARN。您只能在 scaler-type為 時進行設定metrics-api。scaler-auth-mode 設定為端點預期的結構描述。秘密的值是金鑰相依於該結構描述的 JSON 物件。

身分驗證方式 秘密中的必要金鑰
bearer,預設值 token
basic username 和 password
apiKey apiKey
tls ca、cert 與 key

同時設定環境application-role的選項。Elastic Beanstalk 會透過環境的 Pod Identity 將登入資料掛載到您的複本,只有在設定 application-role 時才會存在。如果沒有它,掛載會失敗,而且複本不會啟動。排程觸發不需要,而且指標端點也不需要登入資料。

環境的應用程式角色會讀取秘密,因此請在秘密的 ARN secretsmanager:GetSecretValuesecretsmanager:DescribeSecret上同時授予秘密和 。Elastic Beanstalk 會排程重新整理登入資料,重新整理會檢查秘密的目前版本,因此授與的環境只會正常GetSecretValue啟動,然後在每次稍後重新整理時失敗。如需 Beanstalk 叢集環境使用的角色,請參閱 Beanstalk 叢集的許可。

此秘密與向您的應用程式提供秘密secrets的選項不同。變更 的值會scaler-auth-secret取代環境的複本,因為登入資料會在複本啟動時掛載。

結合觸發條件

環境需要一個事件驅動觸發,可以是排程或端點指標,因為 scaler-type和 scaler-metadata描述單一觸發。它可以同時攜帶 CPU 和記憶體觸發條件。

在結合兩種行為之前,請務必先了解兩種行為:

  • 設定 會scaler-type取代 中所述的預設 CPU 擴展Elastic Beanstalk 如何決定何時擴展。若要在 CPU 上繼續擴展,請設定 cpu-metric-type並cpu-value明確地進行擴展。

  • 當套用多個觸發時,最高的複本計數會獲勝。要求五個複本的排程,以及要求三個複本的 CPU 觸發程序,會產生五個。

將排程與 CPU 觸發條件配對是常見的組合:排程會攜帶您在忙碌時間內預期的複本計數,而 CPU 觸發條件會在剩餘的時間內保持可用。

觀看環境擴展

Elastic Beanstalk 主控台中的環境監控頁面會顯示應用程式複本計數圖表,報告環境隨時間執行的複本。將其與 CPU (核心) 和記憶體 (位元組) 圖形進行比較,會顯示觸發是否保留其目標。如需 Beanstalk 叢集環境報告的運作狀態和指標,請參閱 監控 Beanstalk 叢集環境。

Elastic Beanstalk 會在變更擴展設定時記錄環境事件,因此環境的事件串流會顯示擴展變更何時生效。