Layanan EC tidak memperbarui definisi tugas

8

Di kluster ecs, saya memiliki layanan yang berjalan dengan 2 contoh EC2. Dan saya memperbarui definisi tugas untuk mengambil gambar buruh pelabuhan baru. Namun definisi tugas yang lama masih berjalan meskipun ada definisi tugas yang baru.

Saya telah menggunakan perintah berikut untuk memperbarui definisi tugas dan layanan.

aws ecs register-task-definition --family service90-task --cli-input-json file://service90-task.json

aws ecs update-service --cluster service90-cluster --service service90-service --desired-count 0

TASK_REVISION=`aws ecs describe-task-definition --task-definition service90-task | egrep "revision" | tr "/" " " | awk '{print $2}' | sed 's/"$//'`

aws ecs update-service --cluster service90-cluster --service service90-service --task-definition service90-task:${TASK_REVISION} --desired-count 2

Saya mencoba beberapa kali tetapi tidak dapat menemukan kesalahan saya. Saya ingin mendapatkan layanan EC untuk menjalankan definisi tugas baru, bukan yang lama.

Lahiru Liyanapathirana
sumber

Jawaban:

7

Seperti yang saya ketahui kemudian, alasan untuk tidak memperbarui tugas adalah bahwa jumlah yang diinginkan diatur ke 2 dan hanya ada 2 instance EC2 yang tersedia. Jadi agen ECS mencoba untuk mempertahankan jumlah yang diinginkan meskipun tugas telah diperbarui.

Solusi - Miliki satu instance EC2 tambahan (dalam kasus ini 3 instance EC2). Atau memiliki satu contoh tambahan dari jumlah tugas yang dipilih.

Dengan cara ini, definisi tugas baru dapat berjalan pada instance tambahan. Setelah distabilkan pada instance EC2 tambahan, agen ECS akan mengalirkan koneksi pada dua instance lain untuk definisi tugas lama, sementara load-balancer mengarahkan lalu lintas ke instance yang diperbarui. Agen ECS menggantikan definisi tugas lama dengan yang baru. Dan kemudian mempertahankan jumlah yang diinginkan sebagai 2.

Lahiru Liyanapathirana
sumber
2

Solusi alternatif adalah mengatur Minimum healthy percentopsi penyebaran layanan 0, yang mengakibatkan tugas yang ada dihentikan sebelum versi baru digunakan.

Ini memungkinkan klaster instance EC2 tunggal untuk digunakan, dengan penghematan biaya terkait, dll

Tidak cocok untuk produksi karena Anda akan memiliki waktu henti antar penerapan

Nick Hammond
sumber
Hari penyelidikan dan me-reboot server, diselesaikan dengan jawaban ini! Terima kasih :)
Neara
2

Untuk memperbarui definisi tugas di "tugas" yang berjalan di layanan, Anda harus menghapus tugas dan Mulai tugas baru.

Dengan cara ini, saya memecahkan masalah memperbarui definisi tugas dalam tugas

Saya telah menulis kode berikut:

    # Register a new Task definition 
    aws ecs register-task-definition --family testing-cluster --cli-input-json file://scripts/taskdefinition/testingtaskdef.json --region $AWS_REGION

    # Update Service in the Cluster
    aws ecs update-service --cluster $CLUSTER_NAME --service $SERVICE --task-definition testing-cluster --desired-count 1 --region $AWS_REGION 



    DECRIBED_SERVICE=$(aws ecs describe-services --region $AWS_REGION --cluster $CLUSTER_NAME --services $SERVICE);
    CURRENT_DESIRED_COUNT=$(echo $DECRIBED_SERVICE | jq --raw-output ".services[0].desiredCount")
    #    - echo $CURRENT_DESIRED_COUNT

    CURRENT_TASK_REVISION=$(echo $DECRIBED_SERVICE | jq -r ".services[0].taskDefinition")
    echo "Current Task definition in Service" + $CURRENT_TASK_REVISION

    CURRENT_RUNNING_TASK=$(echo $DECRIBED_SERVICE | jq -r ".services[0].runningCount")
    echo $CURRENT_RUNNING_TASK

    CURRENT_STALE_TASK=$(echo $DECRIBED_SERVICE | jq -r ".services[0].deployments | .[] | select(.taskDefinition != \"$CURRENT_TASK_REVISION\") | .taskDefinition")
    echo "Task defn apart from current service Taskdefn" +  $CURRENT_STALE_TASK
    #   - echo $CURRENT_STALE_TASK

    tasks=$(aws ecs --region $AWS_REGION list-tasks --cluster $CLUSTER_NAME | jq -r '.taskArns | map(.[40:]) | reduce .[] as $item (""; . + $item + " ")')
    echo "Tasks are as follows" 
    echo $tasks
    TASKS=$(aws ecs --region $AWS_REGION describe-tasks --cluster $CLUSTER_NAME --task $tasks);
    #    - echo $TASKS
    OLDER_TASK=$(echo $TASKS | jq -r ".tasks[] | select(.taskDefinitionArn!= \"$CURRENT_TASK_REVISION\") | .taskArn | split(\"/\") | .[1] ")
    echo "Older Task running  " + $OLDER_TASK
    for old_task in $OLDER_TASK; do
        aws ecs --region us-east-1 stop-task --cluster $CLUSTER_NAME --task $old_task
    done    

    # Run new tasks with the updated new Task-definition
    aws ecs --region $AWS_REGION run-task --cluster $CLUSTER_NAME --task-definition $CURRENT_TASK_REVISION
Roopa
sumber
0

Saya sudah menggaruk-garuk kepala ini untuk waktu yang lama dan tidak pernah menemukan solusi yang layak di mana pun sampai minggu lalu.

AWS baru saja merilis API baru di mana mereka memiliki - memaksa opsi untuk penghapusan layanan. Masalah Grup Target yang Anda hadapi hanya karena Grup Target yang terdaftar dengan tugas Anda sudah dihapus dan Anda tidak dapat mengikat Grup Target baru untuk itu. Jadi karena tugas dan layanan ini rusak sekarang, satu-satunya cara untuk berurusan adalah menghapusnya, Anda tidak dapat memperbaruinya lagi.

Anda dapat menggunakan perintah ini untuk menghapus layanan Anda sekarang; itu tidak mungkin minggu lalu!

aws ecs delete-service --service my-http-service --force true

Semoga ini membantu

neocorp
sumber