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