
我正在嘗試從 go1.x 遷移到 AL2 運行時來部署 Lambda 函數,但我在如何執行此操作時遇到了麻煩。我使用 Serverless Framework 與 make 結合進行部署。這是我目前使用的 Makefile:
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
任何幫助將不勝感激
更新: 我發現這篇文章應該有助於遷移
當我實施它並確保它按預期工作時,我會報告
更新2:
我能夠使用 SAM local 在新的 AL2 運行時中成功測試我的功能使用此 AWS 範例 AL2 使用 Go 實現。我將 common.go 檔案移至新的儲存庫,並使用它成功建立了一個 go 模組(然後將其匯入到我的函數中)。這只是一個開始,因為我還沒有透過無伺服器部署我的功能,但這可能對其他人有幫助。
答案1
我發現您實際上可以使用兩個(或更多)檔案進行 go 構建,並將其運行/部署到 AL2 運行時。確保您的第二個檔案(在我的例子中為 common.go)具有可公開存取的函數/結構。另外,請確保將 github.com/aws/aws-lambda-go/lambda 更新至最新版本。並使用這個github 倉庫範例幫助您設計無伺服器模板。
這是我的 Makefile 的範例,用於使用無伺服器框架部署到 AWS Lambda:
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