অ্যামাজন ইসিএস - আপনি কোনও পরিষেবার সমস্ত টাস্ক পুনরায় আরম্ভ করবেন কীভাবে?


18

আমাদের একটি টাস্ক রয়েছে যা বাহ্যিক ডেটা উত্স থেকে কিছু কনফিগারেশন ফাইল লোড করে। সেটিংস আপলোড হওয়ার পরে আমরা একটি পরিষেবায় সমস্ত কাজ পুনরায় আরম্ভ করতে সক্ষম হতে চাই যাতে সেটিংস সমস্ত দৃষ্টান্তে প্রচার করে।

সমস্ত পরিষেবা পুনরায় চালু করার সর্বোত্তম উপায় কোনটি?

আমাদের একটি 'ওয়ার্কারআউন্ড' রয়েছে যার মধ্যে 'কার্য সংখ্যা' নির্ধারণ করা এবং তারপরে ব্যাকআপ অন্তর্ভুক্ত থাকে তবে এটি কীভাবে করা হবে এবং ডাউনটাইম রয়েছে তা অবশ্যই তা নয়।


পিএস: কেউ যদি অ্যামাজন-ই সি ট্যাগটি তৈরি করতে পারে তবে তা দুর্দান্ত :) :)
ডেন্কস্টার

ট্যাগটিতে ভাল কল, আমি এটি আপনার জন্য যোগ করেছি।
ceejayoz

অ্যামাজন থেকে প্রাপ্ত এই দস্তাবেজটি আপনি বর্তমানে ব্যবহার করছেন এমন বিস্তৃতি ব্যাখ্যা করে?
ম্যাট

উত্তর:


16

এডাব্লুএস সিএলআই সরঞ্জাম ব্যবহার করে:

aws ecs update-service --force-new-deployment --service my-service

9

আপনি যা করতে চাইছেন তা মূলত পরিষেবাটিকে পুনরায় প্রচারের মতো।

ডাউনটাইম ছাড়াই পরিষেবাটি পুনরায় প্রচার করতে:

  1. বর্তমান টাস্ক সংজ্ঞা উপর ভিত্তি করে একটি নতুন টাস্ক সংজ্ঞা নিবন্ধন করুন (একই বিবরণ সহ)
  2. কল করুন আপডেট সার্ভিস, নতুন কার্য সংজ্ঞা সাথে বিদ্যমান পরিষেবাটি সংযুক্ত করে।

এটি নতুন কার্য সংজ্ঞা জন্য নতুন টাস্ক আরম্ভ করা উচিত এবং তারপরে পুরানো টাস্ক সংজ্ঞা জন্য পুরানো টাস্কগুলিকে মেরে ফেলা উচিত, কার্যকরভাবে ডাউনটাইম ছাড়াই কার্যগুলি পুনরায় আরম্ভ করা উচিত।

দেখুন: আপডেট সার্ভিস


1
আমার এডাব্লুএস কনসোলের মাধ্যমে এটি করা দরকার ছিল এবং এটি সবচেয়ে সহজতম উপায় you আপনার প্রয়োজন হলে আপনি পুরো প্রক্রিয়াটি ম্যানুয়ালি পরিচালনা করতে পারেন can যখন আপনাকে সমস্ত কাজ দ্রুত পুনরায় চালু করতে হবে এবং প্রক্রিয়াটির জন্য আরও কিছু দৃ rob়তর কিছু স্থাপন না করা দরকার - ইউআইতে, টাস্ক সংজ্ঞাতে যান, একটি নতুন সংশোধন তৈরি করুন, পরিষেবাটি আপডেট করুন, তারপরে অল্প সময়ের পরে সমস্ত কাজ আবার চালু!
geerlingguy

2
তারা পরিষেবা আপডেটে একটি চেকবক্স যুক্ত করেছে "নতুন স্থাপনা জোর করে" যা আপনাকে আপনার প্রক্রিয়াতে পদক্ষেপ 1 এড়িয়ে যেতে দেয়।
জোশ ভিকারি

"ফোর্সেস নতুন স্থাপনা" বিকল্প সম্পর্কে মন্তব্যটি আমার জন্য স্বীকৃত উত্তর ছিল।
ecbrodie

3

এটি আমার পক্ষে কাজ করেছে:

aws ecs list-tasks --cluster <cluster_name> | jq -r ".taskArns[]" | awk '{print "aws ecs stop-task --cluster <cluster_name> --task \""$0"\""}' | sh

কাজগুলি একই পরিস্থিতিতে পুনরায় তৈরি করুন।

আপনার যদি নতুন উদাহরণ প্রয়োজন হয় তবে এটি ব্যবহার করুন:

aws ecs list-services --cluster <cluster_name> | jq -r ".serviceArns[]" | awk '{print "aws ecs update-service --cluster <cluster_name> --force-new-deployment  --service \""$0"\""}' | sh

দ্বিতীয়টি মনে হয় নতুন উদাহরণ শুরু করা ছাড়া অন্য কিছু করেছে something
ব্যবহারকারীর 30681

2

ইসিএসের বিল্ডিং ব্লক হিসাবে টাস্ক স্টপটাস্ক কল দ্বারা বন্ধ করা যেতে পারে । পরিষেবা অন্তর্নিহিত কাজগুলির সমন্বয়ে গঠিত যা একই এপিআই কল দিয়ে বন্ধ হয়ে যেতে পারে। এখানে কেবল অনুপস্থিত অংশটি সংজ্ঞায়িত পরিবার প্যারামিটারের সাথে তালিকাস্ক কল থেকে প্রাপ্ত ফলাফলগুলির পূর্বাভাস । আমি সহজ ল্যাম্বদা ফাংশন লিখেছিলাম যা এটি আপনাকে সহায়তা করতে পারে।


1

আমি উপরের @ ব্যবহারকারী 326608 এর উত্তরটি প্রসারিত করছি (অন্তর্দৃষ্টিটির জন্য ধন্যবাদ!)

এটি ক্লাস্টারের সমস্ত কর্ম বন্ধ করে সমস্ত পরিষেবা পুনরায় আরম্ভ করবে । প্রতিটি পরিষেবা তারপরে স্বয়ংক্রিয়ভাবে Xনতুন কর্মের সংখ্যা শুরু করবে , যেখানে Xপরিষেবাটি desired task count

#!/bin/bash

index=0
taskArn=$(aws ecs list-tasks --cluster ${CLUSTER_NAME} --query "taskArns[${index}]" --output text)

until [ "$taskArn" = "None" ]
do 
  aws ecs stop-task --cluster ${CLUSTER_NAME} --task $taskArn
  ((index++))
  taskArn=$(aws ecs list-tasks --cluster ${CLUSTER_NAME} --query "taskArns[${index}]" --output text)
done

দ্রষ্টব্য: আপনি যদি একটি একক পরিষেবার জন্য কাজগুলি পুনরায় আরম্ভ করতে চান তবে @ বেন হোয়ালি বর্ণিত হিসাবে কেবল একটি নতুন স্থাপনাকে বাধ্য করুন।
sudo আত্মা

0

অ্যামাজন ডকুমেন্টেশনের ভিত্তিতে দেখে মনে হচ্ছে আপনি আপডেট সার্ভিস এপিআই কলগুলি ব্যবহার করে প্রশ্নের ক্রিয়াকলাপগুলি স্ক্রিপ্ট করতে সক্ষম হবেন । পূর্ববর্তী লিঙ্কটিতে কিছু কোড নমুনা পাওয়া যায়, এটি সম্ভবত আপনাকে মানিয়ে নিতে সক্ষম হবে বলে মনে হয়। টাস্ক কনফিগারেশনের আপডেটের পরে সমস্যার সর্বাধিক মার্জিত সমাধান হতে পারে উপযুক্ত টাস্ক সংজ্ঞা ব্যবহার করে পরিষেবাগুলি পুনরায় লোড করার যত্ন নেওয়ার জন্য কোনও স্ক্রিপ্ট লেখার মতো মনে হচ্ছে।

ইসিএসের সাথে এডাব্লুএস সিএলআই ব্যবহার সম্পর্কে আরও নথিপত্র রয়েছে যা দেখে মনে হচ্ছে পরিষেবাগুলি পুনরায় চালু করার ব্যাচ স্ক্রিপ্টিংয়ের সাথে মোকাবিলা করার সহজতম উপায় হবে।


আমি স্ক্রিপ্ট / কমান্ড সিক্যুয়েন্স লিখতে এবং পোস্ট করতে কাজ করতে পারি তবে বর্তমানে আমার কাছে কোনও AWS অ্যাকাউন্টে অ্যাক্সেস নেই আমি এই ধরণের জিনিসটি পরীক্ষার জন্য ব্যবহার করতে সক্ষম হব, সুতরাং এটি কোনও রুক্ষ খসড়া / শুরুর পয়েন্ট হবে যেহেতু আমি তা করব না এটি কার্যকরভাবে পরীক্ষা করতে সক্ষম
ম্যাট


0

আমি এ নিয়ে কাজ করে যাচ্ছি। এটি নির্ভরযোগ্যভাবে একবারে একটি কাজ পুনরায় আরম্ভ করতে সক্ষম হতে বেশ কার্যকর হবে। নীচের স্ক্রিপ্টটি আমি এখন ব্যবহার করছি। এটি বেশ সতর্ক। প্রতিটি কাজের জন্য আপনাকে ফিরতে হবে। পরিষেবা স্থিতিশীল হওয়ার জন্য অপেক্ষা করার জন্য একটি কমান্ড রয়েছে, তবে এর অর্থ এই নয় যে টাস্কটি স্বাস্থ্যকর। এবং আমি একটি সময় বিলম্ব করতে পারে। তবে শেষ পর্যন্ত যদি জিনিসগুলি খারাপ হয়ে যায় তবে স্ক্রিপ্টটি আস্তে আস্তে অ্যাপটিকে মেরে ফেলবে। তাই ...

#!/bin/bash

if [ $# -eq 2 ]
then
    cluster=$1
    service=$2
else
    echo "Usage: $0 <cluster> <service>"
    exit 1
fi

echo
echo "Restarting $cluster $service tasks:"
echo

for task in $(aws ecs list-tasks --cluster $cluster --service-name $service | awk '{print $2}')
do
    echo
    echo -n "Press enter to stop $task"
    read -r
    echo
    echo "stopping $task..."
    aws ecs stop-task --cluster "$cluster" --task "$task"
    echo
    # aws ecs wait services-stable --cluster "$cluster" --services "$service"    done

0

আমার কাছে পাইথন বোটো 3 স্ক্রিপ্ট রয়েছে যা এফএফ:

  1. এর মাধ্যমে কোনও পরিষেবার জন্য 'রান' স্থিতি সহ কার্যগুলির তালিকা তৈরি করুন

ecs_client.list_tasks(cluster=mycluster,serviceName=myservice,desiredStatus='RUNNING')

  1. উপরের কাজগুলির তালিকার জন্য লুপের জন্য করুন এবং প্রতিটি মাধ্যমে থামিয়ে দিন

ecs_client.stop_task(cluster=mycluster,task=mytask)

  1. রানিংকাউন্ট এবং কাঙ্ক্ষিত কাউন্ট পেতে পরিষেবাটি বর্ণনা করুন

ecs_client.describe_services(cluster=mycluster,services=[myservice])

  1. লুপ চলাকালীন চলমানকাউন্ট <কাঙ্ক্ষিত কাউন্ট - অর্থ একটি টাস্ক বর্তমানে থামানো হচ্ছে এবং এখনও প্রতিস্থাপন করা হয়নি, সুতরাং পরবর্তী কাজটি এখনও বন্ধ করবেন না!

while myservice['services'][0]['runningCount'] < myservice['services'][0]['desiredCount']:

যদি লুপটি আর সত্য না হয় - যার অর্থ চলমান এবং কাঙ্ক্ষিত গণনা দুটি সমান হয় তবে তালিকার পরবর্তী কাজটি বন্ধ করুন।

এটি প্রকৃত প্রবাহ এবং আমি এখনও আমার বর্তমান কাজটি দ্বারা নিযুক্ত এবং আমার সমস্ত কোড এগুলির সাথে যুক্ত হওয়ায় আমি আসল কোডটি প্রদর্শন করতে অক্ষম :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.