aws-xray-sdk 0.11.4 → 0.11.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/aws-xray-sdk/facets/net_http.rb +8 -2
- data/lib/aws-xray-sdk/plugins/ec2.rb +70 -15
- data/lib/aws-xray-sdk/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c1ab8a4e8310389271dc8ea0fd7494f067f709d
|
4
|
+
data.tar.gz: ac7ef8e89a9123cb9d7e9f77ba63d663c55d56d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a05a1d2a8c8a18df8503ac1943ff713c6e65a5991cba6790e66273e63b70748d726f8173ac2427d00808fdeb2519e63aa60ce8a13c22111652fa7b504d100c5c
|
7
|
+
data.tar.gz: 2e3f7eb44a7330d971dbbe562a6786d2aedb9a7319982c71c8cd7143c3ebe2d35c30a4dcdd5489e689ae7b26fe1dc6230a0dc82d8e727e9c5699f03378e73d39
|
@@ -30,9 +30,15 @@ module XRay
|
|
30
30
|
req.path && (req.path == ('/GetSamplingRules') || req.path == ('/SamplingTargets'))
|
31
31
|
end
|
32
32
|
|
33
|
+
# Instance Metadata Service provides endpoint 169.254.169.254 to
|
34
|
+
# provide EC2 metadata
|
35
|
+
def ec2_metadata_request?(req)
|
36
|
+
req.uri && req.uri.hostname == '169.254.169.254'
|
37
|
+
end
|
38
|
+
|
33
39
|
def request(req, body = nil, &block)
|
34
|
-
# Do not trace requests to xray or aws lambda runtime
|
35
|
-
if xray_sampling_request?(req) || lambda_runtime_request?
|
40
|
+
# Do not trace requests to xray or aws lambda runtime or ec2 metadata endpoint
|
41
|
+
if xray_sampling_request?(req) || lambda_runtime_request? || ec2_metadata_request?(req)
|
36
42
|
return super
|
37
43
|
end
|
38
44
|
|
@@ -1,36 +1,91 @@
|
|
1
|
-
require '
|
1
|
+
require 'net/http'
|
2
|
+
require 'json'
|
2
3
|
require 'aws-xray-sdk/logger'
|
3
4
|
|
4
5
|
module XRay
|
5
6
|
module Plugins
|
6
|
-
# A plugin that gets the EC2
|
7
|
+
# A plugin that gets the EC2 instance_id, availabiity_zone, instance_type, and ami_id if running on an EC2 instance.
|
7
8
|
module EC2
|
8
9
|
include Logging
|
9
10
|
|
10
11
|
ORIGIN = 'AWS::EC2::Instance'.freeze
|
12
|
+
|
11
13
|
# http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-data-retrieval
|
12
|
-
|
13
|
-
AZ_ADDR = 'http://169.254.169.254/latest/meta-data/placement/availability-zone'.freeze
|
14
|
+
METADATA_BASE_URL = 'http://169.254.169.254/latest'.freeze
|
14
15
|
|
15
16
|
def self.aws
|
16
|
-
@@aws
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
@@aws = {}
|
18
|
+
token = get_token
|
19
|
+
ec2_metadata = get_metadata(token)
|
20
|
+
@@aws = {
|
21
|
+
ec2: ec2_metadata
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
private # private methods
|
27
|
+
|
28
|
+
def self.get_token
|
29
|
+
token_uri = URI(METADATA_BASE_URL + '/api/token')
|
30
|
+
|
31
|
+
req = Net::HTTP::Put.new(token_uri)
|
32
|
+
req['X-aws-ec2-metadata-token-ttl-seconds'] = '60'
|
33
|
+
begin
|
34
|
+
return do_request(req)
|
35
|
+
rescue StandardError => e
|
36
|
+
Logging.logger.warn %(can not get the IMDSv2 token due to: #{e.message}.)
|
37
|
+
''
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.get_metadata(token)
|
42
|
+
metadata_uri = URI(METADATA_BASE_URL + '/dynamic/instance-identity/document')
|
43
|
+
|
44
|
+
req = Net::HTTP::Get.new(metadata_uri)
|
45
|
+
if token != ''
|
46
|
+
req['X-aws-ec2-metadata-token'] = token
|
47
|
+
end
|
48
|
+
|
49
|
+
begin
|
50
|
+
metadata_json = do_request(req)
|
51
|
+
return parse_metadata(metadata_json)
|
52
|
+
rescue StandardError => e
|
53
|
+
Logging.logger.warn %(can not get the ec2 instance metadata due to: #{e.message}.)
|
54
|
+
{}
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.parse_metadata(json_str)
|
59
|
+
metadata = {}
|
60
|
+
data = JSON(json_str)
|
61
|
+
metadata['instance_id'] = data['instanceId']
|
62
|
+
metadata['availability_zone'] = data['availabilityZone']
|
63
|
+
metadata['instance_type'] = data['instanceType']
|
64
|
+
metadata['ami_id'] = data['imageId']
|
65
|
+
|
66
|
+
metadata
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.do_request(request)
|
70
|
+
begin
|
71
|
+
response = Net::HTTP.start(request.uri.hostname, read_timeout: 1) { |http|
|
72
|
+
http.request(request)
|
24
73
|
}
|
74
|
+
|
75
|
+
if response.code == '200'
|
76
|
+
return response.body
|
77
|
+
else
|
78
|
+
raise(StandardError.new('Unsuccessful response::' + response.code + '::' + response.message))
|
79
|
+
end
|
25
80
|
rescue StandardError => e
|
26
|
-
# Two attempts in total to
|
81
|
+
# Two attempts in total to complete the request successfully
|
27
82
|
@retries ||= 0
|
28
83
|
if @retries < 1
|
29
84
|
@retries += 1
|
30
85
|
retry
|
31
86
|
else
|
32
|
-
|
33
|
-
|
87
|
+
Logging.logger.warn %(Failed to complete request due to: #{e.message}.)
|
88
|
+
raise e
|
34
89
|
end
|
35
90
|
end
|
36
91
|
end
|
data/lib/aws-xray-sdk/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-xray-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Amazon Web Services
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-xray
|