2015-12-01 96 views

回答

2

號中博託的boto.manage.cmdshell功能並未被遷移到boto3。原來的boto.manage.cmdshell功能使用Paramiko,你可以直接與boto3一起使用,如果你想使用boto3的SSH功能。

這是關於此主題的boto3 github issue

由於@jarmod指出截至2015年10月有new AWS functionality,使您可以使用AWS EC2 SSM在Windows系統上運行命令。您可以在博客3中使用boto3 SSM client從botocore版本1.3.1開始訪問。

扶持 「EC2上運行命令」

+0

非常感謝這個樣品。我要去嘗試帕拉米科。 – sdeshpande

+2

另請參閱最近發佈的EC2運行命令:https://aws.amazon.com/blogs/aws/new-ec2-run-command-remote-instance-management-at-scale/。這個博客表明它支持boto3和awscli,儘管我還沒有找到它。以下是常見問題解答:https://aws.amazon.com/ec2/run-command/faqs/ – jarmod

+0

不適用於我 – 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只是假裝EC2實例ID這裏有一個boto3 github issue。 我把它放在OutputS3KeyPrefix中以獲得一個獨特的地方來存儲桶中的日誌。

您可以像這樣安裝ssm代理;

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

感謝您發佈此解決方案。作爲有經驗的人,你會主張使用paramiko而不是簡單的SSM嗎?這裏的github問題的開發人員: https://github.com/boto/boto3/issues/328 似乎更喜歡它通過SSM執行shell腳本。 –

+0

我已經進入了部署雲構建的模板。它有助於清楚您已經在cf控制檯中部署了什麼。 – ddtraveller

0

我知道我回答的是舊線程。我不確定當時是否存在SSM。但是現在可以使用來自boto3的SSM send_command在ec2實例上直接運行命令。 這裏是運行在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) 

PowerShell命令欲瞭解更多信息,請閱讀boto3 SSM docs 有關SSM信息本身參閱AWS文檔