我目前正在嘗試設置一個簡單的CI,它將重建我的項目,創建一個新的Docker鏡像,將新鏡像推送到亞馬遜ecr倉庫,創建一個新的修訂版本使用最新的Docker鏡像的現有任務定義,使用任務定義的新修訂更新正在運行的服務,並最終停止運行舊版本的現有任務,並啓動運行新版本的任務。更新AWS ECS服務任務的最佳實踐
除了開始任務的新版本以外,一切正常。
從bash腳本,最後的命令我打電話是:
aws ecs update-service --cluster "$CLUSTER" --service "$SERVICE" --task-definition "$TASK_DEFINITION":"$REVISION"
這導致的事件錯誤:
(service rj-api-service) was unable to place a task because no container instance met all of its requirements. The closest matching (container-instance bbbc23d5-1a09-45e7-b344-e68cc408e683) is already using a port required by your task.
而且因爲我更換容器正是這是有道理的與新的一樣,並且將在同一個端口上運行,它只包含我的應用程序的最新版本。
我的印象是,update-service
命令會停止現有任務,並啓動新任務,但它看起來像是首先啓動新任務,並且如果成功則停止舊任務。
處理此問題的最佳做法是什麼?我應該先停止舊任務嗎?我應該先刪除腳本中的服務並重新創建每個更新的整個服務?
目前我只需要運行任務的1個實例,但如果我需要這個能夠自動縮放到多個實例,我不想將自己的自己裝箱。有關解決此問題的最佳方法的任何建議?
這是一個完美的描述。非常感謝。我將健康百分比設置爲50/200的默認值。我沒有做藍綠部署,所以將健康百分比設置爲0/100是可行的,我最初的預期是,我必須調用的是更新,而不用更多的步驟來停止正在運行的任務。 – on3al
太棒了!我很高興它按照你的預期工作。 –