Skip to content

Instantly share code, notes, and snippets.

Last active June 13, 2024 10:25
Show Gist options
  • 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 === '') return 'isScheduledEvent';
if (event.awslogs && 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';
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?

Copy link

For SQS:

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

Copy link

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

Copy link

pauloapi commented May 7, 2020

For Python: You can check this out This is just based on your gist. Thank you.

Copy link

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

Copy link

pauloapi commented Feb 2, 2021

For API Gateway HTTP:

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

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.

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.

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'

Copy link

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

Copy link

if (event.source === 'aws.scheduler') return 'isScheduler';

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