如何疑難排解嘗試啟動時停止或終止的 Amazon EC2 執行個體?

2 分的閱讀內容
0

當我嘗試啟動我的 Amazon Elastic Compute Cloud(Amazon EC2)執行個體時,它終止或無法啟動。

簡短描述

以下是 Amazon EC2 執行個體 InternalError(內部錯誤訊息)的最常見原因:

  • 您的 Amazon Elastic Block Store(Amazon EBS)磁碟區未正確連接至執行個體。
  • 連接至執行個體的 EBS 磁碟區處於錯誤狀態。
  • 加密的 EBS 磁碟區連接至執行個體。

如果執行個體未啟動且未顯示錯誤代碼,請在 AWS Command Line Interface(AWS CLI)中執行 describe-instances 命令。然後,指定執行個體 ID。檢查命令在 JSON 回應中傳回的 StateReason(狀態原因)訊息。

**注意:**在 AWS CLI 中輸入所有命令。如果您在執行 AWS CLI 命令時收到錯誤訊息,請確定您使用的是最新版本的 AWS CLI

解決方法

EBS 磁碟區未正確連接至執行個體

必須以 /dev/sda1/dev/xvda 的形式將 EBS 根磁碟區連接至執行個體,具體取決於 API 中定義的磁碟區。不能擁有具有重複或衝突裝置名稱的第二個 EBS 磁碟區。否則,您無法停止或啟動執行個體。區塊型儲存裝置名稱衝突只會影響以 XenN 為基礎的執行個體類型(c4、m4、t2 等)。區塊型儲存裝置名稱衝突不會影響以 Nito 為基礎的執行個體(c5、m5、t3 等)。

  1. 運行 describe-instances API 以驗證 StateReason(狀態原因)錯誤消息和錯誤代碼:
$ aws ec2 describe-instances --instance-id i-xxxxxxxxxxxxxxx --region us-east-1 --query "Reservations[].Instances[].{StateReason:StateReason}" --output json

**注意:**將 us-east-1 取代為您的 AWS Region。將 i-xxxxxxxxxxxxxxx 取代為您的執行個體 ID。

如果裝置名稱發生衝突,您會看到類似下列訊息的輸出:

[
    [{
        "StateReason": {
            "Code": "Server.InternalError",
            "Message": "Server.InternalError: Internal error on launch"
        }
    }]
]
  1. 開啟 Amazon EC2 主控台,然後選取您無法啟動的執行個體。

  2. Description(描述)索引標籤上,確認 Block devices(區塊型儲存裝置) 中列出的裝置名稱。Block devices(區塊型儲存裝置) 欄位會顯示已連接磁碟區的所有裝置名稱。

  3. 確認根裝置已正確連接,且沒有列出相同名稱或名稱衝突的裝置

  4. 如果裝置具有重複或衝突的裝置名稱,請中斷連接衝突的磁碟區並重新命名。然後,以更新的裝置名稱重新連接磁碟區

連接的 EBS 磁碟區處於錯誤狀態

  1. 運行 describe-instances API 以驗證 StateReason(狀態原因)錯誤消息和錯誤代碼:
$ aws ec2 describe-instances --instance-id i-xxxxxxxxxxxxxxx --region us-east-1 --query "Reservations[].Instances[].{StateReason:StateReason}" --output json

**注意:**將 us-east-1 取代為您的 AWS Region。將 i-xxxxxxxxxxxxxxx 取代為您的執行個體 ID。

如果有連接的 EBS 磁碟區處於錯誤狀態,則您會看到類似下列訊息的輸出:

[
    [{
        "StateReason": {
            "Code": "Server.InternalError",
            "Message": "Server.InternalError: Internal error on launch"
        }
    }]
]
  1. 開啟 Amazon EC2 主控台,選擇 Volumes(磁碟區),然後確認 status of the volume(磁碟區狀態)是否為 error(錯誤)。根據處於錯誤狀態的磁碟區是根磁碟區還是輔助磁碟區,您的選項會有所不同。

如果處於錯誤狀態的磁碟區是輔助磁碟區,請卸離該磁碟區。您現在可以啟動執行個體。

如果處於錯誤狀態的磁碟區是根磁碟區,而您擁有該磁碟區的快照,請完成下列步驟:

卸離磁碟區

從快照建立新磁碟區

使用原始執行個體的裝置名稱將新磁碟區連接至執行個體。啟動該執行個體。

**注意:**如果您沒有處於錯誤狀態的根磁碟區的現有快照,則無法重新啟動執行個體。您必須啟動新執行個體、安裝相關應用程式,然後將其設定為取代舊執行個體。

連接的磁碟區已加密,且 AWS 身分和存取管理(IAM)許可或政策不正確

  1. 運行 describe-instances API 以驗證 StateReason(狀態原因)錯誤消息和錯誤代碼:
$ aws ec2 describe-instances --instance-id i-xxxxxxxxxxxxxxx --region us-east-1 --query "Reservations[].Instances[].{StateReason:StateReason}" --output json

**注意:**將 us-east-1 取代為您的 AWS Region。將 i-xxxxxxxxxxxxxxx 取代為您的執行個體 ID。

如果執行個體有連接的加密磁碟區,而且存在權限或政策問題,表示您收到用戶端錯誤訊息。您會看到與下列訊息類似的輸出:

[
    [{
        "StateReason": {
            "Code": "Client.InternalError",
            "Message": "Client.InternalError: Client error on launch"
        }
    }]
]
  1. 確認嘗試啟動執行個體的使用者擁有正確的 IAM 許可。如果您透過其他服務(例如 EC2 自動擴展)間接啟動執行個體,請同時驗證下列組態:

**注意:**若要驗證磁碟區是否已加密,請開啟 Amazon EC2 主控台,然後選取 Volumes(磁碟區)。加密磁碟區已在 Encryption(加密)欄中列出 Encrypted(已加密)。


相關資訊

當我使用連接的加密執行個體啟動執行個體時,執行個體立即停止並顯示錯誤"client error on launch"(啟動時客戶端錯誤)

為什麼我無法啟動 EC2 執行個體?

AWS KMS 中的金鑰政策

疑難排解執行個體啟動問題-執行個體立即終止

AWS 官方
AWS 官方已更新 1 年前