Aws lambda 我是否可以获得有关AWS Lambda请求ID的信息,例如触发器?
在我的日志中,我发现Aws lambda 我是否可以获得有关AWS Lambda请求ID的信息,例如触发器?,aws-lambda,amazon-cloudwatch,Aws Lambda,Amazon Cloudwatch,在我的日志中,我发现 START RequestId: 123a1a12-1234-1234-1234-123456789012 Version: $LATEST 对于AWS lambda的每次调用。是否有可能获得有关请求的更多信息,例如,是什么触发了请求?我不知道您所说的是什么触发了请求?如果它连接到API网关,那么请求将通过网关代理到Lambda。在这种情况下,网关触发了它,即使它是一个代理请求 此外,您还可以扩展网关,将其他请求信息传递给Lambda 此外,要将请求详细信息附加到您看到的
START RequestId: 123a1a12-1234-1234-1234-123456789012 Version: $LATEST
对于AWS lambda的每次调用。是否有可能获得有关请求的更多信息,例如,是什么触发了请求?我不知道您所说的
是什么触发了请求?如果它连接到API网关,那么请求将通过网关代理到Lambda。在这种情况下,网关触发了它,即使它是一个代理请求
此外,您还可以扩展网关,将其他请求信息传递给Lambda
此外,要将请求详细信息附加到您看到的RequestID,您可以检查上下文.awsRequestId
我假设您想要进行某种形式的日志监视,在这种情况下,我认为您可以将这些请求信息(头、查询、参数、正文)捆绑起来,并将其与awsRequestId一起发送到日志聚合器。
如果有帮助,请告诉我
lambda函数有两个参数:事件和
正常调用如下所示:
{
"event": {
"version": "0",
"id": "abcdefgh-1234-5678-1234-abcdefghijkl",
"detail-type": "Scheduled Event",
"source": "aws.events",
"account": "123456789012",
"time": "2018-01-01T12:00:00Z",
"region": "us-east-1",
"resources": [
"arn:aws:events:us-east-1:123456788901:rule/foo"
],
"detail": {}
},
"context": "<__main__.LambdaContext object at 0x123456ax1234>"
}
{
“事件”:{
“版本”:“0”,
“id”:“abcdefgh-1234-5678-1234-abcdefghijkl”,
“详细信息类型”:“计划事件”,
“来源”:“aws.events”,
“账户”:“123456789012”,
“时间”:“2018-01-01T12:00:00Z”,
“区域”:“us-east-1”,
“资源”:[
“arn:aws:events:us-east-1:123456788901:rule/foo”
],
“细节”:{}
},
“上下文”:”
}
测试调用包含您获得的元素。您可以从上下文对象获得请求id和其他信息
当Lambda运行函数时,它将上下文对象传递给处理程序。此对象提供方法和属性,这些方法和属性提供有关调用、函数和执行环境的信息。
您可以从process.env变量获取更多信息
我编写了一个简短的lambda函数(node.js),它将这些信息记录到控制台,并最终进入aws cloud watch
exports.handler = async (event, context) => {
console.log('context:', JSON.stringify(context));
console.log('process.env:', JSON.stringify(process.env));
return {statusCode: 200, body: 'Hello World'};
};
日志输出:
START RequestId: 6f3c103e-f0a5-4982-934c-dabedda0065e Version: $LATEST
context:
{
"callbackWaitsForEmptyEventLoop": true,
"functionVersion": "$LATEST",
"functionName": "my_lambda_function_name",
"memoryLimitInMB": "128",
"logGroupName": "/aws/lambda/my_lambda_function_name",
"logStreamName": "2020/10/01/[$LATEST]8adb13668eed4ac8b3e7f8d796fe4d49",
"invokedFunctionArn": "arn:aws:lambda:us-east-1:636121343751:function:my_lambda_function_name",
"awsRequestId": "6f3c103e-f0a5-4982-934c-dabedda0065e"
}
process.env:
{
"AWS_LAMBDA_FUNCTION_VERSION": "$LATEST",
"AWS_SESSION_TOKEN": "IZZ3eS6vFF...",
"LD_LIBRARY_PATH": "/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib",
"LAMBDA_TASK_ROOT": "/var/task",
"AWS_LAMBDA_LOG_GROUP_NAME": "/aws/lambda/my_lambda_function_name",
"AWS_LAMBDA_RUNTIME_API": "127.0.0.1:9001",
"AWS_LAMBDA_LOG_STREAM_NAME": "2020/10/01/[$LATEST]8adb13668eed4ac8b3e7f8d796fe4d49",
"AWS_EXECUTION_ENV": "AWS_Lambda_nodejs12.x",
"AWS_LAMBDA_FUNCTION_NAME": "my_lambda_function_name",
"AWS_XRAY_DAEMON_ADDRESS": "169.254.79.2:2000",
"PATH": "/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin",
"AWS_DEFAULT_REGION": "us-east-1",
"PWD": "/var/task",
"AWS_SECRET_ACCESS_KEY": "5nQrpKhBwF...",
"LAMBDA_RUNTIME_DIR": "/var/runtime",
"LANG": "en_US.UTF-8",
"NODE_PATH": "/opt/nodejs/node12/node_modules:/opt/nodejs/node_modules:/var/runtime/node_modules:/var/runtime:/var/task",
"AWS_REGION": "us-east-1",
"TZ": ":UTC",
"AWS_ACCESS_KEY_ID": "ASIAZNANWY3473BTADSB",
"SHLVL": "0",
"_AWS_XRAY_DAEMON_ADDRESS": "169.254.79.2",
"_AWS_XRAY_DAEMON_PORT": "2000",
"AWS_XRAY_CONTEXT_MISSING": "LOG_ERROR",
"_HANDLER": "index.handler",
"AWS_LAMBDA_FUNCTION_MEMORY_SIZE": "128",
"_X_AMZN_TRACE_ID": "Root=1-6f75f4e5-5801599f17fd63e74ecd0833;Parent=73fb93812cdbf83f;Sampled=0"
}
END RequestId: 6f3c103e-f0a5-4982-934c-dabedda0065e
REPORT RequestId: 6f3c103e-f0a5-4982-934c-dabedda0065e
Duration: 21.71 ms Billed Duration: 100 ms
Memory Size: 128 MB Max Memory Used: 64 MB Init Duration: 132.35 ms
我想知道它是由我点击“测试”或其他东西触发的。在这种情况下,我想我的回答应该能够回答这个问题。我的意思是,您可以记录requestId,并用cloudwatch日志中的内容交叉检查,除非您想增加cloudwatch中的内容。此外,单击“测试”是一个反复校准的操作,因此您可以轻松地检查记录的requestID并与CloudWatch上的记录进行比较,只需完全不要单击“测试”。这种测试方法很容易被误解。(不是您的错。这是AWS的错误UI/UX)。从API网关调用时,上下文对象包含一个requestId属性,该属性是API网关请求ID。这与Lambda写入CloudWatch日志的Lambda请求ID不匹配。API网关在响应头中返回自己的请求ID,但这不可用于查找该请求的相应Lambda日志。我想从应用程序的响应头中返回Lambda请求ID。我的事件调用(从appsync调用Lambda函数)没有ID
字段。但是,我的上下文确实有一个aws\u request\u id
字段,即日志中显示的UUID。回复:嗨@Martin Thoma,当我们在lambda中使用SNS时,我必须获得消息id和请求id。如何使用消息和请求id验证消息是否已发送