我能否获取有关 AWS Lambda 请求 ID(例如触发器)的信息?

Mar*_*oma 5 amazon-cloudwatch aws-lambda

在我的日志中,我发现

START RequestId: 123a1a12-1234-1234-1234-123456789012 Version: $LATEST
Run Code Online (Sandbox Code Playgroud)

对于 AWS lambda 的每次调用。是否可以获得有关请求的更多信息,例如触发它的原因?

Ren*_*Ren 20

您可以从上下文对象中获取请求 ID和其他信息。

当 Lambda 运行您的函数时,它会将上下文对象传递给处理程序。该对象提供的方法和属性提供有关调用、函数和执行环境的信息。 https://docs.aws.amazon.com/lambda/latest/dg/nodejs-context.html

您可以从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'};
};
Run Code Online (Sandbox Code Playgroud)

日志输出:

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    
Run Code Online (Sandbox Code Playgroud)


vaq*_*han 6

您需要从 lambda 函数上下文中获取此信息。

    RequestId=context.aws_request_id
Run Code Online (Sandbox Code Playgroud)

您将得到以下结果 RequestId-“00cfaafe-5018-4be0-9668-b98daf5a7312”版本:$LATEST


Mar*_*oma 3

lambda 函数有两个参数: Event 和context

正常的调用如下所示:

{
    "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>"
}
Run Code Online (Sandbox Code Playgroud)

测试调用包含您获得的元素。

  • 我的事件调用(从 appsync 调用 lambda 函数)没有“id”字段。但是,我的上下文确实有一个“aws_request_id”字段,它是日志中显示的 UUID。回复:https://docs.aws.amazon.com/lambda/latest/dg/python-context-object.html (2认同)