nodejs node from example aws amazon-web-services aws-lambda aws-cli aws-sdk-nodejs

amazon-web-services - node - aws-sdk npm



Llamar aws-cli de AWS Lambda (5)

¿Hay ALGUNA forma de ejecutar aws-cli dentro de AWS Lambda? No parece estar preinstalado. (He comprobado con "which aws" a través del proceso secundario Node.js, y no existía).


Creo que debes separar tu lógica de activación de la acción. Pon un contenedor con aws cli en otro ec2 Y usa aws lambda para activar eso en una acción.


No a menos que lo incluya (y todas sus dependencias) como parte de su paquete de implementación. Incluso entonces deberías llamarlo desde dentro de Python ya que Lambda no te permite ejecutar comandos de shell. Incluso si llega allí, no recomendaría tratar de hacer una sincronización en una función Lambda ya que está limitado a un máximo de 5 minutos de tiempo de ejecución. Además de eso, el tiempo adicional de aceleración simplemente no vale la pena en muchos casos, ya que está pagando por cada pedazo de 100ms.

Así que puedes , pero probablemente no deberías.

EDITAR: Lambda te permite ejecutar comandos de shell


Puede escribir el código java o nodejs y luego llamar a las funciones AWS desde allí.


Puede usar el SDK de node.js de AWS, que debería estar disponible en Lambda sin instalarlo.

var AWS = require(''aws-sdk''); var lambda = new AWS.Lambda(); lambda.invoke({ FunctionName: ''arn:aws:lambda:us-west-2:xxxx:function:FN_NAME'', Payload: {}, }, function(err, result) { ... });

Por lo que puedo decir, obtienes la mayor parte, si no toda la funcionalidad cli. Consulte la documentación completa aquí: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html


aws-cli es un paquete de Python. Para que esté disponible en una función AWS Lambda, debe empaquetarla con su archivo zip de función.

1) Inicie una instancia de EC2 con Amazon Linux de 64 bits;

2) Crear un virtualenv de pitón:

mkdir ~/awscli_virtualenv virtualenv ~/awscli_virtualenv

3) Activar virtualenv:

cd ~/awscli_virtualenv/bin source activate

4) Instalar aws-cli y pyyaml:

pip install awscli python -m easy_install pyyaml

5) Cambie la primera línea del script python aws:

sed -i ''1 s/^.*$//#/!//usr//bin//python/'' aws

6) Desactivar virtualenv:

deactivate

7) Crea un directorio con todos los archivos que necesitas para ejecutar aws-cli en lambda:

cd ~ mkdir awscli_lambda cd awscli_lambda cp ~/awscli_virtualenv/bin/aws . cp -r ~/awscli_virtualenv/lib/python2.7/dist-packages . cp -r ~/awscli_virtualenv/lib64/python2.7/dist-packages .

8) Crea una función (python o nodejs) que invocará aws-cli:

Por ejemplo (nodejs):

var Q = require(''q''); var path = require(''path''); var spawn = require(''child-process-promise'').spawn; exports.handler = function(event, context) { var folderpath = ''/folder/to/sync''; var s3uel = ''s3://name-of-your-bucket/path/to/folder''; var libpath = path.join(__dirname, ''lib''); var env = Object.create(process.env); env.LD_LIBRARY_PATH = libpath; var command = path.join(__dirname, ''aws''); var params = [''s3'', ''sync'', ''.'', s3url]; var options = { cwd: folderpath }; var spawnp = spawn(command, params, options); spawnp.childProcess.stdout.on(''data'', function (data) { console.log(''[spawn] stdout: '', data.toString()); }); spawnp.childProcess.stderr.on(''data'', function (data) { console.log(''[spawn] stderr: '', data.toString()); }); return spawnp .then(function(result) { if (result[''code''] != 0) throw new Error(["aws s3 sync exited with code", result[''code'']].join('''')); return result; }); }

Cree el archivo index.js (con el código anterior o su código) en ~ / awscli_lambda / index.js

9) Comprima todo (archivos aws-cli y dependencias y su función):

cd ~ zip -r awscli_lambda.zip awscli_lambda