要分配给Lambda函数的角色(是:在使用Go构建Lambda函数时检查日志)

iyr7buue  于 12个月前  发布在  Go
关注(0)|答案(4)|浏览(134)

我跟随官方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/函数很多次,但每次我从我的测试中点击日志链接:
x1c 0d1x的数据
我看到一个空的画面:



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

2cmtqfgy

2cmtqfgy1#

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

vom3gejh

vom3gejh2#

Lambda日志位于Cloudwatch中。您可以按照this AWS guide访问它们。您也可以使用SAM,但其工作方式略有不同。AWS也有Lambda logging in Go的页面。
您可以通过两种方式查看Cloudwatch中的日志,从控制台或从命令行。如果您使用控制台,请参考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

字符串

64jmpszr

64jmpszr4#

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

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

相关问题