我正在使用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'])
此问题的正确答案取决于安装的OS AMI。
对于这个问题,有几种解决此问题的选择:
- 使用
python3
,因为未安装python
(Python 2.x)。 - 安装Python 2.x(Ubuntu):
sudo apt-get install python
- 执行命令:
sudo ln /usr/bin/python3 /usr/bin/python
将python
链接到/usr/bin
目录中的python3
。
Amazon Linux 2安装了Python 2.7.14。支持命令" Python"," Python2"one_answers" Python2.7"。默认情况下未安装Python 3。
Ubuntu 16.04 64位安装了Python 3.5.2。支持命令" Python3"one_answers" Python3.5"。请注意,没有指向" Python"的链接。默认情况下未安装Python 2。
我注意到Amazon Linux 2和Python 2.7的一项。命令python -V
将版本字符串写入STDERR,这将使您认为命令失败,因为SSM RUN命令将显示命令实际上成功时的输出。我发现SSM Run命令只是在----------ERROR-------
----------ERROR-------
Python 2.7.14
Python 3将版本字符串写入Stdout。这花了我几个小时才弄清楚,因为直到今天,我从未注意到python 2.x的问题。
有关我测试的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-server-20180814(ami-51537029)
boto3.ssm并不是要用作快速外壳注入工具。您需要在Linux实例上安装SSM代理,以执行更高级的触发器,反之亦然。
使用python3
工作。要提到的另一件事是,它使用系统中的Core Python,并且无法识别安装的任何其他版本。