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



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

因此请求流将类似于以下内容:

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

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

有没有办法知道我的lambda函数是否是从API触发的?也在同一天发送通知?

我检查了CloudTrial的Trial事件,以便在我自己的API网关上使用lambda调用。它的形式是:

{
"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");
}
};

另一个很酷的方法是使用一些监控工具,这些工具可以开箱即用地为您提供这些功能:像这个工具

完全披露,我刚刚展示的工具叫lumigo,我工作的公司。这是一个很好的工具,我正在使用它来进行我的个人项目也是

相关内容

最新更新