如何监控作为微服务应用程序一部分的多个 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,我工作的公司。
这是一个很棒的工具,我也将它用于我的个人项目
我们试图在我们的方法中遵循微服务器架构。 我们的前端在 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,我工作的公司。 这是一个很棒的工具,我也将它用于我的个人项目