我使用无服务器框架创建了一个简单的Go Lambda。我预计(根据文档)fmt.Println
或log.Println
的所有输出都会显示在Cloudwatch中。但我没有看到它。
以下是我为纯粹用于测试目的而放置的一行示例:
func Handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
fmt.Println("Hello from lambda")
(...)
我确定权限是正确的,因为我看到了日志组,并且有一些Cloudwatch条目可以查看此lambda。我实际上可以看到在CloudFormation中创建了日志组,所以我确定这不是问题。但我只是看不到CloudWatch中任何Println
语句的输出。这就是我所看到的:
START RequestId: fd48461b-3ecd-11e8-9e32-594932db04f2 Version: $LATEST
END RequestId: fd48461b-3ecd-11e8-9e32-594932db04f2
REPORT RequestId: fd48461b-3ecd-11e8-9e32-594932db04f2 Duration: 13.82 ms Billed Duration: 100 ms Memory Size: 256 MB Max Memory Used: 21 MB
我尝试了各种其他Print
方法(如Printf
),但你不会感到惊讶,没有改变任何东西。
我错过了什么?
好吧,那令人尴尬......当然,你需要在运行make
之前运行sls deploy
......如果你不这样做,你将始终部署陈旧的代码。我会原谅自己,因为这只是我在Go的第二天,但同样愚蠢。
我已经通过添加Makefile
和deploy
来更新我的install
,如下所示:
build:
dep ensure
env GOOS=linux go build -ldflags="-s -w" -o bin/hello hello/main.go
env GOOS=linux go build -ldflags="-s -w" -o bin/world world/main.go
deploy:
sls deploy
install: build deploy
make install
现在构建,然后部署,防止此问题再次发生。
对不起,我之前没有使用过Lambda。也许使用glog库是有帮助的.see the glog