0

我正在使用 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'])
4

3 回答 3

1

此问题的正确答案取决于安装的 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到目录中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 运行命令只是在 stdout 分隔后显示 stderr----------ERROR-------

----------ERROR-------
Python 2.7.14

Python 3 将版本字符串写入标准输出。这花了我几个小时才弄清楚,因为直到今天我才注意到 Python 2.x 的 stderr 问题。

关于我测试的 AMI 的信息。

地区:us-west-2(俄勒冈州)

亚马逊 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)

于 2018-09-21T05:25:03.123 回答
0

使用python3工作。还有一点要提的是,它使用系统中的核心python,并且不识别安装的任何其他版本。

于 2017-12-21T18:49:19.283 回答
0

boto3.ssm 并不意味着用作您的快速 shell 注入工具。您需要将ssm-agent 安装到您的 linux 实例以执行更高级的触发,反之亦然 Windows。

于 2017-12-21T18:03:39.773 回答