本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對 Elastic Beanstalk 環境進行故障診斷
本章提供對 Elastic Beanstalk 環境進行故障診斷的指引。其會提供下列資訊:
-
AWS Systems Manager 工具的簡介,以及執行預先定義 Elastic Beanstalk 執行手冊的程序,該手冊會輸出故障診斷步驟和建議。
-
如果您的環境狀態下降,您可以採取的動作以及您可以檢視的資源的一般指引。
-
依主題類別提供更具體的故障診斷提示。
注意
如果環境的運作狀態變更為紅色,建議您先使用包含預先定義執行手冊的 AWS Systems Manager 工具,對 Elastic Beanstalk 進行故障診斷。如需詳細資訊,請參閱 使用 Systems Manager 工具。
主題
使用 AWS Systems Manager Elastic Beanstalk Runbook
可以使用 Systems Manager 對 Elastic Beanstalk 環境進行故障診斷。為了協助您快速開始使用,Systems Manager 為 Elastic Beanstalk 提供預先定義的自動化執行手冊。自動化執行手冊是一種 Systems Manager 文件類型,它定義要對環境的執行個體和其他 AWS 資源執行的操作。
文件 AWSSupport-TroubleshootElasticBeanstalk
是一個自動化執行手冊,旨在幫助識別可能讓 Elastic Beanstalk 環境降級的許多常見問題。為此,它會檢查環境的元件,包括下列項目:EC2 執行個體、VPC、 AWS CloudFormation 堆疊、負載平衡器、Auto Scaling 群組,以及與安全群組規則、路由表和 ACL 相關聯的網路組態。
它也提供從您的環境中將綁定的日誌檔案上傳至 AWS Support 的選項。
如需詳細資訊,請參閱 AWS Systems Manager
Automation Runbook 參考 中的 AWSSupport-TroubleshootElasticBeanstalk
。
使用 Systems Manager 執行 AWSSupport-TroubleshootElasticBeanstalk
執行手冊
注意
在 Elastic Beanstalk 環境所在的相同 AWS 區域 中執行此程序。
-
開啟 AWS Systems Manager
主控台。 -
在導覽窗格的變更管理區段中,選擇自動化。
-
選擇 Execute automation (執行自動化)。
-
在由 Amazon 擁有索引標籤的自動化文件搜尋方塊中,輸入
AWSSupport-TroubleshootElasticBeanstalk
。 -
選取 AWSSupport-TroubleshootElasticBeanstalk 卡,然後選擇下一步。
-
選取執行。
-
在輸入參數區段中:
-
從自動化擔任角色下拉式清單中,選取允許 Systems Manager 代表您執行動作的角色的 ARN。
-
在應用程式名稱中,輸入 Elastic Beanstalk 應用程式的名稱。
-
在環境名稱中,輸入 Elastic Beanstalk 環境。
-
(選用) 對於 S3UploaderLink,如果 AWS 支援工程師已為您提供日誌收集的 S3 連結,請輸入連結。
-
-
選擇 Execute (執行)。
如果有任何步驟失敗,請在步驟 ID 欄下選取失敗步驟的連結。這會顯示步驟的執行詳細資訊頁面。驗證錯誤訊息區段會顯示需要注意的步驟摘要。例如,
IAMPermissionCheck
可能會顯示警告訊息。在這種情況下,您可以檢查在自動化擔任角色下拉式清單中選取的角色是否有必需的許可。
順利完成所有步驟之後,輸出會提供故障診斷步驟和建議,以將您的環境還原至健康狀態。
疑難排解 Elastic Beanstalk 環境的一般指引
錯誤訊息可以顯示在主控台的「事件」頁面中、日誌中或「運作狀態」頁面中。您也可以採取行動,從最近變更所導致的降級環境中復原。如果您環境的健全狀態變更為紅色,請嘗試進行下列動作:
-
如果環境中的 操作傳回包含文字 的錯誤
The stack
,請參閱 從無效狀態復原您的 Elastic Beanstalk 環境 以取得故障診斷說明。
associated with environmentstack_id
is inenvironment-ID
statestack-status
-
如果環境中的操作傳回包含文字 的錯誤
Environment
,請終止您的環境並建立另一個環境。environment-name
associated CloudFormation stackstack_arn
does not exist -
檢閱最近的環境事件。由 Elastic Beanstalk 所提供的關於部署、載入和設定問題的訊息,經常會出現在此處。
-
檢閱最近的環境變更歷史記錄。變更歷史記錄會列出對您環境所做的所有組態變更,並包括其他資訊,例如哪些 IAM 使用者進行變更,以及設定了哪些組態參數。
-
叫出日誌來檢視最近的日誌檔案項目。Web 伺服器的日誌包含了關於傳入要求和錯誤的資訊。
-
連線到執行個體,並檢查系統資源。
-
轉返到應用程式先前運作中的版本。
-
還原最近的組態變更,或恢復儲存的組態。
-
部署新的環境。如果環境顯示為健全,請執行 CNAME 交換,將流量路由至新的環境,並繼續針對之前的環境來進行除錯。
使用環境變數存取秘密和參數的環境
事件:執行個體部署無法取得一或多個秘密
此訊息表示 Elastic Beanstalk 無法擷取應用程式部署期間指定的一或多個秘密。
-
檢查環境變數組態中 ARN 值指定的資源是否存在。
-
確認您的 Elastic Beanstalk EC2 執行個體描述檔角色具有存取資源所需的 IAM 許可。
-
如果此事件是透過
RestartAppServer
操作觸發,一旦問題已修正,請重試RestartAppServer
呼叫以解決問題。 -
如果事件是透過
UpdateEnvironment
呼叫觸發,請重試UpdateEnvironment
操作。
如需這些命令的範例,請參閱 AWS CLI Elastic Beanstalk 的範例。如需這些操作 API 動作的詳細資訊,請參閱 AWS Elastic Beanstalk API 參考。
事件:執行個體部署偵測到一或多個多行環境值,此平台不支援這些值
Amazon Linux 2 平台不支援多行變數,但 Docker 和 ECS 受管 Docker 平台除外。如需繼續可用的選項,請參閱 多行值。
事件:指定秘密時 CreateEnvironment 失敗
當 CreateEnvironment
失敗且您有秘密做為環境變數時,您需要解決基礎問題,然後使用 UpdateEnvironment
來完成環境設定。請勿使用 RestartAppServer
,因為在這種情況下環境將無法啟動。如需這些命令的範例,請參閱 AWS CLI Elastic Beanstalk 的範例。如需這些操作 API 動作的詳細資訊,請參閱 AWS Elastic Beanstalk API 參考。
建立環境並啟動執行個體
事件:啟動環境失敗
當 Elastic Beanstalk 嘗試啟動環境卻遭遇失敗,就會發生此事件。Events (事件) 頁面上的過去事件將提醒您此問題的根源。
事件:建立環境操作已完成,但出現命令逾時。嘗試增加逾時期間。
若您使用的組態檔案會在執行個體上執行命令、下載大型檔案或安裝套件,部署您的應用程式可能會花費較長時間。增加命令逾時,讓應用程式在部署期間有更多時間來啟動。
事件:下列資源建立失敗:[AWSEBInstanceLaunchWaitCondition]
此訊息表示您環境的 Amazon EC2 執行個體未與成功啟動的 Elastic Beanstalk 進行通訊。若執行個體沒有網際網路連線,本情況就可能會發生。若您已將環境設定為在私有 VPC 子網路中啟動執行個體,請確認子網路具備 NAT,以允許執行個體連接至 Elastic Beanstalk。
事件:本區域需要服務角色。請將「服務角色」選項新增至環境。
Elastic Beanstalk 會使用服務角色來監控環境中的資源,並支援受管平台更新。如需詳細資訊,請參閱管理 Elastic Beanstalk 服務角色。
部署
問題:部署期間無法使用應用程式
由於 Elastic Beanstalk 使用便利的升級程序,因此可能會出現幾秒鐘的停機時間。使用滾動部署將部署對您生產環境的影響降到最低。
事件:無法建立 AWS Elastic Beanstalk 應用程式版本
您的應用程式原始碼套件可能過於龐大,或者您可能已達到應用程式版本配額。
事件:更新環境操作已完成,但出現命令逾時。嘗試增加逾時期間。
若您使用的組態檔案會在執行個體上執行命令、下載大型檔案或安裝套件,部署您的應用程式可能會花費較長時間。增加命令逾時,讓應用程式在部署期間有更多時間來啟動。
醫療保健
事件:CPU 使用率超過 95.00%
嘗試執行更多執行個體,或選擇不同的執行個體類型。
事件:Elastic Load Balancer awseb- myapp
沒有運作狀態良好的執行個體
若您的應用程式似乎正在運作,請確認應用程式的運作狀態檢查 URL 正確設定。如非此情況,請檢查運作狀態畫面及環境日誌以取得更多資訊。
事件:無法找到 Elastic Load Balancer awseb-myapp
您環境的負載平衡器可能已從外部移除。使用組態選項及 Elastic Beanstalk 提供的擴充功能,僅變更您環境的資源。重建您的環境或啟動新的環境。
事件:EC2 執行個體啟動失敗。等待新的 EC2 執行個體啟動…
您環境執行個體類型的可用性可能較低,或者您已達到帳戶的執行個體配額。檢查服務運作狀態儀表板
組態
事件:與環境
相關聯的堆疊stack_id
處於 environment-ID
狀態stack-status
您環境的基礎 AWS CloudFormation 堆疊可能處於 *_FAILED 狀態。必須修復此狀態,才能在您的環境中繼續 Elastic Beanstalk 操作。如需詳細資訊,請參閱從無效狀態復原您的 Elastic Beanstalk 環境。
事件:您無法為 Elastic Beanstalk 環境設定 Elastic Load Balancing Target 選項與應用程式運作狀態檢查 URL 選項的數值
Target
命名空間的 aws:elb:healthcheck
選項已作廢。請自環境移除 Target
選項命名空間,然後再嘗試更新。
事件:ELB 無法連接到相同 AZ 中的多個子網路
若您嘗試在相同可用區域的子網路間移動負載平衡器,將出現此訊息。變更負載平衡器上的子網路,需要將其移出原始可用區域,然後將所需子網路移回原始可用區域。在此過程中,所有執行個體將於 AZ 內遷移,會產生重大停機時間。否則,請考慮建立新的環境,並執行 CNAME 交換。
Docker 容器故障診斷
事件:無法擷取 Docker 映像檔:最新的:無效的儲存庫名稱 (),僅允許 [a-z0-9-_.]。針對日誌執行 tail 指令以取得詳細資訊。
使用 JSON 驗證程式來檢查 dockerrun.aws.json
檔案的語法。另外也請根據 準備 Docker 映像以部署至 Elastic Beanstalk 中所說明的要求,來驗證 dockerfile 的內容
事件:Dockerfile 中找不到 EXPOSE 指令,請中止部署
Dockerfile
或 dockerrun.aws.json
檔案並未宣告容器的通訊埠。使用 EXPOSE
指令 (Dockerfile
) 或 Ports
區塊 (dockerrun.aws.json
檔案) 來公開傳入資料用的通訊埠。
事件: 無法從儲存貯體名稱
下載身分驗證登入資料儲存庫
dockerrun.aws.json
為 .dockercfg
檔案提供了無效的 EC2 金鑰對和/或 S3 儲存貯體。或者,執行個體描述檔不具有 S3 儲存貯體適用的 GetObject 授權。請確認 .dockercfg
檔案包含有效的 S3 儲存貯體和 EC2 金鑰對。針對執行個體描述檔中的 IAM 角色,授予動作 s3:GetObject
的許可。如需詳細資訊,請參閱 管理 Elastic Beanstalk 執行個體描述檔
事件:活動執行失敗,原因:警告:無效的授權組態檔案
您的身分驗證檔案 (config.json
) 格式不正確。請參閱在 Elastic Beanstalk 中使用私有儲存庫中的映像
常見問答集
問:如何將我的應用程式 URL 自 myapp.us-west-2.elasticbeanstalk.com 變更為 www.myapp.com?
在 DNS 伺服器,註冊 CNAME 記錄,例如 www.mydomain.com CNAME
mydomain.elasticbeanstalk.com
。
問:如何為我的 Elastic Beanstalk 應用程式指定特定的可用區域?
您可使用 API、CLI、Eclipse 外掛程式或 Visual Studio 外掛程式,挑選特定的可用區域。如需有關使用 Elastic Beanstalk 主控台來指定可用區域的詳細資訊,請參閱Auto Scaling 您的 Elastic Beanstalk 環境執行個體。
問:如何變更我的環境內的執行個體類型?
若要變更環境的執行個體類型,請移至環境組態頁面,並在執行個體組態類別中選擇編輯。然後,選擇新的執行個體類型,然後選擇 Apply (套用) 以更新您的環境。在此之後,Elastic Beanstalk 會終止所有執行中的執行個體,並取代為新的執行個體。
問:如何判斷是否有人對環境做出組態變更?
若要查看此資訊,請在 Elastic Beanstalk 主控台的導覽窗格中,選擇 Change history (變更歷史記錄) 以顯示所有環境的組態變更清單。此清單包括變更的日期和時間、變更的目標組態參數和值,以及做出變更的 IAM 使用者。如需詳細資訊,請參閱變更歷史記錄。
問:能否在執行個體終止時,防止 Amazon EBS 磁碟區遭到刪除?
您環境的執行個體使用 Amazon EBS 來儲存,然而,當 Auto Scaling 終止執行個體時,根磁碟區將遭到刪除。不建議將狀態或其他資料存放於您的執行個體。如有需要,您可以使用 來防止磁碟區遭到刪除 AWS CLI:$ aws ec2 modify-instance-attribute -b '/dev/sdc=<vol-id>:false
如 AWS CLI 參考中所述。
問:如何從我的 Elastic Beanstalk 應用程式刪除個人資訊?
AWS Elastic Beanstalk 應用程式使用的資源可能會儲存個人資訊。當您終止環境時,Elastic Beanstalk 會終止其建立的所有資源。使用組態檔案所新增的資源也會終止。不過,如果您在 Elastic Beanstalk 環境外建立 AWS 資源,並將其與您的應用程式建立關聯,您可能需要手動檢查應用程式可能儲存的個人資訊是否未保留。在這整個開發人員指南中,我們無論何時討論建立其他資源,都會提及何時應該考慮刪除。
常見錯誤
此主題列出了在使用 EB CLI 時常見的錯誤訊息,以及可能的解決方法。如果您遇到此處未顯示的錯誤訊息,請利用意見回饋連結告知我們。
錯誤:處理 git 命令時發生錯誤。錯誤代碼:128 錯誤:嚴重:不是有效的物件名稱 HEAD
原因:當您將 Git 儲存庫初始化但尚未執行遞交時,會顯示此錯誤訊息。當您的專案資料夾包含 Git 儲存庫時,EB CLI 會尋找 HEAD 修訂版。
解決方法:在您的專案資料夾中,將檔案新增至整備區,然後執行遞交:
~/my-app$ git add .
~/my-app$ git commit -m "First commit"
錯誤:此分支沒有預設環境。您必須輸入「eb 狀態 my-env-name」來指定環境,或輸入「eb use my-env-name」來設定預設環境。
原因:當您在 git 中建立新的分支時,該分支預設不會連接到 Elastic Beanstalk 環境。
解決方法:執行 eb list 來查看可用環境的清單。然後執行 eb use env-name
,以使用其中一個可用的環境。
錯誤:2.0+ 平台需要服務角色。您可以提供 --service-role 選項
原因:如果您使用 eb create (例如 eb create my-env) 來指定環境名稱,則 EB CLI 不會試著為您建立服務角色。如果不具有預設服務角色,將會顯示上述的錯誤。
解決方法:執行 eb create 而不指定環境名稱,然後再依照提示來建立預設的服務角色。
部署錯誤
您的 Elastic Beanstalk 部署可能會以 404 (如果您的應用程式無法啟動) 或 500 (如果您的應用程式在執行時間失敗) 回應來回應。若要疑難排解許多常見問題,您可以使用 EB CLI 來檢查部署狀態、檢視其日誌、使用 SSH 存取 EC2 執行個體,或開啟應用程式環境的 AWS 管理主控台頁面。
若要使用 EB CLI 來協助排除部署的問題
-
執行 eb status 以查看目前部署作業的狀態和 EC2 主機的健全狀況。例如:
$
eb status --verbose
Environment details for: python_eb_app Application name: python_eb_app Region: us-west-2 Deployed Version: app-150206_035343 Environment ID: e-wa8u6rrmqy Platform: 64bit Amazon Linux 2014.09 v1.1.0 running Python 2.7 Tier: WebServer-Standard- CNAME: python_eb_app.elasticbeanstalk.com Updated: 2015-02-06 12:00:08.557000+00:00 Status: Ready Health: Green Running instances: 1 i-8000528c: InService注意
使用
--verbose
條件判斷式,來提供關於執行中執行個體狀態的資訊。如果未使用此條件判斷式,eb status 只會列出關於您環境的一般資訊。 -
執行 eb health 來檢視關於您環境的健全狀況資訊:
$
eb health --refresh
elasticBeanstalkExa-env Degraded 2016-03-28 23:13:20 WebServer Ruby 2.1 (Puma) total ok warning degraded severe info pending unknown 5 2 0 2 1 0 0 0 instance-id status cause Overall Degraded Incorrect application version found on 3 out of 5 instances. Expected version "Sample Application" (deployment 1). i-d581497d Degraded Incorrect application version "v2" (deployment 2). Expected version "Sample Application" (deployment 1). i-d481497c Degraded Incorrect application version "v2" (deployment 2). Expected version "Sample Application" (deployment 1). i-136e00c0 Severe Instance ELB health has not been available for 5 minutes. i-126e00c1 Ok i-8b2cf575 Ok instance-id r/sec %2xx %3xx %4xx %5xx p99 p90 p75 p50 p10 Overall 646.7 100.0 0.0 0.0 0.0 0.003 0.002 0.001 0.001 0.000 i-dac3f859 167.5 1675 0 0 0 0.003 0.002 0.001 0.001 0.000 i-05013a81 161.2 1612 0 0 0 0.003 0.002 0.001 0.001 0.000 i-04013a80 0.0 - - - - - - - - - i-3ab524a1 155.9 1559 0 0 0 0.003 0.002 0.001 0.001 0.000 i-bf300d3c 162.1 1621 0 0 0 0.003 0.002 0.001 0.001 0.000 instance-id type az running load 1 load 5 user% nice% system% idle% iowait% i-d581497d t2.micro 1a 25 mins 0.16 0.1 7.0 0.0 1.7 91.0 0.1 i-d481497c t2.micro 1a 25 mins 0.14 0.1 7.2 0.0 1.6 91.1 0.0 i-136e00c0 t2.micro 1b 25 mins 0.0 0.01 0.0 0.0 0.0 99.9 0.1 i-126e00c1 t2.micro 1b 25 mins 0.03 0.08 6.9 0.0 2.1 90.7 0.1 i-8b2cf575 t2.micro 1c 1 hour 0.05 0.41 6.9 0.0 2.0 90.9 0.0 instance-id status id version ago deployments i-d581497d Deployed 2 v2 9 mins i-d481497c Deployed 2 v2 7 mins i-136e00c0 Failed 2 v2 5 mins i-126e00c1 Deployed 1 Sample Application 25 mins i-8b2cf575 Deployed 1 Sample Application 1 hour上述範例顯示了具有 5 個執行個體的環境,其中在第 3 個執行個體上的「v2」版本部署作業已失敗。在部署失敗之後,預期的版本會重設為已經成功的最新版本,在此例中為第一個部署作業的「範例應用程式」。如需詳細資訊,請參閱使用 EB CLI 來監控環境運作狀態。
-
執行 eb logs,以下載和檢視與您應用程式部署相關的日誌。
$
eb logs
-
執行 eb ssh,以連線到執行您應用程式的 EC2 執行個體,並直接對此執行個體進行檢查。在執行個體上,您所部署的應用程式會出現在
/opt/python/current/app
目錄中,而您的 Python 環境將會出現在/opt/python/run/venv/
中。 -
執行 eb console,以在 AWS 管理主控台
上檢視您的應用程式環境。您可以使用 Web 介面,來輕鬆地檢查部署作業的各種面向,包括應用程式的組態、狀態、事件和日誌。您也可以下載已部署到伺服器的目前或過去的應用程式版本。