Как продлить ресурс Boto3?

На boto3, как я могу расширить ResourceModel ? То, что мне не нужно делать, – это подкласс boto3.resources.factory.ec2.Instance и добавить к нему метод run . Этот метод будет использоваться для удаленного запуска команд в экземпляре EC2, представленном объектом Python, через SSH. Я хочу сделать это чистым способом, т. Е. Не прибегая к патчам обезьян или другим неясным методам.

Обновить

Основываясь на ответе Даниэля , я придумал следующий код. Требуется последняя версия Boto 3 и Spur для соединения SSH ( pip install spur boto3 ).

 from boto3 import session from shlex import split from spur import SshShell # Customize here. REGION = 'AWS-REGION' INSTID = 'AWS-INSTANCE-ID' USERID = 'SSH-USER' def hook_ssh(class_attributes, **kwargs): def run(self, command): '''Run a command on the EC2 instance via SSH.''' # Create the SSH client. if not hasattr(self, '_ssh_client'): self._ssh_client = SshShell(self.public_ip_address, USERID) print(self._ssh_client.run(split(command)).output.decode()) class_attributes['run'] = run if __name__ == '__main__': b3s = session.Session() ec2 = b3s.resource('ec2', region_name=REGION) # Hook the "run" method to the "ec2.Instance" resource class. b3s.events.register('creating-resource-class.ec2.Instance', hook_ssh) # Run some commands. ec2.Instance(INSTID).run('uname -a') ec2.Instance(INSTID).run('uptime') 

Короткий ответ заключается в том, что это еще не возможно, но планируется разрешить такие настройки. Вы уже можете увидеть их в действии с новой upload_file и download_file доступной на S3-клиенте. План состоит в том, чтобы использовать такой же механизм для ресурсов Boto 3.

  1. Ресурсы будут запускать какое-то событие при создании класса, который включает атрибут dict всех методов / атрибутов
  2. Вы подключаете свой собственный метод к атрибуту dict
  3. Класс создается с помощью настраиваемого метода – не требуется исправление обезьян.

Посмотрите здесь:

https://github.com/boto/boto3/blob/develop/boto3/session.py#L314-L318 https://github.com/boto/boto3/tree/develop/boto3/s3

Расширение Boto 3 определенно находится на нашем радаре.