
Ich versuche, von go1.x auf die AL2-Laufzeitumgebung zu migrieren, um meine Lambda-Funktionen bereitzustellen, habe aber Probleme damit. Ich verwende das Serverless Framework für die Bereitstellung in Verbindung mit make. Hier ist das Makefile, das ich derzeit verwende:
go_apps = bin/func1 bin/func2 bin/fun3
bin/% : functions/%.go functions/common.go
env GOOS=linux go build -ldflags="-s -w" -o $@ $< functions/common.go
build: $(go_apps)
clean:
rm -rf ./bin
deploy:
sls deploy --verbose
install: build deploy
Für jede Hilfe wäre ich sehr dankbar
Aktualisieren: Ich habe diesen Artikel gefunden, der bei der Migration helfen sollte
Ich melde mich wieder, wenn ich es implementiert habe und sicher bin, dass es wie vorgesehen funktioniert.
Aktualisierung 2:
Ich konnte SAM local verwenden, um meine Funktionen in der neuen AL2-Laufzeit erfolgreich zu testenmit Hilfe dieser AWS-Beispiel-AL2-Implementierung mit Go. Ich habe meine common.go-Datei in ein neues Repository verschoben und damit erfolgreich ein Go-Modul erstellt (das dann in meine Funktionen importiert wurde). Dies ist nur ein Anfang, da ich meine Funktionen noch nicht über Serverless bereitgestellt habe, aber dies könnte in der Zwischenzeit für andere hilfreich sein.
Antwort1
Ich habe herausgefunden, dass man tatsächlich einen Go-Build mit zwei (oder mehr) Dateien erstellen und ihn in einer AL2-Runtime ausführen/bereitstellen kann. Stellen Sie sicher, dass Ihre zweite Datei (in meinem Fall common.go) die Funktionen/Strukturen öffentlich zugänglich hat. Stellen Sie außerdem sicher, dass Sie github.com/aws/aws-lambda-go/lambda auf die neueste Version aktualisieren. Und verwenden Sie diesGitHub-Repository-Beispielum Ihnen bei Ihrer serverlosen Vorlage zu helfen.
Dies ist ein Beispiel meines Makefiles, das zum Bereitstellen in AWS Lambda mithilfe des Serverless-Frameworks verwendet wird:
go_bootstrap = func1 func2 func3 \
build:
for n in $(go_bootstrap); \
do \
echo "$$n"; \
env GOOS=linux go build -o ./build/"$$n"/bootstrap functions/common.go functions/"$$n".go; \
zip -j ./build/zip/"$$n".zip ./build/"$$n"/bootstrap; \
done
deploy:
sls deploy --verbose
install: build deploy