diff --git a/datadog_lambda/tracing.py b/datadog_lambda/tracing.py index 92c3e01c..a9c223e3 100644 --- a/datadog_lambda/tracing.py +++ b/datadog_lambda/tracing.py @@ -41,6 +41,16 @@ EventSubtypes, ) +dd_trace_otel_enabled = ( + os.environ.get("DD_TRACE_OTEL_ENABLED", "false").lower() == "true" +) +if dd_trace_otel_enabled: + from opentelemetry.trace import set_tracer_provider + from ddtrace.opentelemetry import TracerProvider + + set_tracer_provider(TracerProvider()) + + logger = logging.getLogger(__name__) dd_trace_context = {} diff --git a/datadog_lambda/wrapper.py b/datadog_lambda/wrapper.py index 7b9e87f9..f9675c68 100644 --- a/datadog_lambda/wrapper.py +++ b/datadog_lambda/wrapper.py @@ -125,8 +125,8 @@ def __new__(cls, func): else: logger.debug("datadog_lambda_wrapper already wrapped") return _NoopDecorator(func) - except Exception: - traceback.print_exc() + except Exception as e: + logger.error(format_err_with_traceback(e)) return func def __init__(self, func): @@ -204,8 +204,8 @@ def __init__(self, func): patch_all() logger.debug("datadog_lambda_wrapper initialized") - except Exception: - traceback.print_exc() + except Exception as e: + logger.error(format_err_with_traceback(e)) def __call__(self, event, context, **kwargs): """Executes when the wrapped function gets called""" @@ -291,8 +291,8 @@ def _before(self, event, context): if profiling_env_var and is_new_sandbox(): self.prof.start(stop_on_exit=False, profile_children=True) logger.debug("datadog_lambda_wrapper _before() done") - except Exception: - traceback.print_exc() + except Exception as e: + logger.error(format_err_with_traceback(e)) def _after(self, event, context): try: @@ -358,8 +358,14 @@ def _after(self, event, context): event.get("requestContext", {}).get("requestId") ) logger.debug("datadog_lambda_wrapper _after() done") - except Exception: - traceback.print_exc() + except Exception as e: + logger.error(format_err_with_traceback(e)) + + +def format_err_with_traceback(e): + return "Error {}. Traceback: {}".format( + e, traceback.format_exc().replace("\n", "\r") + ) datadog_lambda_wrapper = _LambdaDecorator diff --git a/pyproject.toml b/pyproject.toml index 70e81997..e5c2b09a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "datadog_lambda" -version = "4.78.0" +version = "4.79.0" description = "The Datadog AWS Lambda Library" authors = ["Datadog, Inc. "] license = "Apache-2.0" diff --git a/scripts/build_layers.sh b/scripts/build_layers.sh index 0312ff08..976ba5d1 100755 --- a/scripts/build_layers.sh +++ b/scripts/build_layers.sh @@ -51,9 +51,9 @@ function docker_build_zip { --platform linux/${arch} \ --load - # Run the image by runtime tag, tar its generatd `python` directory to sdout, - # then extract it to a temp directory. - docker run datadog-lambda-python-${arch}:$1 tar cf - python | tar -xf - -C $temp_dir + # Run the image by runtime tag and copy the output /build/python to the temp dir + dockerId=$(docker create datadog-lambda-python-${arch}:$1) + docker cp $dockerId:/build/python $temp_dir/python # Zip to destination, and keep directory structure as based in $temp_dir diff --git a/scripts/publish_prod.sh b/scripts/publish_prod.sh index a6ea0dee..e8838c5a 100755 --- a/scripts/publish_prod.sh +++ b/scripts/publish_prod.sh @@ -34,7 +34,7 @@ fi # Ensure AWS access before proceeding ddsaml2aws login -a govcloud-us1-fed-human-engineering AWS_PROFILE=govcloud-us1-fed-human-engineering aws sts get-caller-identity -aws-vault exec prod-engineering -- aws sts get-caller-identity +aws-vault exec sso-prod-engineering -- aws sts get-caller-identity # Ensure pypi registry access read -p "Do you have access to PyPI (y/n)?" CONT @@ -64,11 +64,11 @@ echo "Building layers..." echo echo "Signing layers for commercial AWS regions" -aws-vault exec prod-engineering -- ./scripts/sign_layers.sh prod +aws-vault exec sso-prod-engineering -- ./scripts/sign_layers.sh prod echo echo "Publishing layers to commercial AWS regions" -VERSION=$LAYER_VERSION aws-vault exec prod-engineering -- ./scripts/publish_layers.sh +VERSION=$LAYER_VERSION aws-vault exec sso-prod-engineering -- ./scripts/publish_layers.sh echo "Publishing layers to GovCloud AWS regions" ddsaml2aws login -a govcloud-us1-fed-human-engineering diff --git a/scripts/publish_sandbox.sh b/scripts/publish_sandbox.sh index 4dec5889..8f7d1de5 100755 --- a/scripts/publish_sandbox.sh +++ b/scripts/publish_sandbox.sh @@ -4,8 +4,8 @@ set -e ./scripts/build_layers.sh -aws-vault exec serverless-sandbox-account-admin -- ./scripts/sign_layers.sh sandbox -aws-vault exec serverless-sandbox-account-admin -- ./scripts/publish_layers.sh +aws-vault exec sso-serverless-sandbox-account-admin -- ./scripts/sign_layers.sh sandbox +aws-vault exec sso-serverless-sandbox-account-admin -- ./scripts/publish_layers.sh # Automatically create PR against github.com/DataDog/documentation # If you'd like to test, please uncomment the below line diff --git a/scripts/run_integration_tests.sh b/scripts/run_integration_tests.sh index f3ee5f36..beb91921 100755 --- a/scripts/run_integration_tests.sh +++ b/scripts/run_integration_tests.sh @@ -2,9 +2,9 @@ # Usage - run commands from repo root: # To check if new changes to the layer cause changes to any snapshots: -# BUILD_LAYERS=true DD_API_KEY=XXXX aws-vault exec serverless-sandbox-account-admin -- ./scripts/run_integration_tests +# BUILD_LAYERS=true DD_API_KEY=XXXX aws-vault exec sso-serverless-sandbox-account-admin -- ./scripts/run_integration_tests # To regenerate snapshots: -# UPDATE_SNAPSHOTS=true DD_API_KEY=XXXX aws-vault exec serverless-sandbox-account-admin -- ./scripts/run_integration_tests +# UPDATE_SNAPSHOTS=true DD_API_KEY=XXXX aws-vault exec sso-serverless-sandbox-account-admin -- ./scripts/run_integration_tests set -e