AWS: Migrieren Sie die go1.x-Runtime zu al2, um Lambda-Funktionen bereitzustellen

AWS: Migrieren Sie die go1.x-Runtime zu al2, um Lambda-Funktionen bereitzustellen

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

verwandte Informationen