2016-01-06 3 views
8

Posso scrivere uno script bash all'interno di una funzione Lambda? Ho letto nei documenti di aws che può eseguire codice scritto in Python, NodeJS e Java 8.Lo script bash può essere scritto all'interno di una funzione AWS Lambda

È stato menzionato in alcuni documenti che potrebbe essere possibile utilizzare Bash ma non ci sono prove concrete che lo supportano o alcun esempio

+0

Si desidera scrivere uno script di bash all'interno di una funzione Lambda? O usare lo script di bash come funzione Lambda? Entrambi sono diversi. – helloV

+0

@helloV Vorrei usare lo script bash come funzione Lambda – user5241806

+0

Fammi sapere se la soluzione che ho proposto funziona per te. – helloV

risposta

5

Sono appena riuscito a catturare un comando di shell uname utilizzando Amazon Lambda - Python.

Di seguito è riportato il codice di base.

from __future__ import print_function 

import json 
import commands 

print('Loading function') 

def lambda_handler(event, context): 
    print(commands.getstatusoutput('uname -a')) 

E 'visualizzato l'uscita

START RequestId: 2eb685d3-b74d-11e5-b32f-e9369236c8c6 Version: $LATEST 
(0, 'Linux ip-10-0-73-222 3.14.48-33.39.amzn1.x86_64 #1 SMP Tue Jul 14 23:43:07 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux') 
END RequestId: 2eb685d3-b45d-98e5-b32f-e9369236c8c6 
REPORT RequestId: 2eb685d3-b74d-11e5-b31f-e9369236c8c6 Duration: 298.59 ms Billed Duration: 300 ms  Memory Size: 128 MB Max Memory Used: 9 MB 

Per ulteriori informazioni consulta il link - https://aws.amazon.com/blogs/compute/running-executables-in-aws-lambda/

5

Come lei ha ricordato, AWS non fornisce un modo per scrivere la funzione lambda utilizzando Bash.

Per aggirare il problema, se hai davvero bisogno della funzione di bash, puoi "avvolgere" il tuo script bash in qualsiasi lingua.

Ecco un esempio con Java:

Process proc = Runtime.getRuntime().exec("./your_script.sh"); 

A seconda delle esigenze di business, si dovrebbe considerare l'utilizzo di lingue native (Python, NodeJS, Java) per evitare la perdita di prestazioni.

6

Qualcosa che potrebbe aiutare, sto usando il nodo per chiamare lo script di bash. Ho caricato lo script e il file nodejs in un file zip in lambda, utilizzando il seguente codice come gestore.

exports.myHandler = function(event, context,callback) { 
 
    const execFile = require('child_process').execFile; 
 
    const child = execFile('./test.sh', (error, stdout, stderr) => { 
 
    if (error) { 
 
     callback(error); 
 
    } 
 
    callback(null,stdout); 
 
    }); 
 
}

È possibile utilizzare il callback per restituire i dati necessari.

1

E 'possibile utilizzare il modulo nodo' child_process '.

const exec = require('child_process').exec; 

exec('echo $PWD && ls', (error, stdout, stderr) => { 
    if (error) { 
    console.log("Error occurs"); 
    console.error(error); 
    return; 
    } 
    console.log(stdout); 
    console.log(stderr); 
}); 

Questo visualizzerà la directory di lavoro corrente ed elenca i file.