You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/api/get_logs.py

55 lines
2.1 KiB

import time
import boto3
#from dateutil import tz
def parse_command_id(send_command_output):
return send_command_output['Command']['CommandId']
def main():
ec2_client = boto3.client('ec2')
ssm_client = boto3.client('ssm')
# Get the list of instance IDs and their states
instances_response = ec2_client.describe_instances()
instances = [
(instance['InstanceId'], instance['State']['Name'])
for reservation in instances_response['Reservations']
for instance in reservation['Instances']
]
for instance_id, state in instances:
if state == 'running':
print(f"Starting command for instance: {instance_id}")
# Send command to the instance
send_command_output = ssm_client.send_command(
DocumentName="AWS-RunShellScript",
Targets=[{"Key": "instanceids", "Values": [instance_id]}],
Parameters={'commands': ['sudo su - -c "tail /var/log/cloud-init-output.log"']}
)
# Get the command ID
command_id = parse_command_id(send_command_output)
# Check the command status every second for 4 seconds
for _ in range(4):
time.sleep(20)
command_status = ssm_client.list_command_invocations(CommandId=command_id, Details=True)
print(command_status)
for invocation in command_status['CommandInvocations']:
if invocation['Status'] == 'Success':
for plugin in invocation['CommandPlugins']:
if plugin['Status'] == 'Success':
print(f"Output from instance {instance_id}:\n{plugin['Output']}")
else:
print(f"Error in plugin execution for instance {instance_id}: {plugin['StatusDetails']}")
else:
print(f"Command for instance {instance_id} is still in progress... Status: {invocation['Status']}")
if __name__ == "__main__":
main()