我正在使用Boto3 SSM在我的实例中运行命令。
当我运行简单的命令,如echo hello world
或mkdir abc
时,它工作正常,并给我预期的输出。但是当我试图运行python -V
或任何其他python命令时。输出为python not found
。但是python在我运行Ubuntu的EC2实例中。当我手动检查它工作正常。
代码:
ssm = boto3.client('ssm' )
commands = ['python -V']
ssm.send_command(DocumentName="AWS-RunShellScript", Parameters={'commands': commands}, InstanceIds=['i-xxxxxxxxxxx'])
答案 0 :(得分:1)
此问题的正确答案取决于安装的OS AMI。
对于此问题,有几种方法可以解决此问题:
python3
是因为未安装python
(python 2.x)。 sudo apt-get install python
sudo ln /usr/bin/python3 /usr/bin/python
将python
链接到python3
目录中的/usr/bin
。Amazon Linux 2已安装Python 2.7.14。支持命令“ python”,“ python2”和“ python2.7”。默认情况下未安装Python 3。
Ubuntu 16.04 64位已安装Python 3.5.2。支持命令“ python3”和“ python3.5”。请注意,没有指向“ python”的链接。默认情况下未安装Python 2。
我在Amazon Linux 2和Python 2.7中注意到的一个项目。命令python -V
将版本字符串写入stderr,这会使您认为命令失败,因为当命令实际成功时,SSM Run Command将显示如下输出。我发现SSM运行命令只是在标准输出用----------ERROR-------
----------ERROR-------
Python 2.7.14
Python 3将版本字符串写入stdout。直到今天我才发现Python 2.x的stderr问题,这花了我几个小时才弄清楚。
我测试过的AMI的信息。
地区:us-west-2(俄勒冈州)
Amazon Linux 2: amzn2-ami-hvm-2.0.20180810-x86_64-gp2(ami-6cd6f714)
Ubuntu 16.04 LTS: ubuntu / images / hvm-ssd / ubuntu-xenial-16.04-amd64-server-20180814(ami-51537029)
答案 1 :(得分:0)
boto3.ssm并不意味着用作快速shell注入工具。您需要安装ssm-agent to your linux instance来执行更高级的触发,反之亦然。
答案 2 :(得分:0)
使用python3
工作。另外要提一下,它在系统中使用核心python,并且不识别安装的任何其他版本。