Gibt es irgendeine Möglichkeit, AWS-CLI in AWS Lambda auszuführen? Es scheint nicht vorinstalliert zu sein. (Ich habe mit "what aws" über Node.js Kind-Prozess überprüft, und es war nicht vorhanden.)Anruf aws-cli von AWS Lambda
Antwort
nicht, wenn Sie es sind (und alle seine Abhängigkeiten) als Teil Dein Deployment-Paket, selbst dann müßtest du es in Python aufrufen, da Lambda dir nicht erlaubt, Shell-Kommandos auszuführen Wenn Sie dorthin gelangen, würde ich nicht empfehlen, eine Synchronisierung in einer Lambda-Funktion durchzuführen, da Sie auf eine Ausführungszeit von maximal 5 Minuten beschränkt sind. Hinzu kommt, dass sich die zusätzliche Spin-Up-Zeit in vielen Fällen nicht lohnt, da Sie für jeden 100ms-Chunk zahlen.
So können Sie können, aber Sie sollten wahrscheinlich nicht.
EDIT: Lambda tut können Sie Shell
ausführen BefehleSiehe https://alestic.com/2016/11/aws-lambda-awscli/ für einen guten Überblick darüber, wie die Bündelung der AWS-CLI Python zu erreichen Paket für den Einsatz in Lambda – Noah
Sie können das AWS node.js SDK, die in Lambda verfügbar sein sollte, ohne es zu installieren.
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) {
...
});
Soweit ich Sie am meisten bekommen kann sagen, die alle, wenn nicht cli Funktionalität die vollständige Dokumentation finden Sie hier:. http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html
Danke Ryan, aber ich will einige Funktionen, die NICHT in node.js SDK beenden und existieren in aws-cli, weil es einfacher scheint, aws-cli zu verwenden in einigen Fällen, wie S3 über Buckets synchronisieren. –
Ah, ich sehe jetzt. In diesem Fall scheint es, dass Sie es bei jedem Lauf installieren müssen, der irgendwie schmerzhaft und ineffizient klingt. – Ryan
Sie können es nicht installieren, yum und pip installieren ist nicht in nodejs Umgebung verfügbar – halil
Ich denke, dass Sie Ihre Trigger-Logik von der Aktion trennen sollte. Setzen Sie einen Container mit aws cli auf einen anderen ec2 Und verwenden Sie aws Lambda, um das in eine Aktion auszulösen.
Sie können Java oder Nodejs-Code aufschreiben und dann AWS-Funktionen von dort aufrufen.
aws-cli ist ein Python-Paket. Um es für eine AWS Lambda-Funktion verfügbar zu machen, müssen Sie es mit Ihrer Zip-Datei für die Funktion packen.
1) Starten Sie eine EC2-Instanz mit 64-Bit-Amazon Linux;
2) Erstellen eines Python virtualenv:
mkdir ~/awscli_virtualenv
virtualenv ~/awscli_virtualenv
3) Aktivieren virtualenv:
cd ~/awscli_virtualenv/bin
source activate
4) Installieren AWS-cli und pyyaml:
pip install awscli
python -m easy_install pyyaml
5) Ändern Sie die erste Zeile des aws Python-Skript:
sed -i '1 s/^.*$/\#\!\/usr\/bin\/python/' aws
6) Deaktivieren virtualenv:
deactivate
7) Machen Sie ein Verzeichnis mit allen Dateien, die Sie brauchen, um run aws-cli auf 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) Erstellen Sie eine Funktion (Python oder NodeJS), die aws-cli nennen: oben
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;
});
}
Erstellen Sie die index.js-Datei (mit dem Code:
Zum Beispiel (NodeJS) oder Code) auf ~/awscli_lambda/index.js
9) Zip alles (aws-cli Dateien und Abhängigkeiten und Ihre Funktion):
cd ~
zip -r awscli_lambda.zip awscli_lambda
- 1. Upload von AWS Lambda zu AWS S3
- 2. Dynamischer Lambda Ausdruck Anruf
- 3. awscli Erste Schritte Fehler
- 4. Java generic Lambda Anruf
- 5. AWS Lambda Throughput
- 6. AWS Lambda - CloudWatch Ereignistyp
- 7. AWS Lambda S3Event-Deserialisierung
- 8. AWS Lambda: org.apache.http.conn.ConnectTimeoutException
- 9. AWS Lambda Dynamischer Endpunkt
- 10. Ein AWS Lambda anhören
- 11. Unterschiedliche Ausgabe in AWS PHP SDK als in AWSCLI
- 12. Python Pusher AWS Lambda
- 13. Pandas & AWS Lambda
- 14. AWS Lambda Java Kompatiblität
- 15. AWS Lambda NoClassDefFoundError
- 16. AWS Lambda-Image beschädigt
- 17. AWS Lambda und MongoDB
- 18. AWS Lambda Logging Error
- 19. Mocking in AWS Lambda
- 20. AWS Lambda TooManyRequestsException: Rate
- 21. AWS Lambda + Python-ldap
- 22. AWS SQS-Berechtigungen für AWS Lambda
- 23. AWS SNS als Quelle für AWS Lambda
- 24. AWS Lambda: Wie Lambda-Funktion von einfachen Java-Klasse
- 25. Mit AWS Cognito und AWS Lambda zur Authentifizierung von Benutzern
- 26. AWS Lambda, AWS-API-Gateway und Sichern von REST-Endpunkten
- 27. Erstellen von RESTful-Diensten in AWS Lambda
- 28. JVM GC Protokollierung von AWS Lambda?
- 29. Ausführen von 'Git' in AWS Lambda
- 30. Gibt Daten von asynchronem AWS Lambda zurück
Irgendwelche Fortschritte dabei? Ich suche die gleiche Frage, ich brauche den Befehl "aws opsworks register". Es saugt, dass sie diese Fähigkeit nicht in allen Lambda Sprachen zur Verfügung stellen – Casper