任何人都可以告訴我,我們是否可以在Launched AWS實例上使用Boto3執行Shell命令。如何使用Boto3在AWS實例上執行命令
我在幾處閱讀「boto.manage.cmdshell」,但在Boto3中棄用。
感謝任何幫助。
問候, SAURABH
任何人都可以告訴我,我們是否可以在Launched AWS實例上使用Boto3執行Shell命令。如何使用Boto3在AWS實例上執行命令
我在幾處閱讀「boto.manage.cmdshell」,但在Boto3中棄用。
感謝任何幫助。
問候, SAURABH
號中博託的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上運行命令」
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
)
感謝您發佈此解決方案。作爲有經驗的人,你會主張使用paramiko而不是簡單的SSM嗎?這裏的github問題的開發人員: https://github.com/boto/boto3/issues/328 似乎更喜歡它通過SSM執行shell腳本。 –
我已經進入了部署雲構建的模板。它有助於清楚您已經在cf控制檯中部署了什麼。 – ddtraveller
我知道我回答的是舊線程。我不確定當時是否存在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文檔
非常感謝這個樣品。我要去嘗試帕拉米科。 – sdeshpande
另請參閱最近發佈的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
不適用於我 – Gil