本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
擴展 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 會在變更擴展設定時記錄環境事件,因此環境的事件串流會顯示擴展變更何時生效。