如何监控作为微服务应用程序一部分的多个 lambda 函数?

How do I monitor multiple lambda function which are a part of micro service application?

我们试图在我们的方法中遵循微服务器架构。 我们的前端在 S3 存储桶中,Apis 在连接到 Lambda 函数的 API 网关中。

因此请求流程将与此类似:

S3 -> API -> Lambda -> 数据库

我担心的是,我如何知道我的 API 是否触发了 lambda 函数? 有可用于 lambda 的监视选项,但那些是 post lambda 函数的调用。

有什么方法可以让我知道 API 是否触发了我的 lambda 函数?还要发送通知吗?

我在自己的 API 网关上使用 lambda 检查了 lambda invocation CloudTrial 的试用事件。它具有以下形式:

{
    "eventVersion": "1.07",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "apigateway.amazonaws.com"
    },
    "eventTime": "2020-10-30T12:03:17Z",
    "eventSource": "lambda.amazonaws.com",
    "eventName": "Invoke",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "apigateway.amazonaws.com",
    "userAgent": "apigateway.amazonaws.com",
    "requestParameters": {
        "xxxx": "arn:aws:lambda:us-east-1:xxxx:function:fff",
        "sourceArn": "arn:aws:execute-api:us-east-1:xxx:84j28c7zga/test/ANY/test"
    },
    "responseElements": null,
    "additionalEventData": {
        "functionVersion": "arn:aws:lambda:us-east-1:xxxx:function:fff:$LATEST"
    },
    "requestID": "bc5f574e-58d8-4a2b-978b-5ec32aba447e",
    "eventID": "2345b878-4998-4317-a0c4-1005df40d873",
    "readOnly": false,
    "resources": [
        {
            "accountId": "xxxx",
            "type": "AWS::Lambda::Function",
            "ARN": "arn:aws:lambda:us-east-1:xxx:function:fff"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": false,
    "recipientAccountId": "xxxx",
    "sharedEventID": "1906ed81-6835-4046-943d-f2ca9e5b9d40",
    "eventCategory": "Data"
}

正如您在上面看到的,当调用 lambda 时,您得到信息,它是 API 调用它的网关:

    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "apigateway.amazonaws.com"
    },

另一种比云跟踪更简单的方法,当您的 lambda 被 APIGW 调用时,在 lambda 事件上您有一些细节可以用来匹配您的用例。 事件架构:https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html

例如,NodeJS Lambda:

const handler = async (event, context) => {
    if(event["requestContext"] && event["httpMethod"]) {
        console.log("This is probably an API-GW event");
    } else {
        console.log("This is definitely not an API-GW event");
    }
};

另一种很酷的方法是使用一些可以开箱即用的监控工具: Like this tool

完全公开,我刚刚展示的工具叫做 lumigo,我工作的公司。 这是一个很棒的工具,我也将它用于我的个人项目