1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
//! OTel [`Resource`] detection for AWS environments.
//!
//! The central entry point is [`default_resource()`], which probes the runtime
//! environment and returns a [`Resource`] populated with OTel semantic-convention
//! attributes. Detection is attempted in priority order:
//!
//! 1. **Lambda** (`env-lambda`) — checks `AWS_LAMBDA_FUNCTION_NAME`
//! 2. **ECS** (`env-ecs`) — checks `ECS_CONTAINER_METADATA_URI_V4`
//! 3. **EKS** (`env-eks`) — checks for the Kubernetes service-account mount
//! 4. **EC2** (`env-ec2`) — queries IMDSv2 for the instance ID
//!
//! The first detector that succeeds wins. If none match, a minimal resource
//! with `cloud.provider = "aws"` is returned.
//!
//! Each detector is in its own feature-gated sub-module. You can call the
//! per-environment functions directly if you need to bypass the auto-detection
//! logic.
//!
//! [`Resource`]: opentelemetry_sdk::Resource
// Environment resource detection — common types and feature-gated detectors.
use KeyValue;
use Resource;
use attribute as semco;
/// Auto-detects the AWS runtime environment and returns an OTel [`Resource`].
///
/// Detection is attempted in priority order, stopping at the first success:
///
/// 1. **Lambda** (`env-lambda`) — checks `AWS_LAMBDA_FUNCTION_NAME`; calls
/// [`lambda::lambda_resource`].
/// 2. **ECS** (`env-ecs`) — checks `ECS_CONTAINER_METADATA_URI_V4`; calls
/// [`ecs::ecs_resource`].
/// 3. **EKS** (`env-eks`) — checks for the Kubernetes service-account mount;
/// calls [`eks::eks_resource`].
/// 4. **EC2** (`env-ec2`) — queries IMDSv2; calls [`ec2::ec2_resource`].
///
/// If no detector succeeds (or no environment feature is enabled), a minimal
/// resource with `cloud.provider = "aws"` is returned.
///
/// This function is called automatically by [`crate::init::default_tracer_provider`].
/// Call it directly only when you need to compose a custom [`SdkTracerProvider`].
///
/// # Examples
///
/// ```no_run
/// use awssdk_instrumentation::env::default_resource;
/// use opentelemetry_sdk::trace::SdkTracerProvider;
///
/// let resource = default_resource();
/// let provider = SdkTracerProvider::builder()
/// .with_resource(resource)
/// .build();
/// ```
///
/// [`Resource`]: opentelemetry_sdk::Resource
/// [`SdkTracerProvider`]: opentelemetry_sdk::trace::SdkTracerProvider