Skip to content

Instantly share code, notes, and snippets.

@jeshan
Last active February 2, 2023 07:06
Embed
What would you like to do?
AWS Lambda: Determine Event Source from event object. Note that this is an approximation as anybody can send a payload that resembles the real thing.
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';
if (event.Records && (event.Records[0].eventSource === 'aws:sqs')) return 'isSqs';
}
@silvav
Copy link

silvav commented Apr 15, 2018

I would like to show this code block on my master thesis. Can you confirm that this code is licensed under public domain?
Alternatively, could you grant me permission to publish it?

@CowChris
Copy link

For SQS:

if (event.Records && (event.Records[0].eventSource === 'aws:sqs')) return 'isSqs';

@jeshan
Copy link
Author

jeshan commented Dec 10, 2019

Guys, this slipped under my radar. I don't know why github does not send notifications for gists.
silvav: if it's still relevant for you, then yes you can use it under public domain.
CowChris: thanks, I'll add it

@Necromancerx
Copy link

For Python: You can check this out https://gist.github.com/Necromancerx/abed07138690d37d170a6cf15b40d749. This is just based on your gist. Thank you.

@Cevinlo88
Copy link

Would you kindly add a if statement for a lambda being triggered by application load balancer?

@Necromancerx
Copy link

Necromancerx commented Feb 2, 2021

For API Gateway HTTP:

if (event.requestContext && event.requestContext.resourceId) return 'isApiGatewayHttp';

@jeremy-brooks
Copy link

jeremy-brooks commented Jun 14, 2022

This is probably not the best idea as it relies on AWS implementation details which may change.

@gpmilliken
Copy link

Interesting and useful. I have struggled with the best approach to knowing my invoker. Although this may not persist well over time it is better than putting a caller flag in the payload. The only other option I see is multiple similar functions, which leads to logic sprawl but avoids the conditional overhead.

@gpmilliken
Copy link

For SQS add this

elif 'Records' in event and len(event['Records']) > 0 and 'eventSource' in event['Records'][0] and event['Records'][0]['eventSource'] == 'aws:sqs':
return 'sqs'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment