為什麼我的 Amazon ECS 容器執行個體與 Amazon Linux 1 AMI 中斷連線?

2 分的閱讀內容
0

我的 Amazon Elastic Container Service (Amazon ECS) 的容器執行個體已中斷連線。

簡短說明

您的 Amazon ECS 容器代理程式每小時可能會連線並重新連線數次。這些更改事件是正常的,不是引起關注的原因。

但是,如果容器代理程式仍處於中斷連線狀態,則容器執行個體無法作為 ECS 叢集的一部分運作。當 agentConnected 傳回 false 時,代理程式會中斷連線。這個問題可能是由以下原因造成的:

  • 網路問題會阻止執行個體與 Amazon ECS 之間的通訊。
  • 容器代理程式沒有與 Amazon ECS 端點通訊所需的 AWS 身分和存取管理 (IAM) 許可。
  • 容器執行個體內的主機或 Docker 服務發生問題。

若要找出中斷連線的原因,請完成以下步驟。

解決方法

**注意:**下列解決方法適用於 Amazon ECS 最佳化的 Amazon Linux 1 AMI。如需適用於 Amazon ECS 最佳化的 Amazon Linux 2 AMI 的解決方案,請參閱如何對已中斷連線的 Amazon ECS 代理程式進行疑難排解?

確認 Docker 服務是否在容器執行個體上執行

1.若要確認 Docker 服務是否在受影響的容器執行個體上執行,請執行下列命令:

sudo service docker status

命令輸出類似於以下內容:

docker (pid 23013) is running...

如果 Docker 服務未執行,或者您需要重新啟動服務,請執行下列命令:

sudo service docker restart

注意:服務已在執行中時,請勿輸入此命令。首先,請確認將容器執行個體設定為正在排空狀態。然後,重新啟動 Docker 服務,以便在另一個容器執行個體上排程的現有任務。

命令輸出必須包含以下幾行:

Stopping docker: [  OK  ]
Starting docker: [  OK  ]

**注意:**若要確認 Docker 服務是否在重新啟動命令之後執行,請執行 sudo 服務 Docker 狀態命令。

2.若要啟動 ECS 代理程式,請執行下列命令:

sudo start ecs

確認容器代理程式正在容器執行個體上執行

若要確認容器代理程式是否在受影響的容器執行個體上執行,請執行下列命令:

sudo status ecs

如果容器代理程式未在容器執行個體上執行,請執行下列命令以啟動代理程式:

sudo start ecs

命令輸出類似於以下內容:

ecs start/running, process 23403

檢閱容器代理程式和 Docker 的日誌檔案

如果容器執行個體仍未中斷連線,請檢閱容器主機上的容器代理程式和 Docker 的日誌檔案。

若要輸出容器代理程式和 Docker 的日誌檔案,請執行下列命令:

sudo cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**
sudo cat /var/log/docker

**注意:**若要從容器執行個體收集日誌資訊,請執行 Amazon ECS 日誌收集器

確認 IAM 執行個體設定檔具有必要的許可

如果容器代理程式仍中斷連線,請確認與容器執行個體相關聯的 IAM 執行個體設定檔具有必要的 IAM 許可。

1.使用 SSH 連線至執行個體

2.若要檢視與執行個體相關聯之執行個體設定檔上的執行個體中繼資料,請執行下列命令:

curl http://169.254.169.254/latest/meta-data/iam/info

命令輸出類似於以下內容:

{
  "Code" : "Success",
  "LastUpdated" : "2019-06-29T15:47:03Z",
  "InstanceProfileArn" : "arn:aws:iam::1122334455:instance-profile/ecsInstanceRole",
  "InstanceProfileId" : "AIPAJ5WF3LZVY7PLUHV72"
}

3.確認 IAM 角色包含容器執行個體的正確許可

4.若要使用容器代理程式驗證特定憑證錯誤,請執行下列命令以檢查容器代理程式日誌中的 ECS 日誌清單:

cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**

**注意:**容器代理程式日誌檔案每小時輪換一次,尾碼會自動變更以反映目前的日期和時間。更新命令以包含發生問題時的日期範圍和日誌 ID。

如果容器代理程式沒有必要的憑證,您會在日誌中收到類似下列內容的錯誤訊息:

2019-06-29T16:10:09Z [ERROR] Unable to register as a container instance with ECS: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster
    status code: 400, request id: 0b73e260-5088-4688-a425-6f35f1ef440f
2019-06-29T16:10:09Z [ERROR] Error re-registering: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster
    status code: 400, request id: 0b73e260-5088-4688-a425-6f35f1ef440f

其他幫助

如果您無法透過此解決方案找出 ECS 容器執行個體的問題,請聯絡進階支援尋求協助。首先,使用 Amazon ECS 日誌收集器建立執行個體日誌的存檔。然後,將日誌附加到支援票證,以幫助支持工程師對問題進行疑難排解。


相關資訊

Amazon ECS 疑難排解

Amazon ECS 容器代理程式

Amazon ECS 容器執行個體 IAM 角色

Amazon ECS 日誌檔案位置

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