2017-03-11 39 views
3

我試圖重新啓動AWS服務(基本上停止並啓動服務中的所有任務),而不對任務定義進行任何更改。AWS ECS重新啓動具有相同任務定義和映像且無停機的服務

原因是因爲圖像的每個版本都附有latest標籤。

我試着停止所有任務並讓服務重新創建它們,但這意味着在我的實例(2)中重新啓動服務時會出現一些temporarily unavailable錯誤。

處理這個問題的最佳方法是什麼?說,一種藍綠色的部署策略,以避免停機?

這是我目前的。它的缺點是我的應用會在幾秒鐘內關閉,因爲服務的任務在刪除後將被重建。

configure_aws_cli(){ 
    aws --version 
    aws configure set default.region us-east-1 
    aws configure set default.output json 
} 

start_tasks() { 
    start_task=$(aws ecs start-task --cluster $CLUSTER --task-definition $DEFINITION --container-instances $EC2_INSTANCE --group $SERVICE_GROUP --started-by $SERVICE_ID) 
    echo "$start_task" 
} 

stop_running_tasks() { 
    tasks=$(aws ecs list-tasks --cluster $CLUSTER --service $SERVICE | $JQ ".taskArns | . []"); 
    tasks=($tasks) 
    for task in "${tasks[@]}" 
    do 
     [[ ! -z "$task" ]] && stop_task=$(aws ecs stop-task --cluster $CLUSTER --task "$task") 
    done 
} 

push_ecr_image(){ 
    echo "Push built image to ECR" 
    eval $(aws ecr get-login --region us-east-1) 
    docker push $AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/repository:$TAG 
} 

configure_aws_cli 
push_ecr_image 
stop_running_tasks 
start_tasks 

回答

0

後,你把你的新形象,你的多克爾庫,你可以create a new revision of your task definition(它可以等同於現有的任務定義)和update your service使用新的任務定義版本。這將觸發服務部署,並且您的服務將從您的存儲庫中提取新映像。

這樣你的任務定義保持不變(儘管需要更新服務到新的任務定義修訂版才能觸發圖像拉動),並仍然使用圖像的「最新」標籤,但是您可以利用ECS服務部署功能可避免停機。

0

,我要連每次創建我的任務定義的一個新版本時,有在任務定義本身沒有改變的事實是不正確的。

還有一堆上該粗的bash實現的,這意味着AWS應具有ECS服務調度聽對於圖像中的改變/更新,尤其是用於自動構建過程。

crude工作周圍,這是有兩個相同的任務定義以及它們之間的每次構建切換。這樣我沒有多餘的修訂。

這是特定的腳本代碼片段。

update_service() { 
    echo "change task definition and update service" 
    taskDefinition=$(aws ecs describe-services --cluster $CLUSTER --services $SERVICE | $JQ ".services | . [].taskDefinition") 
    if [ "$taskDefinition" = "$TASK_DEF_1" ]; then 
     newDefinition="$TASK_DEF_2" 
    else 
     newDefinition="$TASK_DEF_1" 
    fi 
    rollUpdate=$(aws ecs update-service --cluster $CLUSTER --service $SERVICE --task-definition $newDefinition) 
} 
+0

沒有AWS現在有這種發動機? – Elaine