Skip to content

Instantly share code, notes, and snippets.

@jeshan
Last active June 23, 2023 13:01
Show Gist options
  • Star 48 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save jeshan/52cb021fd20d871c56ad5ce6d2654d7b to your computer and use it in GitHub Desktop.
Save jeshan/52cb021fd20d871c56ad5ce6d2654d7b to your computer and use it in GitHub Desktop.
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

@pauloapi
Copy link

pauloapi commented May 7, 2020

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?

@pauloapi
Copy link

pauloapi 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'

@bullett445
Copy link

if (event.requestContext.elb.targetGroupArn) return 'is ALBEvent'

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