AWS运行命令:找不到Python



我正在使用boto3 ssm在我的情况下运行命令。

当我运行简单命令(例如echo hello worldmkdir 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/pythonpython链接到/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-------

分开的Stdout之后显示STDERR
----------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,并且无法识别安装的任何其他版本。