web-dev-qa-db-fra.com

Lancer 'git' dans AWS lambda

J'essaie d'exécuter git dans AWS lambda pour effectuer une extraction d'un référentiel.

Ceci est ma configuration:

  • Je suis en train d'utiliser nodejs 4.3
  • Je n'utilise pas nodegit parce que je veux utiliser le paramètre "--depth = 1", qui n'est pas pris en charge par nodegit.
  • J'ai copié les exécutables git et ssh à partir de l'AMI AMI correcte et les ai ensuite placés dans un dossier "bin" dans le fichier Zip que j'ai téléchargé.
  • Je les ai ajoutés à PATH avec ceci:

->

process.env['PATH'] = process.env['LAMBDA_TASK_ROOT'] + "/bin:" + process.env['PATH'];

Les variables d'entrée sont définies comme ceci:

"checkout_url": "git@...",
"branch":"master

Maintenant, je fais ceci (par souci de concision, j'ai mélangé du pseudo-code dans):

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");

Lancer ceci dans mon ordinateur local en utilisant lambda-local tout fonctionne bien! Mais quand je le teste en lambda, je reçois:

warning: templates not found /usr/share/git-core/templates
PRIV_END: seteuid: Operation not permitted\r
fatal: Could not read from remote repository.
  • L'avertissement est bien sûr, parce que je n'ai pas installé git mais simplement copié le binaire. Est-ce une raison pour laquelle cela ne devrait pas fonctionner?
  • Pourquoi est-ce que git a besoin de "setuid"? J'ai lu que dans certains obus, il est désactivé pour des raisons de sécurité. Il est donc logique que cela ne fonctionne pas en lambda. Peut-on en quelque sorte dire à git de ne pas "avoir besoin" de cette commande?
13
Nathan

Oui, c'est tout à fait possible - vous pouvez le faire en créant votre propre bundle git tar et en annulant l'exécution Lambda.

C'est exactement ce que je fais dans LambCI .

Vous devrez vous assurer que les variables env suivantes sont définies aux emplacements appropriés:

  GIT_TEMPLATE_DIR: '/tmp/myDir/usr/share/git-core/templates'
  GIT_EXEC_PATH: '/tmp/myDir/usr/libexec/git-core'

Je vais créer un référentiel afin de mieux documenter (et rassembler des recettes) certaines des manières dont vous pouvez obtenir une exécution logicielle personnalisée sur AWS Lambda, mais pour l'instant, il existe simplement un problème .

14
Michael Hart

Le problème est que vous ne pouvez pas copier uniquement le binaire git. Vous avez besoin d’une version portable de git et même avec cela, vous passerez un mauvais moment car vous ne pouvez pas garantir que la fonction sur laquelle la fonction lambda est exécutée va être compatible avec le binaire.

En reculant, je m'éloignerais complètement de cette approche. Je clonerais et construirais un paquet que je téléchargerais simplement à peu près de la même façon que vous téléchargez downloadeementmentKeyFromS3Sync. 

0
Mircea