Load Amazon EC2 metadata automatically
keijack opened this issue · 5 comments
I want to load Amazon EC2 metadata when your component register to eureka server, I can find the method to do it, but I have no Amazon EC2 to test it. I will create a branch to write this feature, but I need someone help me to test it.
I can help. Describe the steps needed.
Getting errors loading AWS metadata with data_center_name="Amazon" set.
-[aws_info_loader]-[line:63] -ERROR: error when loading metadata from aws network/interfaces/macs/('02:49:7c:6a:c8:15', <http.client.HTTPResponse object at 0x7f6b1bce9610>)/vpc-id
-[aws_info_loader]-[line:63] -ERROR: error when loading metadata from aws public-hostname
-[aws_info_loader]-[line:63] -ERROR: error when loading metadata from aws public-ipv4
-[aws_info_loader]-[line:74] -ERROR: error when loading dynamic instance identity document from aws
@ciphero Thanks, for submitting, I have update some code, please upgrade to 0.9.8 and try again.
Still getting some errors.. Here's the full log:
$ python3 eurekaclient.py
[2021-04-27 10:46:15]-[aws_info_loader]-[line:63] -ERROR: error when loading metadata from aws public-hostname
Traceback (most recent call last):
File "/home/ec2-user/.local/lib/python3.7/site-packages/py_eureka_client/__aws_info_loader.py", line 61, in get_ec2_metadata
return http_client.load(f"{_AWS_METADATA_SERVICE_URL}meta-data/{meta_path}")[0]
File "/home/ec2-user/.local/lib/python3.7/site-packages/py_eureka_client/http_client.py", line 146, in load
res = http_cli.urlopen()
File "/home/ec2-user/.local/lib/python3.7/site-packages/py_eureka_client/http_client.py", line 113, in urlopen
cadefault=self.cadefault, context=self.context)
File "/usr/lib64/python3.7/urllib/request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib64/python3.7/urllib/request.py", line 531, in open
response = meth(req, response)
File "/usr/lib64/python3.7/urllib/request.py", line 641, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib64/python3.7/urllib/request.py", line 569, in error
return self._call_chain(*args)
File "/usr/lib64/python3.7/urllib/request.py", line 503, in _call_chain
result = func(*args)
File "/usr/lib64/python3.7/urllib/request.py", line 649, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found
[2021-04-27 10:46:15]-[aws_info_loader]-[line:63] -ERROR: error when loading metadata from aws public-ipv4
Traceback (most recent call last):
File "/home/ec2-user/.local/lib/python3.7/site-packages/py_eureka_client/__aws_info_loader.py", line 61, in get_ec2_metadata
return http_client.load(f"{_AWS_METADATA_SERVICE_URL}meta-data/{meta_path}")[0]
File "/home/ec2-user/.local/lib/python3.7/site-packages/py_eureka_client/http_client.py", line 146, in load
res = http_cli.urlopen()
File "/home/ec2-user/.local/lib/python3.7/site-packages/py_eureka_client/http_client.py", line 113, in urlopen
cadefault=self.cadefault, context=self.context)
File "/usr/lib64/python3.7/urllib/request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib64/python3.7/urllib/request.py", line 531, in open
response = meth(req, response)
File "/usr/lib64/python3.7/urllib/request.py", line 641, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib64/python3.7/urllib/request.py", line 569, in error
return self._call_chain(*args)
File "/usr/lib64/python3.7/urllib/request.py", line 503, in _call_chain
result = func(*args)
File "/usr/lib64/python3.7/urllib/request.py", line 649, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found
@ciphero This happens when trying to load public-hostname from http://169.254.169.254/latest/meta-data/public-hostname
. It seems that public-hostname is not available in your metadata service configuration. That may be means your EC2 have no public hostname. However, in version 0.9.9 the error logs when loading public-hostname/public-ip like you post are ignored.