Skip to content

Commit 05818f9

Browse files
author
Michael Brewer
committed
feat(tracer): Autodetect lambda execution env
1 parent 7b3b032 commit 05818f9

File tree

4 files changed

+14
-27
lines changed

4 files changed

+14
-27
lines changed

aws_lambda_powertools/shared/constants.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,9 @@
1212

1313
EVENT_HANDLER_DEBUG_ENV: str = "POWERTOOLS_EVENT_HANDLER_DEBUG"
1414

15-
SAM_LOCAL_ENV: str = "AWS_SAM_LOCAL"
16-
CHALICE_LOCAL_ENV: str = "AWS_CHALICE_CLI_MODE"
1715
SERVICE_NAME_ENV: str = "POWERTOOLS_SERVICE_NAME"
1816
XRAY_TRACE_ID_ENV: str = "_X_AMZN_TRACE_ID"
17+
LAMBDA_TASK_ROOT_ENV: str = "LAMBDA_TASK_ROOT"
1918

2019
XRAY_SDK_MODULE: str = "aws_xray_sdk"
2120
XRAY_SDK_CORE_MODULE: str = "aws_xray_sdk.core"

aws_lambda_powertools/tracing/tracer.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -719,16 +719,15 @@ def _is_tracer_disabled() -> Union[bool, str]:
719719
Union[bool, str]
720720
"""
721721
logger.debug("Verifying whether Tracing has been disabled")
722-
is_lambda_sam_cli = os.getenv(constants.SAM_LOCAL_ENV)
723-
is_chalice_cli = os.getenv(constants.CHALICE_LOCAL_ENV)
722+
is_lambda_env = os.getenv(constants.LAMBDA_TASK_ROOT_ENV)
724723
is_disabled = resolve_truthy_env_var_choice(env=os.getenv(constants.TRACER_DISABLED_ENV, "false"))
725724

726725
if is_disabled:
727726
logger.debug("Tracing has been disabled via env var POWERTOOLS_TRACE_DISABLED")
728727
return is_disabled
729728

730-
if is_lambda_sam_cli or is_chalice_cli:
731-
logger.debug("Running under SAM CLI env or not in Lambda env; disabling Tracing")
729+
if not is_lambda_env:
730+
logger.debug("Running outside Lambda env; disabling Tracing")
732731
return True
733732

734733
return False

tests/functional/test_tracing.py

+3-18
Original file line numberDiff line numberDiff line change
@@ -60,26 +60,11 @@ def greeting(name, message):
6060
greeting(name="Foo", message="Bar")
6161

6262

63-
def test_tracer_lambda_emulator(monkeypatch, dummy_response):
64-
# GIVEN tracer runs locally
65-
monkeypatch.setenv("AWS_SAM_LOCAL", "true")
63+
def test_tracer_lambda_outside_lambda_env(monkeypatch, dummy_response):
64+
# GIVEN tracer runs locally (ie: `LAMBDA_TASK_ROOT` is not set)
6665
tracer = Tracer()
6766

68-
# WHEN a lambda function is run through SAM CLI
69-
@tracer.capture_lambda_handler
70-
def handler(event, context):
71-
return dummy_response
72-
73-
# THEN tracer should run in disabled mode, and not raise an Exception
74-
handler({}, {})
75-
76-
77-
def test_tracer_chalice_cli_mode(monkeypatch, dummy_response):
78-
# GIVEN tracer runs locally
79-
monkeypatch.setenv("AWS_CHALICE_CLI_MODE", "true")
80-
tracer = Tracer()
81-
82-
# WHEN a lambda function is run through the Chalice CLI.
67+
# WHEN a lambda function is run through outside of a lambda
8368
@tracer.capture_lambda_handler
8469
def handler(event, context):
8570
return dummy_response

tests/unit/test_tracing.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,11 @@ def greeting(name, message):
125125
)
126126

127127

128-
def test_tracer_custom_metadata(mocker, dummy_response, provider_stub):
128+
def test_tracer_custom_metadata(monkeypatch, mocker, dummy_response, provider_stub):
129129
# GIVEN Tracer is initialized with booking as the service name
130+
monkeypatch.setenv("LAMBDA_TASK_ROOT", "/opt/")
130131
put_metadata_mock = mocker.MagicMock()
132+
131133
provider = provider_stub(put_metadata_mock=put_metadata_mock)
132134
tracer = Tracer(provider=provider, service="booking")
133135

@@ -143,8 +145,9 @@ def test_tracer_custom_metadata(mocker, dummy_response, provider_stub):
143145
)
144146

145147

146-
def test_tracer_custom_annotation(mocker, dummy_response, provider_stub):
148+
def test_tracer_custom_annotation(monkeypatch, mocker, dummy_response, provider_stub):
147149
# GIVEN Tracer is initialized
150+
monkeypatch.setenv("LAMBDA_TASK_ROOT", "/opt/")
148151
put_annotation_mock = mocker.MagicMock()
149152
provider = provider_stub(put_annotation_mock=put_annotation_mock)
150153
tracer = Tracer(provider=provider)
@@ -214,8 +217,9 @@ def greeting(name, message):
214217

215218

216219
@mock.patch("aws_lambda_powertools.tracing.tracer.aws_xray_sdk.core.patch")
217-
def test_tracer_patch_modules(xray_patch_mock, mocker):
220+
def test_tracer_patch_modules(xray_patch_mock, monkeypatch, mocker):
218221
# GIVEN tracer is initialized with a list of modules to patch
222+
monkeypatch.setenv("LAMBDA_TASK_ROOT", "/opt/")
219223
modules = ["boto3"]
220224

221225
# WHEN modules are supported by X-Ray

0 commit comments

Comments
 (0)