尝试从ssm运行ec2 python脚本时出现'ImportError:No module named sqlalchemy'错误

时间:2019-04-07 09:28:43

标签: python amazon-ec2 ssm

我试图使用Lambda的ssm runShellScript在ec2实例上运行python脚本。使用创建文本文件的简单脚本进行测试时,它可以正常运行。我可以在ec2上看到该文本文件。但是,当尝试运行预期的python脚本(analyzer.py)时,出现以下错误:'ImportError:没有名为sqlalchemy的模块'

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

1 个答案:

答案 0 :(得分: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"
    ]} )