Я использую пакет paramiko в лямбде, чтобы запустить скрипт python на EC2 и получить вывод обратно в лямбду. У меня сложилось впечатление, что когда я запускаю сценарий python из лямбды, тогда сценарий исполняется в EC2 и возвращает вывод в лямбду. Но этого не происходит. Я установил pandas на свой EC2 и запустил простой python скрипт с импортом pandas. Лямбда выдает ошибку, что pandas модуль не найден. Но зачем лямбде нужен pandas модуль. Разве он не должен просто брать вывод из EC2?
Ниже моя лямбда-функция
import boto3
import paramiko
def lambda_handler(event, context):
# boto3 client
client = boto3.client('ec2')
s3_client = boto3.client('s3')
# getting instance information
describeInstance = client.describe_instances()
hostPublicIP=["59.53.239.242"]
# fetchin public IP address of the running instances
# for i in describeInstance['Reservations']:
# for instance in i['Instances']:
# if instance["State"]["Name"] == "running":
# hostPublicIP.append(instance['PublicIpAddress'])
print(hostPublicIP)
# downloading pem filr from S3
s3_client.download_file('paramiko','ec2key.pem', '/tmp/file.pem')
# reading pem file and creating key object
key = paramiko.RSAKey.from_private_key_file("/tmp/file.pem")
# an instance of the Paramiko.SSHClient
ssh_client = paramiko.SSHClient()
# setting policy to connect to unknown host
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
host=hostPublicIP[0]
print("Connecting to : " + host)
# connecting to server
ssh_client.connect(hostname=host, username="ubuntu", pkey=key)
print("Connected to :" + host)
# command list
commands = ["python3 test.py"]
# executing list of commands within server
for command in commands:
print("Executing {command}")
stdin , stdout, stderr = ssh_client.exec_command(command)
print(stdout.read())
print(stderr.read())
return {
'statusCode': 200,
'body': json.dumps('Thanks!')
}
Ниже мой test.py
import pandas
result = 2+2
print(result)