0

我正在尝试使用来自 Lambda 的 ssm runShellScript 在我的 ec2 实例上运行 python 脚本。使用创建文本文件的简单脚本进行测试时,它可以毫无问题地运行。我可以在 ec2 上看到文本文件。但是当尝试运行预期的 python 脚本(analyzer.py)时,我收到以下错误:'ImportError: No module named sqlalchemy'

脚本 Analyzer.py 使用了 sqlalchemy 模块。当我直接从 ec2 服务器运行 analyzer.py 时,脚本运行得很好。想法?

4

1 回答 1

1

原因是当使用 ssm runShellScript 向 ec2 实例发送命令时,您以“root”身份运行,我假设它没有安装 sqlalchemy 库。您需要以“ec2-user”(或您安装了 sqlalchemy 的任何用户帐户)身份运行。

我使用以下方法使其工作:

  1. 在 /home/ec2-user/run_analyzer.sh 中创建一个包含以下内容的文件:
cd <folder that contains analyzer.py>
python analyzer.py
  1. 使 /home/ec2-user/run_analyzer.sh 可执行(例如,使用“chmod +x /home/ec2-user/run_analyzer.sh”)
  2. 在您的 boto3 脚本中使用 ssm,如下所示:
import boto3
ssm_client = boto3.client('ssm')
ssm_client.send_command(
    InstanceIds=["<put your instance id here>"],
    DocumentName="AWS-RunShellScript",
    Parameters={'commands': [
       "sudo -i -u ec2-user /home/ec2-user/run_analyzer.sh"
    ]} )
于 2021-01-09T22:29:37.633 回答