Blog

Ausführen einer Git-Binärdatei in AWS Lambda

Joris Conijn

Joris Conijn

Aktualisiert Oktober 16, 2025
3 Minuten

Ausführen einer Git-Binärdatei in AWS Lambda

In manchen Szenarien kann es einfacher sein, eine Binärdatei in einer Lambda-Funktion zu verwenden. In diesem Blogbeitrag zeige ich Ihnen, wie Sie eine Git-Binärdatei in einem AWS Lambda ausführen können.

Für diesen Blogbeitrag werde ich das AWS Serverless Application Model(AWS SAM) verwenden. AWS SAM macht es einfach, Lambda-Funktionen zu erstellen, zu verpacken und bereitzustellen. Die verwendete Vorlage finden Sie auf GitHub. AWS SAM sieht sich die der Ressource an. In diesem Beispiel habe ich Python verwendet, so dass es sich die requirements.txt ansieht. Es sieht sich die in der Datei definierten Pakete an. AWS SAM installiert sie in .aws-sam/build/<ResourceName>. Dieser Ordner wird komprimiert und in Amazon S3 hochgeladen, wenn Sie die Vorlage verpacken und bereitstellen.

Sie können die Funktion auch auf Ihrem eigenen Computer aufrufen. Das erleichtert die Entwicklung und Fehlerbehebung. Um die Funktion aufzurufen, müssen wir sie zunächst erstellen. Danach müssen Sie sie aufrufen. Ich habe ein Makefile erstellt. Weitere Informationen dazu finden Sie in einem meiner früheren Blogs.

make invoke

Sie werden sehen, dass Sie den folgenden Fehler sehen werden:

{
    "errorMessage": "[Errno 2] No such file or directory: 'git'",
    "errorType": "FileNotFoundError"
}

Und das macht doch Sinn, oder? Wir haben den Git-Client nicht installiert. Sie können ihn nicht über die Datei requirements.txt installieren. Das liegt daran, dass er nicht im PyPi-Paketmanager enthalten ist.

Installieren Sie den Git-Client

Wenn Sie sich das Makefile ansehen, können Sie sehen, dass es das tut:

  • Erstellen Sie einen Docker-Container.
    • Installieren Sie git auf dem Container.
    • Verschieben Sie alle Abhängigkeiten in die Struktur /var/task.
    • Zipen Sie den Inhalt des Ordners /var/task.
  • Entpacken Sie die Zip-Datei aus dem Container.
  • Entpacken Sie den Inhalt in den Ordner git_client.
  • sam build kopiert den Inhalt nach .aws-sam/build/GitClient.
  • sam build installiert die Abhängigkeiten aus der requirements.txt.
  • sam invoke verwendet den Inhalt von .aws-sam/build/GitClient, um die Funktion aufzurufen.

Die Git-Binärdatei befindet sich in /var/task/bin. Denn wenn wir den Git-Befehl aufrufen, geben wir auch /var/task/bin als PATH an. Dadurch können wir aufrufen und der Container weiß, dass er aufrufen muss. Die Bibliotheken befinden sich in /var/task/lib. Da wir LD_LIBRARY_PATH auf /var/task/lib gesetzt haben, können die Bibliotheken gefunden werden.

Ich habe eine Dockerdatei erstellt, die public.ecr.aws/lambda/python:3.8 als Basis verwendet. Dies ist die gleiche Laufzeit der Lambda-Funktion. Ich bereite 2 Ordner /var/task/bin und /var/task/lib vor. Dann installiere ich die Pakete git und zip innerhalb des Docker-Kontexts.

Dann kopiere ich die ausführbaren Dateien /usr/bin/git und /usr/libexec/git-core/git-remote-http in den Ordner /var/task/bin.

Wenn Sie versuchen, die Lambda-Funktion zu erstellen und auszuführen, schlägt sie wegen einer fehlenden Bibliothek fehl.

{
    "errorMessage": "git: error while loading shared libraries: libpcre2-8.so.0: cannot open shared object file: No such file or directory",
    "errorType": "Exception"
}

Mit dem Befehl ldd können Sie alle gemeinsam genutzten Bibliotheken finden. Wir werden dies nutzen, um die benötigten Bibliotheken zu identifizieren und sie in den Ordner /var/task/lib/ zu kopieren.

Sobald Sie alle Abhängigkeiten eingerichtet haben. Sie können die git --version abrufen, die innerhalb der Lambda-Funktion ausgeführt wird.

Git Version: git Version 2.32.0

Wenn Sie dies mit den Paketen awscli und git-remote-codecommit kombinieren. Sie können ein CodeCommit-Repository klonen, Ihre Aktionen durchführen und es erneut committen.

Fazit

Es ist möglich, Binärdateien in AWS Lambda einzubetten und sie zu verwenden. Es mag Sie einige Mühe kosten. Aber es eröffnet Ihnen neue Möglichkeiten, die Sie vorher vielleicht nicht in Betracht gezogen haben.

In meinem nächsten Blog werden Sie lesen, wie Sie damit zwei CodeCommit-Repositories synchronisieren können.

Foto von Emile Perron auf Unsplash

Verfasst von

Joris Conijn

Joris is the AWS Practise CTO of the Xebia Cloud service line and has been working with the AWS cloud since 2009 and focussing on building event-driven architectures. While working with the cloud from (almost) the start, he has seen most of the services being launched. Joris strongly believes in automation and infrastructure as code and is open to learning new things and experimenting with them because that is the way to learn and grow.

Contact

Let’s discuss how we can support your journey.