diff --git a/sdk-extension/opentelemetry-sdk-extension-aws/CHANGELOG.md b/sdk-extension/opentelemetry-sdk-extension-aws/CHANGELOG.md index a85ad43256..c1c8286894 100644 --- a/sdk-extension/opentelemetry-sdk-extension-aws/CHANGELOG.md +++ b/sdk-extension/opentelemetry-sdk-extension-aws/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +- Make ecs and beanstalk resource detector silent when loaded outside AWS + ([#3076](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3076)) - Make EKS resource detector don't warn when not running in EKS ([#3074](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3074)) diff --git a/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/beanstalk.py b/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/beanstalk.py index 7d6fcd96ce..12e28bf35b 100644 --- a/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/beanstalk.py +++ b/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/beanstalk.py @@ -41,6 +41,9 @@ def detect(self) -> "Resource": else: conf_file_path = "/var/elasticbeanstalk/xray/environment.conf" + if not os.path.exists(conf_file_path): + return Resource.get_empty() + try: with open(conf_file_path, encoding="utf-8") as conf_file: parsed_data = json.load(conf_file) diff --git a/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/ecs.py b/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/ecs.py index b780633b69..07d4553350 100644 --- a/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/ecs.py +++ b/sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/resource/ecs.py @@ -41,9 +41,7 @@ def detect(self) -> "Resource": if not os.environ.get( "ECS_CONTAINER_METADATA_URI" ) and not os.environ.get("ECS_CONTAINER_METADATA_URI_V4"): - raise RuntimeError( - "Missing ECS_CONTAINER_METADATA_URI therefore process is not on ECS." - ) + return Resource.get_empty() container_id = "" try: diff --git a/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_beanstalk.py b/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_beanstalk.py index 29db8e459c..d41c0d9adb 100644 --- a/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_beanstalk.py +++ b/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_beanstalk.py @@ -41,9 +41,19 @@ class AwsBeanstalkResourceDetectorTest(unittest.TestCase): new_callable=mock_open, read_data=f'{{"deployment_id":"{MockBeanstalkResourceAttributes[ResourceAttributes.SERVICE_INSTANCE_ID]}","environment_name":"{MockBeanstalkResourceAttributes[ResourceAttributes.SERVICE_NAMESPACE]}","version_label":"{MockBeanstalkResourceAttributes[ResourceAttributes.SERVICE_VERSION]}"}}', ) - def test_simple_create(self, mock_open_function): + @patch("os.path.exists", return_value=True) + def test_simple_create(self, mock_path_exists, mock_open_function): actual = AwsBeanstalkResourceDetector().detect() self.assertDictEqual( actual.attributes.copy(), OrderedDict(MockBeanstalkResourceAttributes), ) + + @patch("os.name", "posix") + @patch("os.path.exists", return_value=False) + def test_not_on_beanstalk(self, mock_path_exists): + actual = AwsBeanstalkResourceDetector().detect() + self.assertDictEqual(actual.attributes.copy(), {}) + mock_path_exists.assert_called_once_with( + "/var/elasticbeanstalk/xray/environment.conf" + ) diff --git a/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_ecs.py b/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_ecs.py index 4f892cc1bb..b116ae8229 100644 --- a/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_ecs.py +++ b/sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_ecs.py @@ -79,6 +79,11 @@ def _http_get_function_fargate(url: str, *args, **kwargs) -> str: class AwsEcsResourceDetectorTest(unittest.TestCase): + @patch.dict("os.environ", {}, clear=True) + def test_not_on_ecs(self): + actual = AwsEcsResourceDetector().detect() + self.assertDictEqual(actual.attributes.copy(), {}) + @patch.dict( "os.environ", {"ECS_CONTAINER_METADATA_URI": "mock-uri"},