यहाँ कुछ सुपर कूल है जो मैं एडब्ल्यूएस एसएसएम सेंड-कमांड के साथ करता हूं!
अपाचे एयरफ्लो का उपयोग करके मैं क्लाउड फॉर्मेशन टेम्प्लेट (या संक्षेप में CFT) का उपयोग करके एक बिल्कुल नया EC2-Instance बनाता हूं, जो मेरे EC2-Instance के सभी कॉन्फ़िगरेशन मूल्यों के साथ एक JSON फाइल है जो मुझे चाहिए; यह भी ध्यान दें कि इस CFT में मेरे पास एक बूटस्ट्रैप कमांड भी है जो एक S3 लोकेशन से नए EC2-इंस्टेंस पर पायथन स्क्रिप्ट को कॉपी करता है ताकि मैं SSM सेंड-कमांड का उपयोग करने पर इसे बाद में निष्पादित कर सकूं! मैं इसे Python3 और AWS SDK का उपयोग Python3 के लिए Boto3 लाइब्रेरी कहते हैं। यहाँ नया CFT स्टैक बनाने के लिए कमांड का हिस्सा है जो बदले में मेरा नया EC2-Instance बनाता है:
import boto3
cft = boto3.client("cloudformation", "us-east-1")
response = cft.create_stack(
StackName='foobarStackName',
TemplateBody=json.dumps(json_data))
तब मैं नए EC2- इंस्टेंस (उदाहरण के लिए SSM सेंड-कमांड का उपयोग करने की आवश्यकता) की इंस्टेंस-आईडी प्राप्त कर सकता हूं:
response = cft.describe_stacks(
StackName='foobarStackName',
)
तब मैं wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
पायथन के माध्यम से इस कमांड को चलाकर वर्तमान एयरफ्लो वर्कर के सर्वर के EC2-इंस्टेंस की इंस्टेंस-आईडी प्राप्त कर सकता हूं :
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]
अभी!!!! ग्रैंड फिनाले के लिए
फिर मैं अपने द्वारा बनाए गए नए EC2-Instance पर एक स्क्रिप्ट निष्पादित कर सकता हूं और उस स्क्रिप्ट को भेज सकता हूं जो कुछ भी पैरामीटर / तर्क मैं चाहता हूं ... जिसमें एसएसएम सेंड-कमांड भेजने वाले सर्वर की इंस्टेंस-आईडी शामिल है ताकि मेरी स्क्रिप्ट पूरी हो जाए नए EC2-इंस्टेंस पर चल रहा है यह एक और एसएसएम सेंड-कमांड को मेरे एयरफ्लो सर्वर पर वापस भेज सकता है ताकि यह बता सके कि स्क्रिप्ट खत्म हो गई है। यह विवरण के बिना बहुत उच्च स्तर पर है लेकिन यह सिर्फ एक विचार को प्रदर्शित करने के लिए है :)
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'))
यकीन नहीं होता कि इससे किसी को मदद मिली, लेकिन यह एडब्ल्यूएस एसएसएम सेंड-कमांड के साथ कुछ करने का एक अच्छा और मजेदार उदाहरण है! यद्यपि, शायद एक कोड गंध xD है