我想知道函数中lambda函数的事件源。
我想要做的是使用某些AWS服务(CloudWatch,S3,Step函数等)中的一个lambda函数,并根据服务更改其行为。
上下文对象(函数的参数之一)具有有关lambda函数的信息,但不具有有关事件源的信息。
有办法知道吗?
最佳答案
如果您已将Kinesis或DynamoDB流标识为使用API的Lambda函数的事件源
aws lambda create-event-source-mapping
,那么您可以通过
aws lambda list-event-source-mappings
如果不这样做,则可以使用以下函数进行最佳猜测:
function getLambdaEventSource(event) {
if (event.Records && event.Records[0].cf) return 'isCloudfront';
if (event.configRuleId && event.configRuleName && event.configRuleArn) return 'isAwsConfig';
if (event.Records && (event.Records[0].eventSource === 'aws:codecommit')) return 'isCodeCommit';
if (event.authorizationToken === "incoming-client-token") return 'isApiGatewayAuthorizer';
if (event.StackId && event.RequestType && event.ResourceType) return 'isCloudFormation';
if (event.Records && (event.Records[0].eventSource === 'aws:ses')) return 'isSes';
if (event.pathParameters && event.pathParameters.proxy) return 'isApiGatewayAwsProxy';
if (event.source === 'aws.events') return 'isScheduledEvent';
if (event.awslogs && event.awslogs.data) return 'isCloudWatchLogs';
if (event.Records && (event.Records[0].EventSource === 'aws:sns')) return 'isSns';
if (event.Records && (event.Records[0].eventSource === 'aws:dynamodb')) return 'isDynamoDb';
if (event.records && event.records[0].approximateArrivalTimestamp) return 'isKinesisFirehose';
if (event.records && event.deliveryStreamArn && event.deliveryStreamArn.startsWith('arn:aws:kinesis:')) return 'isKinesisFirehose';
if (event.eventType === 'SyncTrigger' && event.identityId && event.identityPoolId) return 'isCognitoSyncTrigger';
if (event.Records && event.Records[0].eventSource === 'aws:kinesis') return 'isKinesis';
if (event.Records && event.Records[0].eventSource === 'aws:s3') return 'isS3';
if (event.operation && event.message) return 'isMobileBackend';
}
我说这是最好的猜测,因为诸如API网关请求之类的事件源可能会发送任何内容。如果您确定不会遇到这种情况,那么上面的函数就可以解决问题。