API网关+Lambda:我的打印输出在哪里?

问题描述 投票:0回答:1

我正在学习API网关。我设置了一个 Lambda 函数来实现其中一条路由。我在 Lambda 函数中放置了一些打印语句,以查看传入的事件对象的确切形式。如果我按 Lambda 屏幕中的“测试”按钮,它会显示一个简洁的日志,其中包括打印语句的输出。但是,如果我在正确设置测试参数后按下 API 屏幕中的“测试”按钮,我会得到一份详细的日志,其中似乎不包含打印语句的输出。对于这些调用,如果我查看 Cloudwatch 中相应的日志组,我也不会在该日志中看到打印语句的输出。

有什么方法可以得到这个输出吗?我需要使用记录器界面吗?我知道我调用相同函数的唯一方法是,当我遇到这些错误时,我得到了相同的语法错误。我的测试代码就是这么简单:

def lambda_handler(event, context):
    print("hello")
    print("hello")
    print(event)
    print("hello")
    print("hello")
    return event

来自 Lambda 的日志:

**Function Logs**
START RequestId: 5a981182-0c07-47ab-9870-a126077a47fb Version: $LATEST
hello
hello
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
hello
hello
END RequestId: 5a981182-0c07-47ab-9870-a126077a47fb
REPORT RequestId: 5a981182-0c07-47ab-9870-a126077a47fb  Duration: 1.59 ms   Billed Duration: 2 ms   Memory Size: 128 MB Max Memory Used: 72 MB  Init Duration: 359.06 ms

API 测试屏幕的日志:

Execution log for request 9e9fc8df-5865-4511-b98c-170dc200cdbf
Tue Oct 17 21:24:07 UTC 2023 : Starting execution for request: 9e9fc8df-5865-4511-b98c-170dc200cdbf
Tue Oct 17 21:24:07 UTC 2023 : HTTP Method: POST, Resource Path: /blast-jobs
Tue Oct 17 21:24:07 UTC 2023 : Method request path: {}
Tue Oct 17 21:24:07 UTC 2023 : Method request query string: {id=12543}
Tue Oct 17 21:24:07 UTC 2023 : Method request headers: {}
Tue Oct 17 21:24:07 UTC 2023 : Method request body before transformations: 
Tue Oct 17 21:24:07 UTC 2023 : Endpoint request URI: https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:680678151940:function:blast-job-create/invocations
Tue Oct 17 21:24:07 UTC 2023 : Endpoint request headers: {x-amzn-lambda-integration-tag=9e9fc8df-5865-4511-b98c-170dc200cdbf, Authorization=***********************************************************************************************************************************************************************************************************************************************************************************************************5b1b40, X-Amz-Date=20231017T212407Z, x-amzn-apigateway-api-id=z7p03y8fsl, X-Amz-Source-Arn=arn:aws:execute-api:us-west-2:680678151940:z7p03y8fsl/test-invoke-stage/POST/blast-jobs, Accept=application/json, User-Agent=AmazonAPIGateway_z7p03y8fsl, X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHwaCXVzLXdlc3QtMiJGMEQCIFAlRNi2qWdb/t4Ns7aPhBEL4xS8S+RNosv3YDwwPZ62AiBtBEDMynu2sHifcWuRMp1ENJkn0Lw6A4NpHc+kiCPjiCq5BQiV//////////8BEAUaDDEwOTM1MTMwOTQwNyIM0aToxb8NiSJg8PjnKo0FV/S77p/giiwY1oGpDmFGbblLZN1SiE5M4XQr7DmilAwgielGxojWaFxi84R7A3W+0wcuB4kDcLomVgp2I+K4T3BdTqytzi+fr41UvYkVdfrzEjymAWrR+JtzgFjSaD+3W7cX3Mfl+0W/uj0YVQ9P+TUTOsu5Wk [TRUNCATED]
Tue Oct 17 21:24:07 UTC 2023 : Endpoint request body after transformations: 
Tue Oct 17 21:24:07 UTC 2023 : Sending request to https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:680678151940:function:blast-job-create/invocations
Tue Oct 17 21:24:08 UTC 2023 : Received response. Status: 200, Integration latency: 513 ms
Tue Oct 17 21:24:08 UTC 2023 : Endpoint response headers: {Date=Tue, 17 Oct 2023 21:24:08 GMT, Content-Type=application/json, Content-Length=2, Connection=keep-alive, x-amzn-RequestId=f7561b7d-f61e-4b8d-b55b-9cf1b77f819a, x-amzn-Remapped-Content-Length=0, X-Amz-Executed-Version=$LATEST, X-Amzn-Trace-Id=root=1-652efb77-e9cf5f6c51fdabede9c58813;sampled=0;lineage=1dc83a0a:0}
Tue Oct 17 21:24:08 UTC 2023 : Endpoint response body before transformations: {}
Tue Oct 17 21:24:08 UTC 2023 : Method response body after transformations: {}
Tue Oct 17 21:24:08 UTC 2023 : Method response headers: {X-Amzn-Trace-Id=Root=1-652efb77-e9cf5f6c51fdabede9c58813;Sampled=0;lineage=1dc83a0a:0, Content-Type=application/json}
Tue Oct 17 21:24:08 UTC 2023 : Successfully completed execution
Tue Oct 17 21:24:08 UTC 2023 : Method completed with status: 200
aws-lambda aws-api-gateway amazon-cloudwatchlogs
1个回答
0
投票

API 网关集成(接收请求并返回响应的事物)是 API 网关的黑匣子。除了通过 HTTP 流输出的内容之外,它无法看到那里发生的任何事情。

另一方面,Lambda 监听运行时容器标准输出并将其转换为 CloudWatch 事件,每行一个。除非您明确拒绝 CloudWatch 授予您的 lambda 运行角色的权限,否则您的所有打印语句都应位于 CloudWatch 中。

对于这些调用,如果我查看 Cloudwatch 中相应的日志组,我也不会在该日志中看到打印语句的输出。

“适当的日志组”是 Lambda 函数日志组还是 API 网关日志组?你的打印语句应该是前者,而不是后者。如果它们不存在,您应该检查您的 Lambda 函数的权限。

© www.soinside.com 2019 - 2024. All rights reserved.