Ошибка ‘ImportError: нет модуля с именем sqlalchemy’ при попытке запустить скрипт ec2 python из ssm

#python #amazon-ec2 #ssm

#python #amazon-ec2 #ssm

Вопрос:

Я пытаюсь запустить скрипт python на моем экземпляре ec2, используя ssm runShellScript из Lambda. При тестировании с помощью простого скрипта, который создает текстовый файл, он запускается без проблем. Я вижу текстовый файл в ec2. Но при попытке запустить предполагаемый скрипт python (analyzer.py ) Я получаю следующую ошибку: ‘ImportError: нет модуля с именем sqlalchemy’

Скрипт analyzer.py использует модуль sqlalchemy. Когда я напрямую запускаю analyzer.py с сервера ec2 скрипт работает просто отлично. Мысли?

Комментарии:

1. Когда вы запускаете скрипт непосредственно на ec2 вручную, какой интерпретатор python вы используете? Вы используете virtualenv?

2. Нет virtualenv… просто зайдите в каталог и запустите ‘python analyzer.py arg’

3. Можете ли вы поделиться сценарием и полным сообщением об ошибке из ssm?

4. ----------ERROR------- Traceback (most recent call last): File "analyzer.py", line 16, in <module> import sqlalchemy ImportError: No module named sqlalchemy Однако я не смогу поделиться скриптом!

Ответ №1:

Причина в том, что при отправке команды экземпляру ec2 с использованием ssm runShellScript вы запускаетесь как «root», в котором, как я полагаю, не установлена библиотека sqlalchemy. Вам нужно будет запускаться как «ec2-user» (или любая учетная запись пользователя, в которой вы установили sqlalchemy).

Я использовал следующий метод, чтобы заставить его работать:

  1. Создайте файл по адресу /home/ec2-user/run_analyzer.sh со следующим содержимым:
 cd <folder that contains analyzer.py>
python analyzer.py
  
  1. Make /home/ec2-user/run_analyzer.sh исполняемый файл (например, используйте «chmod x /home/ec2-user/run_analyzer.sh «)
  2. Используйте ssm следующим образом в вашем скрипте boto3:
 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"
    ]} )