
Lambda 함수를 배포하기 위해 go1.x에서 AL2 런타임으로 마이그레이션하려고 하는데 어떻게 해야 할지 문제가 있습니다. 저는 make와 함께 배포를 위해 Serverless Framework를 사용합니다. 현재 내가 사용하는 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 로컬을 사용하여 새 AL2 런타임에서 내 기능을 성공적으로 테스트할 수 있었습니다.Go를 사용한 AWS 샘플 AL2 구현의 도움으로. common.go 파일을 새 저장소로 이동하고 이를 사용하여 go 모듈을 성공적으로 구축했습니다(그런 다음 내 기능으로 가져왔습니다). 아직 서버리스를 통해 기능을 배포하지 않았기 때문에 이는 시작에 불과하지만 그동안 다른 사람들에게 도움이 될 수 있습니다.
답변1
실제로 두 개 이상의 파일로 go 빌드를 수행하고 이를 AL2 런타임에 실행/배포할 수 있다는 것을 알았습니다. 두 번째 파일(제 경우에는 common.go)에 공개적으로 액세스할 수 있는 함수/구조체가 있는지 확인하세요. 또한 github.com/aws/aws-lambda-go/lambda를 최신 버전으로 업데이트했는지 확인하세요. 그리고 이것을 사용하세요github 저장소 샘플서버리스 템플릿을 지원하는 데 도움이 됩니다.
다음은 서버리스 프레임워크를 사용하여 AWS Lambda에 배포하는 데 사용되는 Makefile의 샘플입니다.
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