Skip to content

Commit 09c9006

Browse files
committed
cleanup botocore usage
1 parent c34f3b9 commit 09c9006

File tree

52 files changed

+7193
-1545
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+7193
-1545
lines changed

.github/workflows/release-lambda.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ on:
99
aws_region:
1010
description: 'Deploy to aws regions'
1111
required: true
12-
default: 'us-east-1, us-east-2, us-west-1, us-west-2, ap-south-1, ap-northeast-3, ap-northeast-2, ap-southeast-1, ap-southeast-2, ap-northeast-1, ca-central-1, eu-central-1, eu-west-1, eu-west-2, eu-west-3, eu-north-1, sa-east-1, af-south-1, ap-east-1, ap-south-2, ap-southeast-3, ap-southeast-4, eu-central-2, eu-south-1, eu-south-2, il-central-1, me-central-1, me-south-1'
12+
default: 'us-east-1, us-east-2, us-west-1, us-west-2, ap-south-1, ap-northeast-3, ap-northeast-2, ap-southeast-1, ap-southeast-2, ap-northeast-1, ca-central-1, eu-central-1, eu-west-1, eu-west-2, eu-west-3, eu-north-1, sa-east-1, af-south-1, ap-east-1, ap-south-2, ap-southeast-3, ap-southeast-4, eu-central-2, eu-south-1, eu-south-2, il-central-1, me-central-1, me-south-1, ap-southeast-5, ap-southeast-7, mx-central-1, ca-west-1, cn-north-1, cn-northwest-1'
1313

1414
env:
15-
COMMERCIAL_REGIONS: us-east-1, us-east-2, us-west-1, us-west-2, ap-south-1, ap-northeast-3, ap-northeast-2, ap-southeast-1, ap-southeast-2, ap-northeast-1, ca-central-1, eu-central-1, eu-west-1, eu-west-2, eu-west-3, eu-north-1, sa-east-1
15+
COMMERCIAL_REGIONS: us-east-1, us-east-2, us-west-1, us-west-2, ap-south-1, ap-northeast-3, ap-northeast-2, ap-southeast-1, ap-southeast-2, ap-northeast-1, ca-central-1, eu-central-1, eu-west-1, eu-west-2, eu-west-3, eu-north-1, sa-east-1, ap-southeast-5, ap-southeast-7, mx-central-1, ca-west-1, cn-north-1, cn-northwest-1
1616
LAYER_NAME: AWSOpenTelemetryDistroPython
1717

1818
permissions:

aws-opentelemetry-distro/pyproject.toml

Lines changed: 54 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -24,62 +24,62 @@ classifiers = [
2424
]
2525

2626
dependencies = [
27-
"opentelemetry-api == 1.27.0",
28-
"opentelemetry-sdk == 1.27.0",
29-
"opentelemetry-exporter-otlp-proto-grpc == 1.27.0",
30-
"opentelemetry-exporter-otlp-proto-http == 1.27.0",
31-
"opentelemetry-propagator-b3 == 1.27.0",
32-
"opentelemetry-propagator-jaeger == 1.27.0",
33-
"opentelemetry-exporter-otlp-proto-common == 1.27.0",
27+
"opentelemetry-api == 1.33.1",
28+
"opentelemetry-sdk == 1.33.1",
29+
"opentelemetry-exporter-otlp-proto-grpc == 1.33.1",
30+
"opentelemetry-exporter-otlp-proto-http == 1.33.1",
31+
"opentelemetry-propagator-b3 == 1.33.1",
32+
"opentelemetry-propagator-jaeger == 1.33.1",
33+
"opentelemetry-exporter-otlp-proto-common == 1.33.1",
3434
"opentelemetry-sdk-extension-aws == 2.0.2",
3535
"opentelemetry-propagator-aws-xray == 1.0.1",
36-
"opentelemetry-distro == 0.48b0",
37-
"opentelemetry-processor-baggage == 0.48b0",
38-
"opentelemetry-propagator-ot-trace == 0.48b0",
39-
"opentelemetry-instrumentation == 0.48b0",
40-
"opentelemetry-instrumentation-aws-lambda == 0.48b0",
41-
"opentelemetry-instrumentation-aio-pika == 0.48b0",
42-
"opentelemetry-instrumentation-aiohttp-client == 0.48b0",
43-
"opentelemetry-instrumentation-aiopg == 0.48b0",
44-
"opentelemetry-instrumentation-asgi == 0.48b0",
45-
"opentelemetry-instrumentation-asyncpg == 0.48b0",
46-
"opentelemetry-instrumentation-boto == 0.48b0",
47-
"opentelemetry-instrumentation-boto3sqs == 0.48b0",
48-
"opentelemetry-instrumentation-botocore == 0.48b0",
49-
"opentelemetry-instrumentation-celery == 0.48b0",
50-
"opentelemetry-instrumentation-confluent-kafka == 0.48b0",
51-
"opentelemetry-instrumentation-dbapi == 0.48b0",
52-
"opentelemetry-instrumentation-django == 0.48b0",
53-
"opentelemetry-instrumentation-elasticsearch == 0.48b0",
54-
"opentelemetry-instrumentation-falcon == 0.48b0",
55-
"opentelemetry-instrumentation-fastapi == 0.48b0",
56-
"opentelemetry-instrumentation-flask == 0.48b0",
57-
"opentelemetry-instrumentation-grpc == 0.48b0",
58-
"opentelemetry-instrumentation-httpx == 0.48b0",
59-
"opentelemetry-instrumentation-jinja2 == 0.48b0",
60-
"opentelemetry-instrumentation-kafka-python == 0.48b0",
61-
"opentelemetry-instrumentation-logging == 0.48b0",
62-
"opentelemetry-instrumentation-mysql == 0.48b0",
63-
"opentelemetry-instrumentation-mysqlclient == 0.48b0",
64-
"opentelemetry-instrumentation-pika == 0.48b0",
65-
"opentelemetry-instrumentation-psycopg2 == 0.48b0",
66-
"opentelemetry-instrumentation-pymemcache == 0.48b0",
67-
"opentelemetry-instrumentation-pymongo == 0.48b0",
68-
"opentelemetry-instrumentation-pymysql == 0.48b0",
69-
"opentelemetry-instrumentation-pyramid == 0.48b0",
70-
"opentelemetry-instrumentation-redis == 0.48b0",
71-
"opentelemetry-instrumentation-remoulade == 0.48b0",
72-
"opentelemetry-instrumentation-requests == 0.48b0",
73-
"opentelemetry-instrumentation-sqlalchemy == 0.48b0",
74-
"opentelemetry-instrumentation-sqlite3 == 0.48b0",
75-
"opentelemetry-instrumentation-starlette == 0.48b0",
76-
"opentelemetry-instrumentation-system-metrics == 0.48b0",
77-
"opentelemetry-instrumentation-tornado == 0.48b0",
78-
"opentelemetry-instrumentation-tortoiseorm == 0.48b0",
79-
"opentelemetry-instrumentation-urllib == 0.48b0",
80-
"opentelemetry-instrumentation-urllib3 == 0.48b0",
81-
"opentelemetry-instrumentation-wsgi == 0.48b0",
82-
"opentelemetry-instrumentation-cassandra == 0.48b0",
36+
"opentelemetry-distro == 0.54b1",
37+
"opentelemetry-processor-baggage == 0.54b1",
38+
"opentelemetry-propagator-ot-trace == 0.54b1",
39+
"opentelemetry-instrumentation == 0.54b1",
40+
"opentelemetry-instrumentation-aws-lambda == 0.54b1",
41+
"opentelemetry-instrumentation-aio-pika == 0.54b1",
42+
"opentelemetry-instrumentation-aiohttp-client == 0.54b1",
43+
"opentelemetry-instrumentation-aiopg == 0.54b1",
44+
"opentelemetry-instrumentation-asgi == 0.54b1",
45+
"opentelemetry-instrumentation-asyncpg == 0.54b1",
46+
"opentelemetry-instrumentation-boto == 0.54b1",
47+
"opentelemetry-instrumentation-boto3sqs == 0.54b1",
48+
"opentelemetry-instrumentation-botocore == 0.54b1",
49+
"opentelemetry-instrumentation-celery == 0.54b1",
50+
"opentelemetry-instrumentation-confluent-kafka == 0.54b1",
51+
"opentelemetry-instrumentation-dbapi == 0.54b1",
52+
"opentelemetry-instrumentation-django == 0.54b1",
53+
"opentelemetry-instrumentation-elasticsearch == 0.54b1",
54+
"opentelemetry-instrumentation-falcon == 0.54b1",
55+
"opentelemetry-instrumentation-fastapi == 0.54b1",
56+
"opentelemetry-instrumentation-flask == 0.54b1",
57+
"opentelemetry-instrumentation-grpc == 0.54b1",
58+
"opentelemetry-instrumentation-httpx == 0.54b1",
59+
"opentelemetry-instrumentation-jinja2 == 0.54b1",
60+
"opentelemetry-instrumentation-kafka-python == 0.54b1",
61+
"opentelemetry-instrumentation-logging == 0.54b1",
62+
"opentelemetry-instrumentation-mysql == 0.54b1",
63+
"opentelemetry-instrumentation-mysqlclient == 0.54b1",
64+
"opentelemetry-instrumentation-pika == 0.54b1",
65+
"opentelemetry-instrumentation-psycopg2 == 0.54b1",
66+
"opentelemetry-instrumentation-pymemcache == 0.54b1",
67+
"opentelemetry-instrumentation-pymongo == 0.54b1",
68+
"opentelemetry-instrumentation-pymysql == 0.54b1",
69+
"opentelemetry-instrumentation-pyramid == 0.54b1",
70+
"opentelemetry-instrumentation-redis == 0.54b1",
71+
"opentelemetry-instrumentation-remoulade == 0.54b1",
72+
"opentelemetry-instrumentation-requests == 0.54b1",
73+
"opentelemetry-instrumentation-sqlalchemy == 0.54b1",
74+
"opentelemetry-instrumentation-sqlite3 == 0.54b1",
75+
"opentelemetry-instrumentation-starlette == 0.54b1",
76+
"opentelemetry-instrumentation-system-metrics == 0.54b1",
77+
"opentelemetry-instrumentation-tornado == 0.54b1",
78+
"opentelemetry-instrumentation-tortoiseorm == 0.54b1",
79+
"opentelemetry-instrumentation-urllib == 0.54b1",
80+
"opentelemetry-instrumentation-urllib3 == 0.54b1",
81+
"opentelemetry-instrumentation-wsgi == 0.54b1",
82+
"opentelemetry-instrumentation-cassandra == 0.54b1",
8383
]
8484

8585
[project.optional-dependencies]

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/_aws_attribute_keys.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,4 @@
3333
AWS_LAMBDA_FUNCTION_NAME: str = "aws.lambda.function.name"
3434
AWS_LAMBDA_RESOURCEMAPPING_ID: str = "aws.lambda.resource_mapping.id"
3535
AWS_LAMBDA_FUNCTION_ARN: str = "aws.lambda.function.arn"
36+
AWS_SERVICE_TYPE: str = "aws.service.type"

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/_aws_metric_attribute_generator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
)
3636
from amazon.opentelemetry.distro._aws_resource_attribute_configurator import get_service_attribute
3737
from amazon.opentelemetry.distro._aws_span_processing_util import (
38-
GEN_AI_REQUEST_MODEL,
3938
LOCAL_ROOT,
4039
MAX_KEYWORD_LENGTH,
4140
SQL_KEYWORD_PATTERN,
@@ -60,6 +59,7 @@
6059
from amazon.opentelemetry.distro.sqs_url_parser import SqsUrlParser
6160
from opentelemetry.sdk.resources import Resource
6261
from opentelemetry.sdk.trace import BoundedAttributes, ReadableSpan
62+
from opentelemetry.semconv._incubating.attributes.gen_ai_attributes import GEN_AI_REQUEST_MODEL
6363
from opentelemetry.semconv.trace import SpanAttributes
6464

6565
# Pertinent OTEL attribute keys

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/_aws_span_processing_util.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,6 @@
2626
# Max keyword length supported by parsing into remote_operation from DB_STATEMENT
2727
MAX_KEYWORD_LENGTH = 27
2828

29-
# TODO: Use Semantic Conventions once upgrade to 0.47b0
30-
GEN_AI_REQUEST_MODEL: str = "gen_ai.request.model"
31-
GEN_AI_SYSTEM: str = "gen_ai.system"
32-
GEN_AI_REQUEST_MAX_TOKENS: str = "gen_ai.request.max_tokens"
33-
GEN_AI_REQUEST_TEMPERATURE: str = "gen_ai.request.temperature"
34-
GEN_AI_REQUEST_TOP_P: str = "gen_ai.request.top_p"
35-
GEN_AI_RESPONSE_FINISH_REASONS: str = "gen_ai.response.finish_reasons"
36-
GEN_AI_USAGE_INPUT_TOKENS: str = "gen_ai.usage.input_tokens"
37-
GEN_AI_USAGE_OUTPUT_TOKENS: str = "gen_ai.usage.output_tokens"
38-
3929

4030
# Get dialect keywords retrieved from dialect_keywords.json file.
4131
# Only meant to be invoked by SQL_KEYWORD_PATTERN and unit tests

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/_utils.py

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22
# SPDX-License-Identifier: Apache-2.0
33

44
import os
5-
import sys
5+
from importlib.metadata import PackageNotFoundError, version
66
from logging import Logger, getLogger
7+
from typing import Optional
78

8-
import pkg_resources
9+
from packaging.requirements import Requirement
910

1011
_logger: Logger = getLogger(__name__)
1112

@@ -14,18 +15,60 @@
1415

1516
def is_installed(req: str) -> bool:
1617
"""Is the given required package installed?"""
17-
18-
if req in sys.modules and sys.modules[req] is not None:
19-
return True
18+
req = Requirement(req)
2019

2120
try:
22-
pkg_resources.get_distribution(req)
23-
except Exception as exc: # pylint: disable=broad-except
21+
dist_version = version(req.name)
22+
except PackageNotFoundError as exc:
2423
_logger.debug("Skipping instrumentation patch: package %s, exception: %s", req, exc)
2524
return False
25+
26+
if not list(req.specifier.filter([dist_version])):
27+
_logger.debug(
28+
"instrumentation for package %s is available but version %s is installed. Skipping.",
29+
req,
30+
dist_version,
31+
)
32+
return False
2633
return True
2734

2835

2936
def is_agent_observability_enabled() -> bool:
3037
"""Is the Agentic AI monitoring flag set to true?"""
3138
return os.environ.get(AGENT_OBSERVABILITY_ENABLED, "false").lower() == "true"
39+
40+
41+
IS_BOTOCORE_INSTALLED: bool = is_installed("botocore")
42+
43+
44+
def get_aws_session():
45+
"""Returns a botocore session only if botocore is installed, otherwise None.
46+
47+
We do this to prevent runtime errors for ADOT customers that do not need
48+
any features that require botocore.
49+
"""
50+
if IS_BOTOCORE_INSTALLED:
51+
# pylint: disable=import-outside-toplevel
52+
from botocore.session import Session
53+
54+
session = Session()
55+
# Botocore only looks up AWS_DEFAULT_REGION when creating a session/client
56+
# See: https://docs.aws.amazon.com/sdkref/latest/guide/feature-region.html#feature-region-sdk-compat
57+
region = os.environ.get("AWS_REGION") or os.environ.get("AWS_DEFAULT_REGION")
58+
if region:
59+
session.set_config_variable("region", region)
60+
return session
61+
return None
62+
63+
64+
def get_aws_region() -> Optional[str]:
65+
"""Get AWS region from environment or botocore session.
66+
67+
Returns the AWS region in the following priority order:
68+
1. AWS_REGION environment variable
69+
2. AWS_DEFAULT_REGION environment variable
70+
3. botocore session's region (if botocore is available)
71+
4. None if no region can be determined
72+
"""
73+
botocore_session = get_aws_session()
74+
return botocore_session.get_config_variable("region") if botocore_session else None

0 commit comments

Comments
 (0)