File tree Expand file tree Collapse file tree 7 files changed +1358
-0
lines changed
scripts/test-lambda-locally Expand file tree Collapse file tree 7 files changed +1358
-0
lines changed Original file line number Diff line number Diff line change
1
+ .envrc
2
+ .venv /
3
+ package /
4
+ lambda_deployment_package.zip
Original file line number Diff line number Diff line change
1
+ # Test AWS Lambda functions locally
2
+
3
+ An easy way to run an AWS Lambda function with the Sentry SDK locally.
4
+
5
+ This is a small helper to create a AWS Lambda function that includes the
6
+ currently checked out Sentry SDK and runs it in a local AWS Lambda environment.
7
+
8
+ Currently only embedding the Sentry SDK into the Lambda function package
9
+ is supported. Adding the SDK as Lambda Layer is not possible at the moment.
10
+
11
+ ## Prerequisites
12
+
13
+ - Set ` SENTRY_DSN ` environment variable. The Lambda function will use this DSN.
14
+ - You need to have Docker installed and running.
15
+
16
+ ## Run Lambda function
17
+
18
+ - Update ` lambda_function.py ` to include your test code.
19
+ - Run ` ./deploy-lambda-locally.sh ` . This will:
20
+ - Install [ AWS SAM] ( https://aws.amazon.com/serverless/sam/ ) in a virtual Python environment
21
+ - Create a lambda function package in ` package/ ` that includes
22
+ - The currently checked out Sentry SDK
23
+ - All dependencies of the Sentry SDK (certifi and urllib3)
24
+ - The actual function defined in ` lamdba_function.py ` .
25
+ - Zip everything together into lambda_deployment_package.zip
26
+ - Run a local Lambda environment that serves that Lambda function.
27
+ - Point your browser to ` http://127.0.0.1:3000 ` to access your Lambda function.
28
+ - Currently GET and POST requests are possible. This is defined in ` template.yaml ` .
Original file line number Diff line number Diff line change
1
+ #! /usr/bin/env bash
2
+
3
+ # exit on first error
4
+ set -xeuo pipefail
5
+
6
+ # Setup local AWS Lambda environment
7
+
8
+ # Install uv if it's not installed
9
+ if ! command -v uv & > /dev/null; then
10
+ curl -LsSf https://astral.sh/uv/install.sh | sh
11
+ fi
12
+
13
+ uv sync
14
+
15
+ # Create a deployment package of the lambda function in `lambda_function.py`.
16
+ rm -rf package && mkdir -p package
17
+ pip install ../../../sentry-python -t package/ --upgrade
18
+ cp lambda_function.py package/
19
+ cd package && zip -r ../lambda_deployment_package.zip . && cd ..
20
+
21
+ # Start the local Lambda server with the new function (defined in template.yaml)
22
+ uv run sam local start-api \
23
+ --skip-pull-image \
24
+ --force-image-build \
25
+ --parameter-overrides SentryDsn=$SENTRY_DSN
Original file line number Diff line number Diff line change
1
+ import logging
2
+ import os
3
+ import sentry_sdk
4
+
5
+ from sentry_sdk .integrations .aws_lambda import AwsLambdaIntegration
6
+ from sentry_sdk .integrations .logging import LoggingIntegration
7
+
8
+ def lambda_handler (event , context ):
9
+ sentry_sdk .init (
10
+ dsn = os .environ .get ("SENTRY_DSN" ),
11
+ attach_stacktrace = True ,
12
+ integrations = [
13
+ LoggingIntegration (level = logging .INFO , event_level = logging .ERROR ),
14
+ AwsLambdaIntegration (timeout_warning = True )
15
+ ],
16
+ traces_sample_rate = 1.0 ,
17
+ debug = True ,
18
+ )
19
+
20
+ try :
21
+ my_dict = {"a" : "test" }
22
+ value = my_dict ["b" ] # This should raise exception
23
+ except :
24
+ logging .exception ("Key Does not Exists" )
25
+ raise
Original file line number Diff line number Diff line change
1
+ [project ]
2
+ name = " test-lambda-locally"
3
+ version = " 0"
4
+ requires-python = " >=3.12"
5
+
6
+ dependencies = [
7
+ " aws-sam-cli>=1.135.0" ,
8
+ ]
Original file line number Diff line number Diff line change
1
+ AWSTemplateFormatVersion : ' 2010-09-09'
2
+ Transform : AWS::Serverless-2016-10-31
3
+ Resources :
4
+ SentryLambdaFunction :
5
+ Type : AWS::Serverless::Function
6
+ Properties :
7
+ CodeUri : lambda_deployment_package.zip
8
+ Handler : lambda_function.lambda_handler
9
+ Runtime : python3.12
10
+ Timeout : 30
11
+ Environment :
12
+ Variables :
13
+ SENTRY_DSN : !Ref SentryDsn
14
+ Events :
15
+ ApiEventGet :
16
+ Type : Api
17
+ Properties :
18
+ Path : /
19
+ Method : get
20
+ ApiEventPost :
21
+ Type : Api
22
+ Properties :
23
+ Path : /
24
+ Method : post
25
+
26
+ Parameters :
27
+ SentryDsn :
28
+ Type : String
29
+ Default : ' '
You can’t perform that action at this time.
0 commit comments