# \_ec2\_instance\_facts.py botocore.exceptions.NoCredentialsError: Unable to locate credentials

**URL:** <https://forum.ansible.com/t/ec2-instance-facts-py-botocore-exceptions-nocredentialserror-unable-to-locate-credentials/32834>\
**Category:** Ansible Project\
**Tags:** aws\
**Created:** [May 2, 2020, 3:13pm UTC](https://forum.ansible.com/t/ec2-instance-facts-py-botocore-exceptions-nocredentialserror-unable-to-locate-credentials/32834 "2020-05-02T15:13:41Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Meir\_Yanovich](https://avatars.discourse-cdn.com/v4/letter/m/9de0a6/32.png) [@Meir\_Yanovich](https://forum.ansible.com/u/Meir_Yanovich)\
**Post date:** [May 2, 2020, 3:13pm UTC](https://forum.ansible.com/t/ec2-instance-facts-py-botocore-exceptions-nocredentialserror-unable-to-locate-credentials/32834/1 "2020-05-02T15:13:41Z")

</div>

hello all

im upgrading python from 2.7 to python 3.7  
and now I’m getting error when using aws API on module : module: ec2\_instance\_facts

```auto
- name: Get facts
  local_action:
    module: ec2_instance_facts
    instance_ids:
      - "xxxxxxx"
    region: "xxxxxx"
  register: instance

```

ansible --versionansible 2.7.0  
config file = /etc/ansible/ansible.cfg  
configured module search path = [‘/home/ec2-user/.ansible/plugins/modules’, ‘/usr/share/ansible/plugins/modules’]  
ansible python module location = /home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/ansible  
executable location = /home/ec2-user/app\_virtualenv/bin/ansible  
python version = 3.7.6 (default, Feb 26 2020, 20:54:15) [GCC 7.3.1 20180712 (Red Hat 7.3.1-6)]

ansible-config dump --only-changed  
ANSIBLE\_PIPELINING(/etc/ansible/ansible.cfg) = False  
ANSIBLE\_SSH\_RETRIES(/etc/ansible/ansible.cfg) = 2  
DEFAULT\_CALLBACK\_WHITELIST(/etc/ansible/ansible.cfg) = [‘profile\_tasks’]  
DEFAULT\_LOAD\_CALLBACK\_PLUGINS(/etc/ansible/ansible.cfg) = True  
DEFAULT\_LOG\_PATH(/etc/ansible/ansible.cfg) = /home/ec2-user/app/logs/ansible.log  
DEFAULT\_PRIVATE\_KEY\_FILE(/etc/ansible/ansible.cfg) = /home/ec2-user/.ssh/DEV\_VPN.pem  
DEFAULT\_STDOUT\_CALLBACK(/etc/ansible/ansible.cfg) = yaml  
DEPRECATION\_WARNINGS(/etc/ansible/ansible.cfg) = False  
HOST\_KEY\_CHECKING(/etc/ansible/ansible.cfg) = False

python -m site  
sys.path = [  
‘/home/ec2-user/app’,  
‘/usr/lib64/python37.zip’,  
‘/usr/lib64/python3.7’,  
‘/usr/lib64/python3.7/lib-dynload’,  
‘/home/ec2-user/app\_virtualenv/lib64/python3.7/site-packages’,  
‘/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages’,  
]  
USER\_BASE: ‘/home/ec2-user/.local’ (exists)  
USER\_SITE: ‘/home/ec2-user/.local/lib/python3.7/site-packages’ (exists)  
ENABLE\_USER\_SITE: False

`  
the error I’m getting :

2020-05-02 11:54:57,580 p=23305 u=ec2-user | Saturday 02 May 2020 11:54:57 +0000 (0:00:00.476) 0:01:39.534 \*\*\*\*\*\*\*\*\*\*  
2020-05-02 11:54:57,750 p=23305 u=ec2-user | Using module file /home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/ansible/modules/cloud/amazon/ec2\_instance\_facts.py  
2020-05-02 11:54:58,120 p=23305 u=ec2-user | fatal: [10.0.5.187 → localhost]: FAILED! =\> changed=false  
module\_stderr: |-  
/home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ\_ec2\_instance\_facts.py:17: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module’s documentation for alternative uses  
import imp  
Traceback (most recent call last):  
File “/home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ\_ec2\_instance\_facts.py”, line 113, in   
\_ansiballz\_main()  
File “/home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ\_ec2\_instance\_facts.py”, line 105, in \_ansiballz\_main  
invoke\_module(zipped\_mod, temp\_path, ANSIBALLZ\_PARAMS)  
File “/home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ\_ec2\_instance\_facts.py”, line 48, in invoke\_module  
imp.load\_module(‘ **main** ’, mod, module, MOD\_DESC)  
File “/usr/lib64/python3.7/imp.py”, line 234, in load\_module  
return load\_source(name, filename, file)  
File “/usr/lib64/python3.7/imp.py”, line 169, in load\_source  
module = \_exec(spec, sys.modules[name])  
File “”, line 630, in \_exec  
File “”, line 728, in exec\_module  
File “”, line 219, in \_call\_with\_frames\_removed  
File “/tmp/ansible\_ec2\_instance\_facts\_payload\_zmc16g7o/ **main**.py”, line 555, in   
File “/tmp/ansible\_ec2\_instance\_facts\_payload\_zmc16g7o/ **main**.py”, line 551, in main  
File “/tmp/ansible\_ec2\_instance\_facts\_payload\_zmc16g7o/ **main**.py”, line 505, in list\_ec2\_instances  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/paginate.py”, line 449, in build\_full\_result  
for response in self:  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/paginate.py”, line 255, in **iter**  
response = self.\_make\_request(current\_kwargs)  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/paginate.py”, line 332, in \_make\_request  
return self.\_method(\*\*current\_kwargs)  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/client.py”, line 357, in \_api\_call  
return self.\_make\_api\_call(operation\_name, kwargs)  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/client.py”, line 648, in \_make\_api\_call  
operation\_model, request\_dict, request\_context)  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/client.py”, line 667, in \_make\_request  
return self.\_endpoint.make\_request(operation\_model, request\_dict)  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/endpoint.py”, line 102, in make\_request  
return self.\_send\_request(request\_dict, operation\_model)  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/endpoint.py”, line 132, in \_send\_request  
request = self.create\_request(request\_dict, operation\_model)  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/endpoint.py”, line 116, in create\_request  
operation\_name=operation\_model.name)  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/hooks.py”, line 356, in emit  
return self.\_emitter.emit(aliased\_event\_name, \*\*kwargs)  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/hooks.py”, line 228, in emit  
return self.\_emit(event\_name, kwargs)  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/hooks.py”, line 211, in \_emit  
response = handler(\*\*kwargs)  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/signers.py”, line 90, in handler  
return self.sign(operation\_name, request)  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/signers.py”, line 157, in sign  
auth.add\_auth(request)  
File “/home/ec2-user/app\_virtualenv/lib/python3.7/site-packages/botocore/auth.py”, line 357, in add\_auth  
raise NoCredentialsError  
botocore.exceptions.NoCredentialsError: Unable to locate credentials  
module\_stdout: ‘’  
msg: |-  
MODULE FAILURE  
See stdout/stderr for the exact error  
rc: 1

`

Although i have the credentials in .aws dir  
and when i doing ec2 simple API call I’m getting results :

python

`

Python 3.7.6 (default, Feb 26 2020, 20:54:15)  
[GCC 7.3.1 20180712 (Red Hat 7.3.1-6)] on linux  
Type “help”, “copyright”, “credits” or “license” for more information.

> > > import boto3  
> > > ec2\_resource = boto3.resource(‘ec2’)  
> > > ec2\_client = boto3.client(‘ec2’)  
> > > ec2\_client.describe\_instances()  
> > > {‘Reservations’: [{‘Groups’: , ‘Instances’: [{‘AmiLaunchIndex’: 0, ‘ImageId’: ‘ami-b66ed3de’, ‘InstanceId’: ‘i-be381945’, ‘InstanceType’: ‘m5.large’, ‘KeyName’: ‘DEV\_VPN’, ‘LaunchTime’: datetime.datetime(2019, 3, 4, 8, 25, 17, tzinfo=tzlocal()), ‘Monitoring’: {‘State’: ‘disabled’}, ‘Placement’: {'Avail …

`

---

<div class="post-metadata">

**Author:** ![Meir\_Yanovich](https://avatars.discourse-cdn.com/v4/letter/m/9de0a6/32.png) [@Meir\_Yanovich](https://forum.ansible.com/u/Meir_Yanovich)\
**Post date:** [May 2, 2020, 3:39pm UTC](https://forum.ansible.com/t/ec2-instance-facts-py-botocore-exceptions-nocredentialserror-unable-to-locate-credentials/32834/2 "2020-05-02T15:39:30Z")

</div>

after updating ansible to the latest I’m getting this error:

`2020-05-02 11:54:57,580 p=23305 u=ec2-user | task path: /home/ec2-user/ansible/ansible_linux/roles/package_deploy/tasks/main.yml:5 2020-05-02 11:54:57,580 p=23305 u=ec2-user | Saturday 02 May 2020 11:54:57 +0000 (0:00:00.476) 0:01:39.534 **********2020-05-02 11:54:57,750 p=23305 u=ec2-user | Using module file /home/ec2-user/app_virtualenv/lib/python3.7/site-packages/ansible/modules/cloud/amazon/ec2_instance_facts.py 2020-05-02 11:54:58,120 p=23305 u=ec2-user | fatal: [10.0.5.187 -> localhost]: FAILED! => changed=false module_stderr: |- /home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ_ec2_instance_facts.py:17: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses import imp Traceback (most recent call last): File "/home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ_ec2_instance_facts.py", line 113, in <module> _ansiballz_main() File "/home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ_ec2_instance_facts.py", line 105, in _ansiballz_main invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS) File "/home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ_ec2_instance_facts.py", line 48, in invoke_module imp.load_module(' __main__', mod, module, MOD_DESC) File "/usr/lib64/python3.7/imp.py", line 234, in load_module return load_source(name, filename, file) File "/usr/lib64/python3.7/imp.py", line 169, in load_source module = _exec(spec, sys.modules[name]) File "<frozen importlib._bootstrap>", line 630, in _exec File "<frozen importlib._bootstrap_external>", line 728, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/tmp/ansible_ec2_instance_facts_payload_zmc16g7o/ __main__.py", line 555, in <module> File "/tmp/ansible_ec2_instance_facts_payload_zmc16g7o/ __main__.py", line 551, in main File "/tmp/ansible_ec2_instance_facts_payload_zmc16g7o/ __main__.py", line 505, in list_ec2_instances File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/paginate.py", line 449, in build_full_result for response in self: File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/paginate.py", line 255, in __iter__ response = self._make_request(current_kwargs) File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/paginate.py", line 332, in _make_request return self._method(**current_kwargs) File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/client.py", line 357, in _api_call return self._make_api_call(operation_name, kwargs) File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/client.py", line 648, in _make_api_call operation_model, request_dict, request_context) File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/client.py", line 667, in _make_request return self._endpoint.make_request(operation_model, request_dict) File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/endpoint.py", line 102, in make_request return self._send_request(request_dict, operation_model) File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/endpoint.py", line 132, in _send_request request = self.create_request(request_dict, operation_model) File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/endpoint.py", line 116, in create_request operation_name=operation_model.name) monitoring: true`

---

<div class="post-metadata">

**Author:** ![Meir\_Yanovich](https://avatars.discourse-cdn.com/v4/letter/m/9de0a6/32.png) [@Meir\_Yanovich](https://forum.ansible.com/u/Meir_Yanovich)\
**Post date:** [May 2, 2020, 11:56pm UTC](https://forum.ansible.com/t/ec2-instance-facts-py-botocore-exceptions-nocredentialserror-unable-to-locate-credentials/32834/3 "2020-05-02T23:56:12Z")

</div>

after many trys i thing that mybe the problem is that i need to install boto3 on the remote host  
fo this i did :  
to install it but first, i need pip to be installed on remote  
and i try to invoke it but i keep getting :

and i try to invoke it but i keep getting :  
`

fatal: [10.0.6.182]: FAILED! =\> changed=false  
invocation:  
module\_args:  
chdir: null  
editable: false  
executable: null  
extra\_args: null  
name:

- pip  
requirements: null  
state: latest  
umask: null  
version: null  
virtualenv: null  
virtualenv\_command: virtualenv  
virtualenv\_python: null  
virtualenv\_site\_packages: false  
msg: Unable to find any of pip2, pip to use. pip needs to be installed.  
`

I’m using :

`

- name: Upgrade pip  
pip: name=pip state=latest  
tags:

- packages

- name: Ensure botocore and boto3 modules are installed  
pip:  
name: [“boto3”, “botocore”]  
extra\_args: “–user”  
`

---

<div class="post-metadata">

**Author:** ![Meir\_Yanovich](https://avatars.discourse-cdn.com/v4/letter/m/9de0a6/32.png) [@Meir\_Yanovich](https://forum.ansible.com/u/Meir_Yanovich)\
**Post date:** [May 4, 2020, 10:29am UTC](https://forum.ansible.com/t/ec2-instance-facts-py-botocore-exceptions-nocredentialserror-unable-to-locate-credentials/32834/4 "2020-05-04T10:29:33Z")

</div>

I’m answering my self and to help whom facing this problem  
i couldn’t find it on the entire internet!  
the thing is that boto3 is searching for the AWS credentials in /etc/boto.cfg  
and not in .aws directory …  
so to find out i had to debug ansible using this link which was very helpful  
[https://docs.ansible.com/ansible/latest/user\_guide/playbooks\_debugger.html](https://docs.ansible.com/ansible/latest/user_guide/playbooks_debugger.html)  
in fact, I think it is the most helpful link in ansible ecosystem.!  
as this how you have suddenly eyes and can understand what is going on !
