2016-04-20 18 views
6

Sto tentando di utilizzare AWS Lambda per eseguire l'introspezione del pacchetto python.Strumenti di setup non trovati su AWS Lambda

Quello che sto cercando di fare è, su un git push, eseguire il checkout di un pacchetto, installare le sue dipendenze (le dipendenze del pacchetto sono richieste per l'introspezione) ed eseguire gli strumenti. Per impostazione predefinita, AWS non ha pip installate (si suppone che impacchettano le proprie dipendenze), quindi raggruppo pip con la funzione lambda.

Ogni altra parte di my lambda funziona, tranne che per provare a installare le dipendenze del pacchetto. Quando si tenta di utilizzare il mio pip in bundle con il pacchetto check-out, non riesce il tentativo di eseguire setuptools:

Collecting alembic==0.8.3 (from -r /tmp/tmpnx0tY0/requirements.txt (line 1)) 
Downloading alembic-0.8.3.tar.gz (935kB) 
Complete output from command python setup.py egg_info: 
Traceback (most recent call last): 
File "<string>", line 1, in <module> 
ImportError: No module named setuptools 
---------------------------------------- 
Command "python setup.py egg_info" failed with error code 1 in /tmp/tmp30m2KN/alembic 

Ho provato di tutto: aggiungere il percorso corrente (con setuptools) al percorso, copiare setuptools alla temperatura directory, eseguire pip install setuptools, passare le opzioni utilizzando --global-options, provato a pOpen con un env specificando PYTHONPATH, anche provato a utilizzare le versioni precedenti di pip con: pip install -r requirements.txt --download --no-install. Niente sembra funzionare.

Come posso ottenere questa chiamata python setup.py egg_info per individuare correttamente setuptools?

+0

Quindi si sta tentando di installare pacchetti pip in Lambda durante il runtime della funzione? – birnbaum

+0

@birnbaum Sì. Poiché questa introspezione può inserire un numero qualsiasi di pacchetti software, non posso sapere quali dipendenze ho bisogno in anticipo. La soluzione è quella di installarlo in fase di runtime, ma mi sto occupando di questo problema quando cerco di farlo. –

+0

Hai incluso solo pip con il tuo lambda oppure hai impacchettato un'intera struttura di directory virtualenv? – Leon

risposta

0

Hai mai pensato di utilizzare Jenkins (o qualsiasi altro strumento CI) per collegarti al tuo repository Git, creare il repository su push e quindi caricare il lambda pacchettizzato con tutte le dipendenze su S3 prima di eseguirlo?

All'interno di AWS Lambdas, è possibile scaricare solo i file nella cartella/tmp e si dispone di un limite di 50mb di spazio. Questo 50mb include anche lo spazio consumato dalla funzione lambda. Lambdas è zippato e non contiene pip per un motivo.

0

Ho usato Lambda per un po 'e non penso che Lambda lo supporti. È necessario utilizzare i propri strumenti CI (Jenkins è una buona scelta). Altrimenti, è necessario crearlo sul tuo locale quindi utilizzare il plugin AWS Lambda per caricare il tuo codice con le dipendenze installate.