İşte AWS SSM Send-Command ile yaptığım süper havalı bir şey!
Apache Airflow'u kullanarak, istediğim EC2-Instance için tüm yapılandırma değerlerini içeren bir JSON dosyası olan bir Bulut Oluşum Şablonu (veya kısaca CFT) kullanarak yepyeni bir EC2-Instance oluşturuyorum; ayrıca bu CFT'de bir Python komut dosyasını bir S3 konumundan yeni EC2 örneğine kopyalayan bir bootstrap komutuna sahip olduğumu ve böylece daha sonra bir SSM Gönderme Komutu kullanarak çalıştırabileceğimi unutmayın! Bunu Python3 ve Boto3 kütüphanesi olarak adlandırılan Python3 için AWS SDK kullanarak yaparım. İşte yeni EC2 örneğimi oluşturan yeni CFT Yığını oluşturma komutunun bir parçası:
import boto3
cft = boto3.client("cloudformation", "us-east-1")
response = cft.create_stack(
StackName='foobarStackName',
TemplateBody=json.dumps(json_data))
Sonra böyle bir şey kullanarak yeni EC2-Instance (SSM Gönderme-Komutu kullanmak için gerekli) Instance-ID alabilirsiniz:
response = cft.describe_stacks(
StackName='foobarStackName',
)
Sonra bu komutu wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
Python aracılığıyla çalıştırarak mevcut Hava Akışı İşçisinin sunucusunun EC2 Örneğinin Örnek Kimliğini alabilirim :
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]
ŞİMDİ !!!! BÜYÜK FİNAL İÇİN
Daha sonra oluşturduğum yeni EC2 Örneği üzerinde bir komut dosyası yürütebilirim ve komut dosyasını istediğim parametreler / bağımsız değişkenler gönderebilirim ... komut dosyası tamamlandığında SSM Gönderme Komutu gönderen sunucunun Örnek Kimliği dahil yeni EC2 Örneği üzerinde çalıştığında, komut dosyasının bittiğini söylemek üzere Airflow sunucuma başka bir SSM Gönderme Komutu gönderebilir. Bu ayrıntılar olmadan çok yüksek bir seviyede ancak sadece bir fikir göstermek için :)
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'))
Bunun kimseye yardımcı olup olmadığından emin değilim ama AWS SSM Send-Command ile bir şeyler yapmanın harika ve EĞLENCE örneği! Gerçi, muhtemelen bir kod kokusu xD