@@ -147,16 +147,16 @@ def ec2_metadata_credentials_json
147
147
require_relative "request/connection_pools"
148
148
require "json"
149
149
token = ec2_metadata_token
150
+
150
151
iam_info = ec2_metadata_request ( EC2_IAM_INFO , token )
151
152
# Expected format: arn:aws:iam::<id>:instance-profile/<role_name>
152
153
role_name = iam_info [ "InstanceProfileArn" ] . split ( "/" ) . last
153
154
ec2_metadata_request ( EC2_IAM_SECURITY_CREDENTIALS + role_name , token )
154
155
end
155
156
156
157
def ec2_metadata_request ( url , token )
157
- uri = Gem ::URI ( url )
158
- @request_pool ||= create_request_pool ( uri )
159
- request = Gem ::Request . new ( uri , Gem ::Net ::HTTP ::Get , nil , @request_pool )
158
+ request = ec2_iam_request ( Gem ::URI ( url ) , Gem ::Net ::HTTP ::Get )
159
+
160
160
response = request . fetch do |req |
161
161
req . add_field "X-aws-ec2-metadata-token" , token
162
162
end
@@ -170,9 +170,8 @@ def ec2_metadata_request(url, token)
170
170
end
171
171
172
172
def ec2_metadata_token
173
- uri = Gem ::URI ( EC2_IAM_TOKEN )
174
- @request_pool ||= create_request_pool ( uri )
175
- request = Gem ::Request . new ( uri , Gem ::Net ::HTTP ::Put , nil , @request_pool )
173
+ request = ec2_iam_request ( Gem ::URI ( EC2_IAM_TOKEN ) , Gem ::Net ::HTTP ::Put )
174
+
176
175
response = request . fetch do |req |
177
176
req . add_field "X-aws-ec2-metadata-token-ttl-seconds" , 60
178
177
end
@@ -185,6 +184,14 @@ def ec2_metadata_token
185
184
end
186
185
end
187
186
187
+ def ec2_iam_request ( uri , verb )
188
+ @request_pool ||= { }
189
+ @request_pool [ uri ] ||= create_request_pool ( uri )
190
+ pool = @request_pool [ uri ]
191
+
192
+ Gem ::Request . new ( uri , verb , nil , pool )
193
+ end
194
+
188
195
def create_request_pool ( uri )
189
196
proxy_uri = Gem ::Request . proxy_uri ( Gem ::Request . get_proxy_from_env ( uri . scheme ) )
190
197
certs = Gem ::Request . get_cert_files
0 commit comments