我正在嘗試使用新的 AWS Batch 功能:https://aws.amazon.com/batch/
我甚至無法運行最簡單的批次作業(使用“echo hello world”演示)。該作業一直陷入可運行狀態。
為了嘗試隔離問題,我在全新的 AWS 帳戶上使用所有預設值。
我的理解是,我不必手動啟動任何 EC2 執行個體來使用此功能,AWS Batch 應該為我執行此操作。不過,它似乎正在等待可用的 EC2 執行個體來執行該作業。難道不應該啟動一個 EC2 執行個體來自行運行該作業嗎?
提前致謝。
答案1
我注意到,當我指定具有 8000 MiB 的作業定義時,將啟動一個只有 7986MB 的實例,並且我的作業將陷入可運行狀態。
8000 MiB 等於 8388.608MB,因此看起來正在啟動的實例沒有足夠的可用記憶體來運行作業,因此它掛起。
如果我建立一個具有 7000 MiB 的作業定義,那麼我的作業將不再陷入可運行狀態,因為它仍然使用具有 7986MB 記憶體的相同實例。
答案2
批次文件中有一個故障排除指南,用於對「作業陷入可運行狀態」進行故障排除。 https://docs.aws.amazon.com/batch/latest/userguide/troubleshooting.html#job_stuck_in_runnable
如果您的運算環境包含運算資源,但您的作業不會超出 RUNNABLE 狀態,則可能存在某種原因阻止作業實際放置在運算資源上。以下是導致此問題的一些常見原因:
您的計算資源上未配置 awslogs 日誌驅動程式
AWS Batch 作業將其日誌資訊傳送至 CloudWatch Logs。若要啟用此功能,您必須設定運算資源以使用 awslogs 日誌驅動程式。如果您的運算資源 AMI 是基於 Amazon ECS 優化的 AMI(或 Amazon Linux),則預設會使用 ecs-init 套件註冊該驅動程式。如果您使用不同的基本 AMI,則必須確保在啟動 Amazon ECS 容器代理程式時使用 ECS_AVAILABLE_LOGGING_DRIVERS 環境變數將 awslogs 日誌驅動程式指定為可用日誌驅動程式。有關更多信息,請參閱計算資源 AMI 規格和建立計算資源 AMI。
資源不足
如果您的作業定義指定的 CPU 或記憶體資源多於您的運算資源可以分配的資源,那麼您的作業將永遠不會被放置。例如,如果您的作業指定 4 GiB 內存,而您的計算資源少於該內存,則作業無法放置在這些計算資源上。在這種情況下,您必須減少作業定義中指定的記憶體或為您的環境添加更大的運算資源。
已達到 Amazon EC2 執行個體限制
您的帳戶可以在 AWS 區域中啟動的 Amazon EC2 執行個體數由您的 EC2 執行個體限制決定。某些實例類型也有每個實例類型的限制。有關您帳戶的 Amazon EC2 執行個體限制的詳細資訊(包括如何要求提高限制),請參閱 Amazon EC2 使用者指南(適用於 Linux 執行個體)中的 Amazon EC2 服務限制
我發現其他非常常見的問題的原因是:
- 沒有通往互聯網的路徑
- 作業定義中的CPU/記憶體高於實例
- 實例未註冊到ECS集群
- 代理已斷開連接 -https://aws.amazon.com/premiumsupport/knowledge-center/ecs-agent-disconnected/
您可以採取的其他故障排除步驟:
- 在叢集中手動啟動關聯的 ECS 任務定義
- SSH 並嘗試從容器執行個體內部執行 docker
- 從容器實例內部 Curl ECS 和 Batch 端點
- 消除作業定義上的 CPU/記憶體限制
- 查看 /etc/ecs/ecs.config
- 取得ECS日誌-https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-logs-collector.html
答案3
今天我遇到了同樣的問題。我透過執行以下操作解決了這個問題:
開啟VPC
→ Subnets
→ <YOUR SUBNET>
→ Subnet Actions
→Modify Auto-assign IP
設定。
檢查Enable auto-assign public IPV4 address
重新建立您的 AWS Batch 運算環境。
因為容器執行個體需要存取網際網路。因此,容器實例需要一個全域公用IP。