Đây là một điều tuyệt vời tôi làm với AWS SSM Send-Command!
Sử dụng Apache Airflow Tôi tạo một EC2-Instance hoàn toàn mới bằng cách sử dụng Mẫu hình thành đám mây (gọi tắt là CFT), đó chỉ là một tệp JSON với tất cả các giá trị cấu hình cho EC2-Instance mà tôi muốn; cũng lưu ý rằng trong CFT này tôi cũng có lệnh bootstrap sao chép tập lệnh Python từ vị trí S3 sang EC2-Instance mới để tôi có thể thực thi lệnh này sau khi sử dụng Lệnh gửi SSM! Tôi làm điều này bằng Python3 và AWS SDK cho Python3 được gọi là thư viện Boto3. Đây là một phần của lệnh tạo CFT Stack mới, lần lượt tạo ra EC2-Instance mới của tôi:
import boto3
cft = boto3.client("cloudformation", "us-east-1")
response = cft.create_stack(
StackName='foobarStackName',
TemplateBody=json.dumps(json_data))
Sau đó, tôi có thể nhận được Instance-ID của EC2-Instance mới (bắt buộc phải sử dụng Lệnh gửi SSM) bằng cách sử dụng cái gì đó như sau:
response = cft.describe_stacks(
StackName='foobarStackName',
)
Sau đó, tôi có thể nhận được Instance-ID của EC2-Instance của máy chủ Airflow hiện tại bằng cách chạy lệnh này wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
thông qua Python:
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]
HIỆN NAY!!!! CHO CUỐI CÙNG GRAND
Sau đó, tôi có thể thực thi một tập lệnh trên EC2-Instance mới mà tôi đã tạo và gửi tập lệnh đó bất kỳ tham số / đối số nào tôi muốn ... bao gồm cả Instance-ID của máy chủ đã gửi Lệnh gửi SSM theo cách đó khi tập lệnh của tôi được thực hiện chạy trên EC2-Instance mới, nó có thể gửi một Lệnh gửi SSM khác trở lại máy chủ Airflow của tôi để thông báo rằng tập lệnh đã kết thúc. Đây là một mức độ rất cao mà không có chi tiết nhưng nó chỉ để thể hiện một ý tưởng :)
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'))
Không chắc điều này có giúp được ai không, nhưng đây là một ví dụ thú vị và vui vẻ khi làm điều gì đó với Lệnh gửi của AWS SSM! Mặc dù, có lẽ là một mã mùi xD