এডাব্লুএস এসএসএম প্রেরণ-কমান্ডের সাথে এখানে সুপার কুল কিছু করছি!
অ্যাপাচি এয়ারফ্লো ব্যবহার করে আমি ক্লাউড ফর্মেশন টেম্পলেট (বা সংক্ষেপে সিএফটি) ব্যবহার করে একেবারে নতুন ইসি 2-ইনস্ট্যান্স তৈরি করি যা আমার ইসি 2-ইনস্ট্যান্সের জন্য সমস্ত কনফিগারেশন মানগুলির সাথে একটি জেএসওএন ফাইল যা আমি চাই; আরও মনে রাখবেন যে এই সিএফটি-তে আমার একটি বুটস্ট্র্যাপ কমান্ডও রয়েছে যেটি একটি এস 3 অবস্থান থেকে পাইথন স্ক্রিপ্টটিকে নতুন ইসি 2-ইনস্ট্যান্সে অনুলিপি করে যাতে আমি এসএসএম প্রেরণ-আদেশ ব্যবহার করে পরে এটি সম্পাদন করতে পারি! আমি পাইথন 3 ব্যবহার করে এটি করি এবং পাইথন 3 এর জন্য এডাব্লুএস এসডিকে বোটো 3 লাইব্রেরি বলে। নতুন সিএফটি স্ট্যাক তৈরি করার কমান্ডের অংশটি যা আমার নতুন ইসি 2-ইনস্ট্যান্স তৈরি করে:
import boto3
cft = boto3.client("cloudformation", "us-east-1")
response = cft.create_stack(
StackName='foobarStackName',
TemplateBody=json.dumps(json_data))
তারপরে আমি এই জাতীয় কিছু ব্যবহার করে নতুন ইসি 2-ইনস্ট্যান্সের (এসএসএম প্রেরণ-কমান্ড ব্যবহার করা প্রয়োজন) এর ইনস্ট্যান্স-আইডি পেতে পারি:
response = cft.describe_stacks(
StackName='foobarStackName',
)
তারপরে wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
পাইথনের মাধ্যমে এই কমান্ডটি চালিয়ে আমি বর্তমান এয়ারফ্লো কর্মীর সার্ভারের ইসি 2-ইনস্ট্যান্সের ইনস্ট্যান্স-আইডি পেতে পারি :
output = subprocess.Popen(['wget', '-q', '-O', '-', 'http://169.254.169.254/latest/meta-data/instance-id'],
stdout=subprocess.PIPE)
# Do some weird stuff to get the value (I'm a Java developer so excuse my bad Python skilz)
instanceId = output.communicate()
instanceId = str(instanceId).split("'")[1]
এখন !!!! গ্র্যান্ড ফাইনালের জন্য
তারপরে আমি যে নতুন ইসি 2-ইনস্ট্যান্স তৈরি করেছি তার উপর একটি স্ক্রিপ্ট কার্যকর করতে পারি এবং সেই স্ক্রিপ্টটি আমি যে প্যারামিটার / যুক্তিগুলি চাই তা পাঠাতে পারি ... এসএসএম প্রেরণ-কমান্ড প্রেরিত সার্ভারের ইনস্ট্যান্স-আইডি সহ যাতে আমার স্ক্রিপ্টটি সম্পন্ন হয় নতুন ইসি 2-ইনস্ট্যান্সে চলছে এটি স্ক্রিপ্টটি সমাপ্ত হয়েছে তা জানাতে এটি আমার এয়ারফ্লো সার্ভারে আবার একটি এসএসএম প্রেরণ-কমান্ড প্রেরণ করতে পারে। এটি বিশদ ছাড়াই খুব উচ্চ স্তরে তবে এটি কেবল একটি ধারণা প্রদর্শন করার জন্য :)
subprocess.run(shlex.split('sudo aws ssm send-command --document-name "AWS-RunShellScript" --parameters commands=["sudo python3 /home/ec2-user/ec2_file_sensor.py ' + filepath + ' ' + batchIdValue + ' ' + source + ' ' + fileType + ' ' + airflowWorkerInstanceId + '"] --instance-ids ' + ec2ResourceInstanceId + ' --region us-east-1'))
নিশ্চিত নয় যে এটি কাউকে সহায়তা করেছে তবে এটি এডাব্লুএস এসএসএম প্রেরণ-কমান্ড দিয়ে কিছু করার একটি দুর্দান্ত এবং মজাদার উদাহরণ! তবে, সম্ভবত একটি কোড গন্ধ এক্সডি D