Ich versuche, Git in AWS Lambda ausführen, um ein Auschecken eines Repository zu machen.Ausführen von 'Git' in AWS Lambda
Dies ist mein Setup:
- ich verwende NodeJS 4.3
- Ich verwende nicht nodegit, weil ich die "--depth = 1" Parameter verwenden möchten, die nicht von nodegit unterstützt wird.
- Ich habe die git und ssh ausführbare Datei von der korrekten AWS AMI kopiert und dann in einen "bin" Ordner in der Zip hochgeladen.
- Ich habe sie mit diesem zu PFAD:
->
process.env['PATH'] = process.env['LAMBDA_TASK_ROOT'] + "/bin:" + process.env['PATH'];
Die Eingangsgrößen wie folgt festgelegt sind:
"checkout_url": "[email protected]",
"branch":"master
Jetzt mache ich dies (der Kürze halber, ich gemischt Pseudo-Code in):
downloadDeploymentKeyFromS3Sync('/tmp/ssh_key');
fs.chmodSync("/tmp/ssh_key",0600);
process.env['GIT_SSH_COMMAND'] = 'ssh -o StrictHostKeyChecking=no -i /tmp/ssh_key';
execSync("git clone --depth=1 " + checkout_url + " --branch " + branch + " /tmp/checkout");
Das läuft in meinem lokalen Computer mit lambda-local alles funktioniert gut! Aber wenn ich es in Lambda testen, die ich erhalten:
warning: templates not found /usr/share/git-core/templates
PRIV_END: seteuid: Operation not permitted\r
fatal: Could not read from remote repository.
- Die „Warnung“ ist natürlich, weil ich nicht git nicht installiert hat, sondern nur die binäre kopiert. Ist das ein Grund, warum das nicht funktionieren sollte?
- Warum braucht Git "setuid"? Ich habe gelesen, dass das in einigen Shells aus Sicherheitsgründen deaktiviert ist. Es macht also Sinn, dass es in Lambda nicht funktioniert. Kann git irgendwie angewiesen werden, diesen Befehl nicht "zu brauchen"?
Was haben Sie in LambCI getan, die den Aufruf von seteuid() umgangen haben? Ich sehe noch nichts anderes als die offene Frage? –
Wenn ich git-2.4.3.tar von LambCI mit ssh benutze, bekomme ich die Fehlermeldung 'ssh: error beim Laden von shared libraries: libfipscheck.so.1: kann die geteilte Objektdatei nicht öffnen: Keine solche Datei oder dieses Verzeichnis '. Ich glaube, Sie müssen auch LD_LIBRARY_PATH =/tmp/myDir/usr/lib64 setzen. –