使用Go构建Lambda函数时检查日志

kse8i1jr  于 9个月前  发布在  Go
关注(0)|答案(4)|浏览(57)

我跟随官方的Building Lambda functions with Go到它的blank-go/ demo,从中可以看到handleRequest函数在其整个过程中几乎都使用了log.Print

func handleRequest(ctx context.Context, event events.SQSEvent) (string, error) {
    // event
    eventJson, _ := json.MarshalIndent(event, "", "  ")
    log.Printf("EVENT: %s", eventJson)
    // environment variables
    log.Printf("REGION: %s", os.Getenv("AWS_REGION"))
    log.Println("ALL ENV VARS:")
    for _, element := range os.Environ() {
        log.Println(element)
    }
    // request context
    lc, _ := lambdacontext.FromContext(ctx)
    log.Printf("REQUEST ID: %s", lc.AwsRequestID)
    // global variable
    log.Printf("FUNCTION NAME: %s", lambdacontext.FunctionName)
    // context method
    deadline, _ := ctx.Deadline()
    log.Printf("DEADLINE: %s", deadline)
. . .

但是,我找不到可以阅读这些日志的地方。请帮帮我

更新:

我已经运行/测试了我的blank-go/函数很多次,但是每次我点击测试中的日志链接:

我得到一个空的视图:

IE,“没有日志流。"
所以我 * 正在 * 检查正确的位置,因此现在的问题变成了,为什么没有日志 * 尽管 * 我已经运行了我的测试 * 多次 *?

jm2pwxwz

jm2pwxwz1#

请参阅the official documentation中的Lambda日志记录先决条件信息。具体来说,您需要为Lambda函数分配一个角色,该函数有权在CloudWatch中创建日志。Amazon为Lambda函数提供了一个名为AWSLambdaBasicExecutionRole的角色,该角色包括将日志发送到CloudWatch的必要权限。

u91tlkcl

u91tlkcl2#

Lambda日志在Cloudwatch中。您可以按照this AWS guide访问它们。您也可以使用SAM,但其工作方式略有不同。AWS也有Lambda logging in Go的页面。
您可以通过两种方式在Cloudwatch中查看日志,从控制台或从命令行。如果使用Console,请参阅this guide by AWS。在命令行中,您可以修改此bash脚本以获取参数。

#!/bin/bash
aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out
sed -i'' -e 's/"//g' out
sleep 15
aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name stream1 --limit 5
lyr7nygr

lyr7nygr4#

Lambda控制台只是需要一些时间来显示日志。直接在cloudwatch控制台上显示更快。或者使用cli中很棒的https://github.com/TylerBrock/saw。这不会神奇地让日志出现,它只是一个方便的工具。
对于Lambda函数,总是至少有“START,...REPORT”条目,除非该函数在角色策略中不具有cloudwatch权限。
通常这只需要几秒钟。检查Lambda权限

因为有一个日志组,所以第一个策略似乎在那里。
你能从lambda控制台提供这个屏幕截图,展开第一张图片吗?底部还显示了日志。示例:

相关问题