2015-12-01 1 views

Répondre

2

Non, la fonctionnalité boto.manage.cmdshell dans Boto n'a pas été migré vers boto3. La fonctionnalité originale boto.manage.cmdshell utilisé Paramiko que vous pourriez utiliser directement avec boto3 si vous voulez avoir la fonctionnalité SSH avec boto3.

Voici un boto3 github issue sur ce sujet. Comme l'indique @jarmod, il y a new AWS functionality depuis octobre 2015, ce qui vous permet d'exécuter des commandes sur les systèmes Windows en utilisant AWS EC2 SSM.

Vous pouvez accéder à cela dans boto3 avec le boto3 SSM client à partir de botocore version 1.3.1.

Voici un boto3 github issue sur le soutien "EC2 Run Command"

+0

Merci beaucoup pour cela. Je vais essayer Paramiko. – sdeshpande

+2

Jetez aussi un coup d'œil à la commande d'exécution EC2 récemment annoncée: https://aws.amazon.com/blogs/aws/new-ec2-run-command-remote-instance-management-at-scale/. Le blog suggère qu'il est supporté dans boto3 et l'awscli, bien que je ne l'ai pas encore trouvé. Voici la FAQ: https://aws.amazon.com/ec2/run-command/faqs/ – jarmod

+0

ne fonctionne pas pour moi – Gil

1
ssm = boto3.client('ssm')  
testCommand = ssm.send_command(InstanceIds=[ 'i-123123123123' ], DocumentName='AWS-RunShellScript', Comment='la la la', OutputS3BucketName='myOutputS3Bucket', OutputS3KeyPrefix='i-123123123123', Parameters={ "commands":[ "ip config" ] }) 

i-123123123123 est un identifiant d'instance EC2 faire semblant. Je l'ai mis dans le OutputS3KeyPrefix pour obtenir un emplacement unique pour stocker les journaux dans le compartiment.

Vous pouvez installer l'agent ssm comme ceci;

ec2r = boto3.resource('ec2') 
userdata = """#cloud-config 
    runcmd: 
    - /home/ec2-user/sudo npm run prod 
    - cd /tmp 
    - curl https://amazon-ssm-%s.s3.amazonaws.com/latest/linux_amd64/amazon-ssm-agent.rpm -o amazon-ssm-agent.rpm 
    - yum install -y amazon-ssm-agent.rpm 
""" % region 

if ssm == "on": 
    instance = ec2r.create_instances(ImageId=ami, MinCount=1, MaxCount=1, KeyName=keyname, InstanceType=instancetype, 
     NetworkInterfaces=[{ 
     'DeviceIndex': 0, 
     'AssociatePublicIpAddress': False, 
     'SubnetId': mySub, 
     'Groups': secGroupList, 
     'AssociatePublicIpAddress': AssociatePublicIpAddress 
    }], 
     Monitoring={ 'Enabled': False }, 

     UserData=userdata, 
     IamInstanceProfile={ 
      'Name': rolename 
     }, 
     EbsOptimized=False 
    ) 
+0

Merci d'avoir posté cette solution. En tant que personne ayant de l'expérience ici, préconiseriez-vous l'utilisation de paramiko plutôt que SSM étant donné sa simplicité? Les devs dans le problème de github ici: https://github.com/boto/boto3/issues/328 semblent le préférer à SSM pour l'exécution de scripts shell. –

+0

J'ai intégré des modèles de cloud pour effectuer des déploiements. Cela aide à clarifier ce que vous avez déjà déployé dans la console cf. – ddtraveller

0

Je sais que je réponds à l'ancien peu de thread. Je ne suis pas sûr que même à ce moment SSM existait. Mais maintenant, vous pouvez utiliser SSM send_command de boto3 pour exécuter des commandes directement sur des instances ec2. Voici l'exemple d'exécuter des commandes PowerShell sur les instances EC2

import boto3 
ssm_client = boto3.client('ssm', region_name="us-west-2") # use region code in which you are working 
response = ssm_client.send_command(
      InstanceIds=[ 
       "i-03########" # use instance id on which you want to execute, even multiple is allowd 
        ], 
      DocumentName="AWS-RunPowerShellScript", 
      Parameters={ 
       'commands':[ 
        'ipconfig' 
         ] 
        }, 
      }) 
command_id = response['Command']['CommandId'] 
output = ssm_client.get_command_invocation(
     CommandId=command_id, 
     InstanceId='i-03######', 
    ) 
print(output) 

Pour plus d'informations lire boto3 SSM docs Pour plus d'informations sur lui-même se référer AWS SSM docs